标签:shell
一、shell特殊变量
1.位置变量
位置变量 | 含义 |
---|---|
$0 | 获取当前执行的shell脚本的文件名,包括脚本路径 |
$n | 获取当前执行的shell脚本的第n个参数,n=1..9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来${10} |
$* | 获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于“$1$2$3”,注意与$#的区别:参数1 参数2 参数3 |
$# | 获取当前shell命令行中参数的总个数 |
$@ | 这个程序的所有参数“$1” “$2” “$3” “...” ,这是将参数传递给其他程序的最佳方式,因为它会保留内嵌在每个参数里的任何空白。 |
2.进程状态变量
进程状态变量 | 含义 |
---|---|
$$ | 获取当前shell的进程号(PID):如1534 |
$! | 获取执行上一个指令的PID |
$? | 获取执行的上一个指令的返回值 |
$_ | 在此之前执行的命令或脚本的最后一个参数 |
二、举例说明
1.位置变量
$0 获取当前执行的shell脚本的文件名,包括脚本路径
[root@localhost ~]# cat 0.sh echo $0 [root@localhost ~]# sh 0.sh 0.sh [root@localhost ~]# sh /root/0.sh /root/0.sh
$n
[root@localhost ~]# cat n.sh echo $1 [root@localhost ~]# sh n.sh lele lele [root@localhost ~]# sh n.sh lele baobao lele [root@localhost ~]# sh n.sh "lele baobao" lele baobao [root@localhost ~]# seq 15 | sed ‘s#^#$#g‘|tr "\n" " " > n1.sh [root@localhost ~]#vim n1.shecho echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 [root@localhost ~]# sh n1.sh {a..z} a b c d e f g h i a0 a1 a2 a3 a4 a5 #如果n大于9,用大括号括起来${10} [root@localhost ~]# cat n1.sh echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} [root@localhost ~]# sh n1.sh {a..z} a b c d e f g h i j k l m n o
$*和$#
[root@localhost ~]# set -- "I am a" good teacher #--会结束选项部分,自"I am"开启的新参数 [root@localhost ~]# echo $* I am a good teacher [root@localhost ~]# echo $# 3
$*和$@
[root@localhost ~]#set -- "I am a" good teacher [root@localhost ~]# for i in "$*" ; do echo $i ;done #在有双引号情况,参数里引号内容当做一个参数输出 I am a good teacher [root@localhost ~]# for i in "$@" ; do echo $i ;done #在有双引号的情况,每个参数独立输出I am a good teacher 如果$* 和$@不带引号 [root@localhost ~]# for i in $* ; do echo $i ;done I am a good teacher [root@localhost ~]# for i in $@ ; do echo $i ; done I am a good teacher
$* 将所有的命令行所有参数视为单个字符串,等同于“$1$2$3”
$@ 将命令行每个参数视为单独的字符串,等同于“$1”“$2”“$3”,这是将参数传递给其他程序的最佳方式,因为它会保留所有内嵌在每个参数里的任何空白。
注意:上述区别仅在于加双引号的时候,即“$*”“$@”
2.进程变量
讲解最常用的进程变量$?
$? 获取执行的上一个指令的返回值
值 | 含义 |
---|---|
0 | 命令运行成功 |
2 | 权限拒绝 |
1-125 | 命令运行失败,特定的退出含义,是由各个单独的命令定义的 |
126 | 命令找到了,但文件无法执行 |
127 | 命令找不到 |
>128 | 命令被系统强制结束 |
[root@localhost ~]# ll /dev/null crw-rw-rw- 1 root root 1, 3 Jun 9 17:37 /dev/null [root@localhost ~]# echo $? 0 [root@localhost ~]# ll foo ls: cannot access foo: No such file or directory [root@localhost ~]# echo $?2
标签:shell
原文地址:http://nanchunle.blog.51cto.com/9244770/1839250