shell的变量

Linux 系统中 shell 变量的使用

文章目录

    • (1)简介
    • (2)变量分类
    • (3)变量赋值
    • (4)变量命名
    • (5)变量引用
    • (6)变量清除
    • (7)变量只读
    • (8)内部参数变量
    • (9)环境变量
    • (10)数组

(1)简介

变量是 shell 中用来存储数据的一种特殊标识符。变量可以用来保存用户输入的值,也可以用来保存计算结果。

(2)变量分类

shell 中的变量可以分为以下几类:

  • 用户自定义变量:由用户自己定义、修改、使用。
  • 环境变量:由系统维护,用于存储有关系统和用户的信息。
  • 位置参数变量:通过命令行给程序传递执行参数。
  • 内部参数变量:是 bash 预定义的特殊变量,用户不能修改。

(3)变量赋值

变量赋值的格式如下:

变量名=值

例如:

name="Josh"

(4)变量命名

变量名的命名规则如下:

  • 变量名只能由字母、数字、下划线组成。
  • 变量名不能以数字开头。
  • 变量名不能是关键字和特殊字符。

(5)变量引用

变量引用的格式如下:

$变量名

例如:

echo $name

输出:

Josh

(6)变量清除

变量清除的格式如下:

unset 变量名

例如:

unset name

(7)变量只读

变量设置为只读的格式如下:

readonly 变量名

例如:

readonly name

(8)内部参数变量

shell 内部参数变量是一组特殊的变量,它们由 shell 自动设置和维护,用于存储有关 shell 和正在运行的命令的信息。

以下是一些常见的 shell 内部参数变量及其用途:

变量名含义
$0保存当前脚本或命令的名称。
$1, $2, $3, …保存传递给脚本或函数的位置参数。
$#保存传递给脚本或函数的位置参数的数量。
$@保存所有传递给脚本或函数的位置参数的列表。
$*保存所有传递给脚本或函数的位置参数的列表,作为一个单独的字符串。
$$保存当前 shell 进程的进程 ID(PID)。
$?保存上一个命令的退出状态(返回值)。通常,0 表示成功,非零值表示出现了错误。
$!保存在后台运行的最后一个命令的 PID。
$_ $表示在此之前执行的命令或脚本的最后一个参数 \

示例:

#!/bin/bash
echo "这个脚本的名字是: $0"
echo "参数一共有: $#"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个位置参数是: $1"
echo "第二个位置参数是: $2"
echo "第三个位置参数是: $3"

执行结果:

[root@localhost shell]# sh 1.sh 1 2 3 4 5 6
这个脚本的名字是: 1.sh
参数一共有: 6
参数的列表是: 1 2 3 4 5 6
参数的列表是: 1 2 3 4 5 6
第一个位置参数是: 1
第二个位置参数是: 2
第三个位置参数是: 3
标题Linux 系统中 shell 变量的使用
简介变量是 shell 中用来存储数据的一种特殊标识符。变量可以用来保存用户输入的值,也可以用来保存计算结果。
分类用户自定义变量、环境变量、位置参数变量、内部参数变量
赋值变量名=值
命名只能由字母、数字、下划线组成;不能以数字开头;不能是关键字和特殊字符
引用$变量名
清除unset 变量名
只读readonly 变量名
内部参数变量$0、KaTeX parse error: Expected 'EOF', got '#' at position 9: 1、2、...、#̲、@、*、、?、 ! 、 !、 !_
常见环境变量PWD、PATH、USER、LOGNAME、SHELL、HOME
应用保存用户输入的值、保存计算结果、传递参数给命令或脚本、控制命令或脚本的执行
退出返回状态保存在变量 ?

其他示例

[root@localhost]# echo $$		#显示当前进程的pid
2163
[root@localhost]# echo $? 		#显示上一条命令的返回值
0
[root@localhost ]# bash			#调用子shell
[root@localhost]# echo $$
4539
[root@localhost]# exit 1		#指定返回值并返回父shell
exit

命令状态返回值:
shell 命令的退出状态(返回值)保存在变量 ? 中。

  • 0 表示成功
  • 1 表示通用错误或执行失败
  • 126 表示命令或脚本没权限
  • 127 表示命令没找到

1、通常,0 表示成功,非零值表示出现了错误。例如:

