shell的变量¶
Linux 系统中 shell 变量的使用
简介¶
变量是 shell 中用来存储数据的一种特殊标识符。变量可以用来保存用户输入的值,也可以用来保存计算结果。
变量分类¶
shell 中的变量可以分为以下几类:
- 用户自定义变量:由用户自己定义、修改、使用。
- 环境变量:由系统维护,用于存储有关系统和用户的信息。
- 位置参数变量:通过命令行给程序传递执行参数。
- 内部参数变量:是 bash 预定义的特殊变量,用户不能修改。
变量赋值¶
变量赋值的格式如下:
例如:
变量命名¶
变量名的命名规则如下:
- 变量名只能由字母、数字、下划线组成。
- 变量名不能以数字开头。
- 变量名不能是关键字和特殊字符。
变量引用¶
变量引用的格式如下:
例如:
输出:
变量清除¶
变量清除的格式如下:
例如:
变量只读¶
变量设置为只读的格式如下:
例如:
内部参数变量¶
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、\)1、2、...、#、@、*、\(、?、\)!、$_ |
常见环境变量 | PWD、PATH、USER、LOGNAME、SHELL、HOME |
应用 | 保存用户输入的值、保存计算结果、传递参数给命令或脚本、控制命令或脚本的执行 |
退出返回状态 | 保存在变量 ? 中 |
通常,0 表示成功,非零值表示出现了错误。例如:
shell 命令的退出状态(返回值)保存在变量 ?
中。
- 0 表示成功
- 1 表示通用错误或执行失败
- 126 表示命令或脚本没权限
- 127 表示命令没找到
示例
[root@localhost]# echo $$ #显示当前进程的pid
2163
[root@localhost]# echo $? #显示上一条命令的返回值
0
[root@localhost ]# bash #调用子shell
[root@localhost]# echo $$
4539
[root@localhost]# exit 1 #指定返回值并返回父shell
exit
[root@localhost]# echo $?
1
[root@localhost]# display #执行不存在的命令
-bash: display: 未找到命令
[root@localhost]# echo $? #查看返回值
127
[root@localhost]# touch test.sh
[root@localhost]# ./test.sh #执行不具权限的命令
-bash: ./test.sh: 权限不够
[root@localhost]# echo $? #查看返回值
126
结论:退出返回状态可以用于判断命令的执行结果。
环境变量¶
环境变量是保存在系统内存中的数据,可以被所有程序访问。环境变量可以用于存储各种信息,例如当前工作目录、可执行程序的搜索路径、用户的名称等。
常见环境变量
变量名 | 含义 |
---|---|
PWD | 保存当前工作目录。 |
PATH | 保存可执行程序的搜索路径。 |
USER | 保存当前用户的名称。 |
LOGNAME | 保存当前用户的登录名。 |
SHELL | 保存当前 shell 的类型。 |
HOME | 保存当前用户的主目录。 |
使用
环境变量可以通过 echo
命令来查看:
Bash
输出:
环境变量也可以在命令行中使用,例如:
Bash
这条命令将切换到当前用户的主目录。
补充
除了上述常见环境变量之外,还有一些其他的环境变量,例如:
变量名 | 含义 |
---|---|
HISTSIZE | 保存历史命令的数量。 |
HISTFILESIZE | 保存历史命令的文件大小。 |
LANG | 保存系统语言环境。 |
LC_ALL | 保存系统的区域设置。 |
TERM | 保存终端类型。 |
EDITOR | 保存默认编辑器。 |
这些环境变量可以用于控制 shell 的行为或提供给程序使用。
数组¶
shell 中的数组是一种特殊的变量,可以保存多个值。数组的元素可以是任何数据类型,包括字符串、数字、布尔值等。
数组的定义格式如下:
1、例如,定义一个名为 numbers
的数组,其中包含 1、2、3 三个元素:
数组的元素可以通过索引来访问。索引从 0 开始,例如:
输出:
读取全部元素:
输出
也可以使用 for
循环来遍历数组:
输出:
实验示例
# 定义一个名为 `fruits` 的数组,其中包含 "apple"、"banana"、"orange" 三个元素
fruits=(apple banana orange)
# 遍历数组
for fruit in "${fruits[@]}"
do
echo "$fruit"
done
# 获取数组的长度
echo ${#fruits[@]}
输出:
shell 数组可以用于存储多个值,可以用于各种场景。掌握 shell 数组的使用方法,可以帮助我们更好地使用 shell。