目录
1、参数含义
1.1、特殊变量
| 变量 | 含义 |
| $0 | 获取当前shell脚本的名字 |
| $1 | 传递给该shell脚本或函数的第一个参数 |
| $2 | 传递给该shell脚本或函数的第二个参数 |
| $* | 传递给脚本或函数的所有参数 |
| $@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同 |
| $# | 获取传递给脚本或函数的参数个数 |
| $_ | 获取在此之前执行的命令或脚本的最后一个参数 |
| $? | 获取上个命令的退出状态、或函数的返回值(0成功,非0为失败) |
| $$ | 获取当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID |
| $! | 获取上一个在后台工作的进程的进程号(PID) |
1.2、说明:
1.2.1、$?:多判断预设命令是否完成
例如:
if [ $? -ne 0 ]
then
#脚本不正常退出
exit 1
fi

1.2.2、$*和$@的区别
相同点:
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1 $2 … $n 的形式输出所有参数。
不同点:
- 当它们被双引号" "包含时:
- "$*" 会将所有的参数作为一个整体, 以"$1 $2 … $n"的形式输出所有参数;
- "$@" 会将各个参数分开, 以"$1" "$2" … "$n" 的形式输出所有参数;
- 可理解:
- "$*" 将命令行所有参数视为单个字符串,等同于"$1$2$3"
- "$@" 将命令行每个参数视为单独的字符串,相当于"$1""$2""$3"。这种方式会保留所有内嵌在参数的任何白,都能传递给其它程序。
set -- "who are " your me #set命令传入参数
1.)$*不加引号
[root@compute1 ~]# for i in $*;do echo $i;done
who
are
your
me
2.)“$*”$*加引号
[root@compute1 ~]# for i in "$*";do echo $i;done
who are your me
3.)$@不加引号
[root@compute1 ~]# for i in $@;do echo $i;done
who
are
your
me
4.)"$@" $@加引号
[root@compute1 ~]# for i in "$@";do echo $i;done
who are
your
me
1.3、整型比较
运算符解释:
精确比较:
-eq 等于 equal
-gt 大于
-lt 小于
模糊比较:
-ge 大于或等于
-le 小于或等于
-ne 不等于
if [ $? -eq 0 ]代表如果上一条命令结束状态是0的话就执行then后面的语句。
if [ -f ${filename} ] -e 存在,-d 文件夹,-f 文件,-s 非空

本文详细介绍了Shell脚本中的特殊变量,如$0、$1-$9、$*、$@、$#、$?、$$和$!的含义和用法,特别是$*与$@的区别。此外,还讲解了整型比较的运算符,如-eq、-gt、-lt等,并给出了判断命令执行状态的示例。通过实例展示了如何在脚本中使用这些变量和比较操作进行条件判断。
867

被折叠的 条评论
为什么被折叠?