[root@localhost ~]# echo "Hello, world!"
Hello, world!
[root@localhost ~]# echo $?
0

2、命令执行失败,返回1

[root@localhost shell]# chmod +x 2.sh
chmod: 无法访问"2.sh": 没有那个文件或目录
[root@localhost shell]# echo $?
1

3、权限不够,返回126

[root@localhost shell]# ./1.sh
-bash: ./1.sh: 权限不够
[root@localhost shell]# echo $?
126

4、执行不存在的命令,提示返回127

[root@localhost shell]# eoch $USER
-bash: eoch: 未找到命令
[root@localhost shell]# echo $?
127

以上返回值,常用于判断命令是否执行成功,例如:

创建文件的脚本中,如果$?的返回值,ne代表不等于0,不等于0那么就是执行失败。

#!/bin/bash
read -p "输入需要创建的文件名:" file
touch $file
if [ $? -ne 0 ];then		echo "文件创建错误"
elseecho "成功创建 $file 文件"
fi

结论:退出返回状态可以用于判断命令的执行结果。

(9)环境变量

环境变量是保存在系统内存中的数据,可以被所有程序访问。环境变量可以用于存储各种信息,例如当前工作目录、可执行程序的搜索路径、用户的名称等。

常见环境变量

变量名含义
PWD保存当前工作目录。
PATH保存可执行程序的搜索路径。
USER保存当前用户的名称。
LOGNAME保存当前用户的登录名。
SHELL保存当前 shell 的类型。
HOME保存当前用户的主目录。

使用

环境变量可以通过 echo 命令来查看:

Bash

echo $PWD

输出:

/home/user

环境变量也可以在命令行中使用,例如:

Bash

cd $HOME

这条命令将切换到当前用户的主目录。

补充

除了上述常见环境变量之外,还有一些其他的环境变量,例如:

变量名含义
HISTSIZE保存历史命令的数量。
HISTFILESIZE保存历史命令的文件大小。
LANG保存系统语言环境。
LC_ALL保存系统的区域设置。
TERM保存终端类型。
EDITOR保存默认编辑器。

这些环境变量可以用于控制 shell 的行为或提供给程序使用。

(10)数组

shell 中的数组是一种特殊的变量,可以保存多个值。数组的元素可以是任何数据类型,包括字符串、数字、布尔值等。

数组的定义格式如下:

变量名=(元素1 元素2 ... 元素n)

1、例如,定义一个名为 numbers 的数组,其中包含 1、2、3 三个元素:

numbers=(1 2 3)

数组的元素可以通过索引来访问。索引从 0 开始,例如:

echo ${numbers[0]}

输出:

1

读取全部元素:

echo ${numbers[@]}

输出

1 2 3

也可以使用 for 循环来遍历数组:

for i in "${numbers[@]}"
doecho "$i"
done

输出:

1
2
3

实验示例

