全部博文(37)
分类: LINUX
2011-12-20 18:59:09
本地变量在用户现在的shell生命期的脚本中使用。
使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。
显示变量:
$ abc=123 $ echo $abc 123 $ def="111$abc" $ echo $def 111123 |
清除变量,使用unset 命令清除变量:
$ echo $abc 123 $ unset abc $ echo $abc
|
显示所有本地shell变量,使用set命令显示所有本地定义的shell变量:
$ abcdefg=123456 $ echo $abcdefg 123456 $ set | grep "abcdefg" abcdefg=123456 |
结合变量值,将变量并排可以使变量结合在一起:
$ ABC=abc $ DEF=def $ echo $ABC$DEF abcdef $ X="$ABC$DEF" $ echo $X abcdef $ Y=$ABC$DEF $ echo $Y abcdef |
测试变量是否已经设置:
$ G=alic $ echo "this is ${G:-kate}" this is alic $ unset G $ echo $G
$ echo "this is ${G:-kate}" this is kate $ echo $G
$ ${G:=kate} 程序“kate”尚未安装。 您可以使用以下命令安装: sudo apt-get install kate $ echo "${G:=kate}" kate $ echo $G kate $ |
测试变量是否取值,如果未设置,则返回一空串:
$ C=ccc $ echo $C ccc $ echo "${C:+123}" 123 $ echo $C ccc $ |
使用变量来保存系统命令参数:
$ touch src.txt $ ll 总用量 8 drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-20 17:29 ./ drwxrwxr-x 7 wuzhiguo wuzhiguo 4096 2011-12-12 11:07 ../ -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 17:29 src.txt $ SRC=src.txt $ DST=dst.txt $ cp $SRC $DST $ ll 总用量 8 drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-20 17:30 ./ drwxrwxr-x 7 wuzhiguo wuzhiguo 4096 2011-12-12 11:07 ../ -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 17:30 dst.txt -rw-rw-r-- 1 wuzhiguo wuzhiguo 0 2011-12-20 17:29 src.txt |
设置只读变量:
$ READONLY=12345 $ readonly READONLY $ echo $READONLY 12345 $ READONLY=AAA bash: READONLY: 只读变量 $ readonly ..... declare -r READONLY="12345" declare -ir UID="1000" |
1.1. 环境变量
环境变量用于所有用户进程,本地变量只用于现在的shell。
环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile文件中定义。
系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被初始化。
传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。
环境变量与本地变量设置方式相同。
设置环境变量:
$ abc=123 $ export abc $ def=456;export def $ export ggg=999 |
显示环境变量:
echo $ggg $ env | grep "ggg" 显示所有环境变量 ggg=999 |
清除环境变量:
unset ggg $ echo $ggg
|
嵌入shell变量:
shell有一些预留的环境变量名,这些变量名不能用作其他用途。通常在
/etc/profile中建立这些嵌入的环境变量,但也不完全是,这取决于用户自己。
常见的有:
HOME PATH SHELL |
其他环境变量:
还有一些预留的环境变量。其他系统或命令行应用将用到它们。以下是最常用的一些,
注意这些值均未有缺省设置,必须显示说明:
EDITOR PWD |
set命令:
使用set命令-a选项,即set -a指明所有变量直接被导出。不要在/etc/profile中使用这种方法,最好只在自己的.profile文件中使用。
set -a |
将变量导出到子进程:
在父脚本中使用export导出变量,子脚本中即可使用。
export abc |
1.2. 位置变量参数
如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。
参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。
参数从第一个开始,在第9个结束;每个访问参数前要加$符号。
第一个参数为0,表示预留保存实际脚本名字。
在脚本中使用位置参数:
cat my.sh #!/bin/sh echo "param 0:$0" echo "param 1:$1" echo "param 2:$2" echo "param 3:$3" echo "param 4:$4" echo "param 5:$5" echo "param 6:$6" echo "param 7:$7" echo "param 8:$8" echo "basename:`basename $0`" $ ./my.sh param 0:./my.sh param 1: param 2: param 3: param 4: param 5: param 6: param 7: param 8: basename:my.sh |
向系统命令传递参数:
find / -name $1 -print |
特定变量参数:
脚本运行时的一些相关控制信息,这就是特定变量的由来。
$# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$ cat my.sh #!/bin/sh echo "param 0:$0" echo "param 1:$1" echo "param 2:$2" echo "param 3:$3" echo "param 4:$4" echo "param 5:$5" echo "param 6:$6" echo "param 7:$7" echo "param 8:$8" echo "basename:`basename $0`" echo "param count:$#" echo "param list:$*" $ ./my.sh 1 2 3 param 0:./my.sh param 1:1 param 2:2 param 3:3 param 4: param 5: param 6: param 7: param 8: basename:my.sh param count:3 param list:1 2 3 |
最后的退出状态:
可以在任何命令或脚本中返回$?以获得返回信息。返回0意味着成功,1为出现错误。
$ ls dst.txt my.sh src.txt $ echo aaa aaa $ echo $? 0 $ cp aaa bbb cp: 无法获取"aaa" 的文件状态(stat): 没有那个文件或目录 $ echo $? 1 |