shell 条件判断 if [ $? -eq 0 ]

shell 条件判断 if [ $? -eq 0 ]

[ ] 等价于 test命令

$0:   shell或shell脚本的名字
$*:   以一对双引号给出参数列表
$@:   将各个参数分别加双引号返回
$#:       参数的个数
$_:  代表上一个命令的最后一个参数
$$:  代表所在命令的PID
$!:   代表最后执行的后台命令的PID
$?:  代表上一个命令执行后的退出状态

数字测试:

-eq:等于
-ne:不等于
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于

字符串比较

== 等于 两边要有空格
!= 不等
> 大于
< 小于

文件测试

-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-e FILE 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行
-z 是否为空 为空则为真
-a 是否不空

字符合集:

[:alnum:] 所有的字母和数字
[:alpha:] 所有字母  
[:digit:] 所有的数字 
[:lower:] 所有的小写字符 
[:upper:] 所有大写字母
[:blank:] 水平制表符,空白等 
[:cntrl:] 所有控制字符
[:graph:] 所有可打印字符,不包括空格 
[:print:] 所有可打印字符,包括空格 
[:punct:] 所有的标点字符 
[:space:] 所有的横向或纵向的空白 
\\ 反斜杠 (第一个\转义)
\t Ctrl-I tab键
\n Ctrl-J 新行 
\a Ctrl-G 铃声 
\b Ctrl-H 退格符 
\f Ctrl-L 走行换页 
\r Ctrl-M 回车 
\v Ctrl-X 水平制表符

与或非

-a 与 &&
-o 或 ||
! 非  !

几个常用例子:

#用户是否存在,判断执行结果
#[]书写效果如下:
read -p "请输入用户名:" USER
id $USER &> /dev/null
if [ $? -eq 0 ];
then
echo "$USER 已存在"
else
echo "$USER 不存在"
fi
#test书写效果如下:
read -p "请输入用户名:" USER
id $USER &> /dev/null
if test $? -eq 0 ;
then
echo "$USER 已存在"
else
echo "$USER 不存在"
fi
#判断输入值,当为整数时退出
#利用 -z(或-n) 进行判断,空值为假,非空位置(取反,非空为真,空位假)
while true
do
read -p "请输入值:" NUM
test=`echo $NUM |sed 's/[0-9]//g'`
if [ -z "$test" ];then
echo "当前整数值:$NUM"
break
else
echo "当前非整数,请重新输入"
fi
done

为了书写格式化shell,一般都使用[]来代替test,不过偶尔只是一句话的判断,用test还是比较方便的。

如下,判断文件是否存:

#判断test.sh文件是否存,存在就cat
if test -f /opt/shell/test.sh;then
cat /opt/shell/test.sh
fi
good good study, day day up!

发表评论

textsms
account_circle
email

shell 条件判断 if [ $? -eq 0 ]
[ ] 等价于 test命令 $0:   shell或shell脚本的名字$*:   以一对双引号给出参数列表$@:   将各个参数分别加双引号返回$#:       参数的个数…
扫描二维码继续阅读
2021-03-11