# 定义一个名为 `fruits` 的数组,其中包含 "apple"、"banana"、"orange" 三个元素
fruits=(apple banana orange)# 遍历数组
for fruit in "${fruits[@]}"
doecho "$fruit"
done# 获取数组的长度
echo ${#fruits[@]}

输出:

apple
banana
orange
3

shell 数组可以用于存储多个值,可以用于各种场景。掌握 shell 数组的使用方法,可以帮助我们更好地使用 shell。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaWeb+SSM+Vue马拉松报名系统微信小程序的设计和实现

基于JavaWebSSMVue马拉松报名系统微信小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.…

WPF仿网易云搭建笔记(0):项目搭建

文章目录 前言项目地址项目Nuget包搭建项目初始化项目架构App.xaml引入MateralDesign资源包 项目初步分析将标题栏去掉DockPanel初步布局 资源字典举例 结尾 前言 最近在找工作,发现没有任何的WPF可以拿的出手的工作经验,打算仿照网易云搭建一个WPF版本…

Numpy 实现基尼指数算法的决策树

基尼系数实现决策树 基尼指数 Gini ⁡ ( D ) 1 − ∑ k 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \operatorname{Gini}(D)1-\sum_{k1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2} Gini(D)1−k1∑K​(∣D∣∣Ck​∣​)2 特征 A A A条件下集合 D D D的基尼指数: Gi…

使用ssm框架进行mapper或者service单纯测试时报错问题处理

问题 使用注解方式配置好ssm后,无法在测试中单独测试mapper层和service层。效果如下: 解决 关闭配置类中的EnableWebMvc 再次运行,即可完成测试。

【SpringBoot篇】5种类型参数传递json数据传参的操作

🎊专栏【SpringBoot】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺普通参数🌺POJO参数🌺嵌套…

uniapp切换页面时报错问题

我们来看如下错误: 该错误的意思是不能切换到 tabbar 页面。tabbar页面通常是公共页面或者底部导航栏,如果我们用 navigateTo 或者 redirectTo 都不能实现页面切换。 我们有两种方式: 第一种是用 switchTab 来进行切换,但注意切…

xml文本转Java对象

Java对象转String public static String toData(Object object) throws Exception {JAXBContext jc JAXBContext.newInstance(object.getClass());Marshaller m jc.createMarshaller();StringWriter output new StringWriter(2048);m.marshal(object, output);String data …

STM32之SPI总线

一、SPI总线概述 1、SPI总线介绍 SPI是一种通信协议,它是摩托罗拉公司研发出来的一种通信协议,就有自己的特点(串行,并行,单工,半双工,全双工,同步异步)。它主要应用于音…

ffprobe命令行超详细使用详解

本文做为阅读ffprobe源码的前课程。为了之后方便理解ffprobe的源码,咱们先从ffprobe的命令学习。 课程内容如下: 文章目录 一、ffprobe主要选项说明1、每次使用ffprobe都打印编译环境的信息,太烦了2、如何分析媒体文件中存在的流信息3、如何指定查询某路流信息4、查看输入文…

CS106L2023 and CS106B 环境配置(详细教程)

1.问题: (1)CS106L 运行./setup.sh 脚本时出错 (windows 请下载git,在git bash 打开运行) (2)CS106B,QT构建 构建错误:一般构建错误,例如 Erro…

【Java+MySQL】前后端连接小白教程

目录 🍭【IntelliJ IDEA】操作 🍭1. 连接MySQL数据库 🌈1.1 错误解决 🍭2. 操作MySQL数据库 🌈2.1 双击查看表数据 🌈2.2 编写SQL脚本 🍭【IntelliJ IDEA】 IntelliJ IDEA是由JetBrains公司…

2013年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2013 级考研管理类联考数学真题一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2013-01&…

Django自定义中间件

自定义中间件 传统方法的的五大钩子函数:(需要调用MiddlewareMixin类) process_request,请求刚到来,执行视图之前;正序 process_view,路由转发到视图,执行视图之前;正序…

【Linux】地址空间

本片博客将重点回答三个问题 什么是地址空间? 地址空间是如何设计的? 为什么要有地址空间? 程序地址空间排布图 在32位下,一个进程的地址空间,取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…

【Python数据结构与算法】—— 搜索算法 | 期末复习不挂科系列

​ 🌈个人主页: Aileen_0v0🔥系列专栏: 数据结构与算法💫个人格言:"没有罗马,那就自己创造罗马~" 这篇博客主要探索的是计算机科学常见问题---搜索算法 “时间紧,任务重!” 话不多说,开始今天…

HarmonyOS--ArkTS(0)--目录

官方API文档: HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 华为开发者官方网站_创新从这里开始

MySQL的锁机制

1.简介 MySQL的隔离性是由锁机制来保证的。锁是计算机协调多个进程或线程并发地访问某一资源你的机制。当多线程并发地访问某个数据时,尤其是在涉及金钱等安全敏感性数据的时候,需要保证数据在任意时刻最多只有一个线程可以对其进行修改,从而…

Android 分享小结

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、微信 分享 三、 QQ 、QQ空间(Qz…

MATLAB基础运算

矩阵和数字相乘 就是矩阵里面每个元素跟这个数字乘一遍,无论是点乘还是叉乘,对于这个都一样。 >> Aones(3) A 1 1 11 1 11 1 1 >> 10*A ans 10 10 1010 10 1010 10 10 矩阵和矩阵叉乘 能不能相…

C++普通函数与函数模板的调用规则

调用规则 如果函数模板和普通函数都可以实现,优先调用普通函数可以通过空模板参数列表来强制调用函数模板函数模板也可以重载如果函数模板可以产生更好的匹配,优先调用函数模板 总结:既然提供了函数模板,最好就不要提供普通函数…