bash中的变量种类:
-
本地变量:生效范围仅限当前shell进程,其子进程也无效。
-
环境变量:生效范围是当前shell进程及其子进程
-
局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
-
位置变量:$1,$2,$...,用户让脚本在脚本代码中调用命令行传给的参数。
-
例,新建一个b.sh文件,内写a=$1 b=$2 echo $a echo $b,然后不加参数执行,什么都不会输出。
-
这样,./b.sh x y 执行,会输出x和y,相当于把x赋给了a,把y赋给了b。
-
-
特殊变量:$?,$0等等(见下方位置变量)
位置变量
-
使用:$1,$2...分别对应传给脚本的第1,2...个参数。
-
注:如果位数大于一需要使用{}包起来,例${10},不然shell会把它当做$1处理。
-
shift命令:他可以去掉传给脚本的参数。
-
格式:shift n,n表示数字,n为几,就会去掉前几个参数,见代码:
-
b.sh:
echo $1 //输出第一个参数tom
shift 1 //去掉了第一个参数
echo $1 //此时her就成了第一个参数,所以会输出her
[root@VM1 scripts]# ./b.sh tom her
tom
her
-
$0:命令本身
-
$*:传递给脚本的所有参数,加了引号之后,它会把所有的参数当做一个字符串处理
-
$@:传递给脚本的所有参数,加了引号之后,它把每个参数都当做单个字符串。
-
$#:传递给脚本的所有参数的个数
-
还有$$(获取当前shell的进程号PID),$!(上一个命令的PID),$?(查看上一个命令的执行状态,0为成功,非0失败),$_(上个命令的最后一个参数)
变量的赋值、引用、销毁
-
变量赋值:
-
本地变量:
-
直接字符串赋值:name="user1"
-
变量引用:name="$变量名"
-
命令引用:name=`命令`(注:反引号)或name=$(命令),会将命令的执行结果赋给变量
-
-
环境变量:环境变量的定义即把定义好的本地变量导出为环境变量
-
export 变量
-
declare -x 变量
-
-
只读变量:
-
可以使用declare -r ,变量的格式将本地变量变成只读变量
-
只读变量不能被修改,不能被销毁,随当前shell进程的销毁而销毁。
-
-
-
变量引用:使用${name}的方式引用,一般情况{}可以省略,$后直接加变量名。
-
"":弱引用,其中的变量引用会被替换为变量值。
-
'':强引用,其中的变量引用不会被替换为变量值,而是保留原字符串。
-
变量引用时也可以不加引号,默认是弱引用
-
[root@VM1 scripts]# a="num"
[root@VM1 scripts]# b=$a
[root@VM1 scripts]# c='$a'
[root@VM1 scripts]# d="$a"
[root@VM1 scripts]# echo $b
num
[root@VM1 scripts]# echo $c
$a
[root@VM1 scripts]# echo $d
num
-
变量销毁:unset 变量名,使用set命令可以查看已定义的所有变量,使用export/env/printenv查看环境变量