目录
1、变量定义
1.1、本地变量
新建一个打印输出的简单脚本test02.sh
#!/bin/bash
myName=zhangsan
echo "myName的值为:"$myName
可见只能在脚本中执行才能获取变量值
[root@localhost shell]# bash test02.sh
myName的值为:zhangsan
[root@localhost shell]# echo $myName
[root@localhost shell]#
1.2、环境变量
在test02.sh
定义一个打印变量yourName
,但是不在脚本中赋值
#!/bin/bash
myName=zhangsan
echo "myName的值为:"$myName
echo "yourName的值为:"$yourName
在外部使用export yourName=lisi
进行赋值,再执行bash test02.sh
,可见yourName
获取到了环境变量的值
[root@localhost shell]# export yourName=lisi
[root@localhost shell]# bash test02.sh
myName的值为:zhangsan
yourName的值为:lisi
1.3、局部变量
在test02.sh
定义一个函数,则内部变量为局部变量
myfunc(){
myvar=99
echo $myvar
}
echo $myvar #访问不到
1.4、位置变量
在test02.sh
定义两个参数输出
echo "参数1:"$1
echo "参数2:"$2
执行bash test02.sh wangwu zhaoliu
,表示执行脚本同时传入两个参数,分别对应$1
和$2
,然后会顺序打印输出
[root@localhost shell]# bash test02.sh wangwu zhaoliu
参数1:wangwu
参数2:zhaoliu
2、特殊变量
2.1、$#(位置参数个数)
在test03.sh
中执行echo $#
#!/bin/bash
echo $#
执行脚本式传入3个参数,则会被脚本中的$#
获取参数个数
[root@localhost shell]# bash test03.sh a b c
3
2.2、$*(参数列表)
双引号引用为一个字符串,如"a b c d e",所有的参数作为一个字符串,5 个参数作为一个字符串
2.3、$@(参数列表)
双引号引用为单独的字符串, 如"a" “b” “c” “d” “e”,所有的参数作为单个的字符串,5 个参数作为五个字符串
2.4、$$(当前 shell 的 PID)
$BASHPID
为当前pid的真实值
[root@localhost shell]# echo 'a' | echo $$
1822
[root@localhost shell]# echo 'a' | echo $BASHPID
2338
[root@localhost shell]# ps aux | grep bash
root 1822 0.0 0.6 26748 5196 pts/0 Ss 12:19 0:00 -bash
root 2340 0.0 0.1 12320 1040 pts/0 R+ 15:38 0:00 grep --color=auto bash
2.5、$?(上一个命令的退出状态)
用来判断脚本中某个命令是否成功执行了
0
表示上个命令正常执行
[root@localhost shell]# ls
1.txt test01.sh test02.sh test03.sh tmp
[root@localhost shell]# echo $?
0
非0
表示上个命令非正常执行
[root@localhost shell]# ls /aabbcc
ls: 无法访问'/aabbcc': 没有那个文件或目录
[root@localhost shell]# echo $?
2
3、数组
3.1、定义
定义一个包含3个元素的数组name
[root@localhost shell]# name=('zhangsan' 'lisi' 'wangwu')
3.2、引用
引用输出所有元素值,@
表示取所有值
[root@localhost shell]# echo ${name[@]}
zhangsan lisi wangwu
根据下标输出元素值,[数字]
表示下标,从0开始计算
[root@localhost shell]# echo ${name[1]} ${name[0]} ${name[2]}
lisi zhangsan wangwu