作者:Gakki
问题描述
if [ $? -eq 0 ];then是什么意思?
- 在 shell 脚本中,表示 $? 代表上一个命令执行后的退出状态;
-
-eq
:表示等于;
- 语句
if [ $? -eq 0 ]
表示 shell 传递到脚本的参数等于0,则执行 then 中的语句。
Linux的命令执行退出状态
- 在 Linux 系统中,每当命令执行完成后,系统都会返回一个退出状态。退出状态用于检查命令执行的结果(成功/失败),退出状态是一个数字。
- 若退出状态值为 0,表示命令运行成功;而退出状态值不为 0 时,则表示命令运行失败。最后一次执行的命令的退出状态值被保存在内置变量
$?
中,所以可以通过 echo
语句进行测试命令是否运行成功。
- POSIX 规定了以下几种退出状态和退出状态的含义。
状态值 |
含义 |
0 |
表示运行成功,程序执行未遇到任何问题 |
1-125 |
表示运行失败,脚本命令、系统命令错误或参数传递错误 |
126 |
找到了该命令但无法执行 |
127 |
未找到要运行的命令 |
>128 |
命令被系统强行结束 |
- 举例说明:
- 如我们输入:
cd /root
,然后再输入:echo $?
,结果为0,表示最后一次执行的命令运行成功。
- 我们切换到一个不存在的目录:
cd test
,提示文件/目录不存在。输入:echo $?
看看状态如何,结果为1,表示最后一次执行的命令运行失败。
- 输入命令:
yahah
,提示命令不存在。输入:echo $?
看看状态如何,结果为127,表示未找到要运行的命令。
Linux的命令执行退出状态
其他
$0:shell或shell脚本的名字
$*:以一对双引号给出参数列表
$@:将各个参数分别加双引号返回
$#:参数的个数
$_:代表上一个命令的最后一个参数
$$:代表所在命令的PID
$!:代表最后执行的后台命令的PID
$?:代表上一个命令执行后的退出状态
shell 比较
数值比较
-eq:表示等于,如:if [ $var1 -eq 100 ]
-ne:表示不等于,如:if [ $var1 -ne 100 ]
-gt:表示大于,如:if [ $var1 -gt 100 ]
-ge:表示大于等于,如:if [ $var1 -ge 100 ]
-lt:表示小于,如:if [ $var1 -lt 100 ]
-le:表示小于等于,如:if [ $var1 -le 100 ]
字符串比较(也可用于数值比较)
==:表示相等,如:if [ $var1 == $var2 ]
!=:表示不相等,如: if [ $var1 != $var2 ]
=~:表示前边变量包含后边变量则为真,如:if [[ $var1 =~ $var2 ]]
注:本质上=~是正则匹配单层中括号不支持正则需要双层中括号
字符串测试运算
-z 字符串:表示字符串的长度为零,如:if [ -z $var1 ]
-n 字符串:表示字符串的长度不为零,如:if [ -n $var1 ]
文件测试运算
-e 文件名:表示如果文件存在则为真,如:if [ -e $var1 ]
-r 文件名:表示如果文件存在且可读则为真,如:if [ -r $var1 ]
-w 文件名:表示如果文件存在且可写则为真,如:if [ -z $var1 ]
-x 文件名:表示如果文件存在且可执行则为真,如:if [ -x $var1 ]
-s 文件名:表示如果文件存在且至少有一个字符则为真,如:if [ -s $var1 ]
-d 文件名:表示如果文件存在且为目录则为真,如:if [ -d $var1 ]
-f 文件名:表示如果文件存在且为普通文件则为真,如:if [ -f $var1 ]
-c 文件名:表示如果文件存在且为字符型特殊文件则为真,如:if [ -c $var1 ]
-b 文件名:表示如果文件存在且为块特殊文件则为真,如:if [ -b $var1 ]
逻辑运算(与/或/非)
-a或者&&:与运算,如:if [ $var1 == '' -a $var2 != '' ] 或 if [ $var1 == '' ] && [ $var2 != '' ]
-o或者||:或运算,如:if [ $var1 == '' -o $var2 != '' ]或if [ $var1 == '' ] || [ $var2 != '' ]
!:非运算,如:if ! [ $var1 == '' ]或if [ ! $var1 == '' ]
网友评论