局部变量
1、普通字符串变量
变量名=value
变量名='value' #单引号中不进行变量解析,原样输出,应用不多
变量名="value" #双引号会解析变量
例:
a1=123
a2='234'
a3="345"
echo "a1=$a1"
echo "a2=$a2"
echo "a3=${a3}" #${a3}和$a3等同
在AWK中,单双引号的作用相反
local i #在一个函数中声明一个局部变量
把命令作为变量
CMD=`ls`
CMD=$(ls)
echo $CMD #此时就会执行命令
用法:用命令作为变量进行打包 tar zcf $(uname -n).tar.gz /etc/services
H=$(uname -n)
tar zcf ${H}.tar.gz /etc/services #加{}的目的是为了确定变量名
Shell的特殊变量
$0 获取当前脚本的文件名
$n 获取第n个脚本参数,如果大于9,则用${n}
$# 脚本参数的个数
dirname $0 #取其路径
basename $0 #取其文件名
2、进程状态变量
$? 获取上一个指令的返回值,0为成功,非零失败
2表示权限拒绝
1~125表示脚本命令、系统命令错误或参数传递错误
126找到该命令但无法执行
127没有改命令
$$ 获取当前Shell的进程号(PID)
利用$?在程序当中做判断:
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/portmap
$* 将所有命令行所有参数视为一个整体字符串,等同于"$1$2$3"
$@ 将命令行每个参数视为单独的字符串,等同于"$1" "$2" "$3",这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。
编辑test.sh,内容如下
for i in $*; do echo $i; done; echo "----"
for i in $@; do echo $i; done; echo "----"
for i; do echo $i; done; echo "----"
for i in "$*"; do echo $i; done; echo "----"
for i in "$@"; do echo $i; done; echo "----"
执行命令bash test.sh "one two" three four
输出结果:
one
two
three
four
----
one
two
three
four
----
one two
three
four
----
one two three four
----
one two
three
four
----
3、bash内部变量
Shell本身提供的常用命令:echo eval exec export readonly read shift wait exit 点(.)
echo 将变量名指定的变量显示到标准输出
shift 改变命令行参数的位置,即$2称为$1,$3成为$2,...,以此类推。并且$#减1
export 变量名=value 声明环境变量