SHELL脚本之条件测试
今天主要解答三个问题:
第一、在shell脚本中字符串的对比形式有哪些?
第二、在shell脚本中数字比较的形式有哪些?
第三、判断文档是否存在的符号有哪些?
以下是正文:
第一问:在shell脚本中字符串的对比形式有哪些?
答:字符串的对比有: == 、 != 、 -z 、 ! -z 、 && 、 || 、 ; 、 。
== 指的是字符串相等;
例如: [ $USER == root ] 注: 中括号两边必须要有空格;
用echo $? 可以判断出上述结果的输出是否正确,输出值为0则正确,非0则错误;
也可以运用&&、||逻辑操作来显示结果;
比如:[ $USER == root ] && echo 罗贵
译为:判断当前用户是不是ROOT,如果是ROOT,那么就执行 echo 命令输出 罗贵;
!= 指的是字符串不相等;
例如:[ "罗贵" != "笨蛋" ] 译为:罗贵不等于笨蛋;
验证:echo $? 输出值为0 ; 验证结果为,罗贵确实不等于笨蛋;
-z 指的是变量值是否为空之值,没有给变量赋值;
例如:a="hello" ; b=""
[ -z $ a ] && echo "空值" || echo " 非空值"
译为:当$a为空值这个条件成立时,则echo输出“空值”;如果$a不为空值时,则echo输出“非空值”;
! -z 或 (-n) 指的是变量不为空;
例如:[ ! -z $a ] && echo "非空值" || echo "空值"
译为:当$a这个变量为非空值这个条件成立,则echo输出“非空值”,如果$a这个变量为空值,则echo输出“空值”
一行执行多条命令的情况:
A && B 译为:当命令执行成功时,才执行B命令;
A || B 译为:当命令A执行不成功时,才执行B命令;
A ; B 译为:执行完A命令之后执行B命令,两者没有逻辑关系;
A && B || C 译为:当A命令执行成功后,再执行B命令,如果A和B命令执行都不成功,则执行C命令;
第二问:在shell脚本中数字比较的形式有哪些?
答:在shell脚本中数字比较的形式有:-eq 、 -ge 、 -gt 、 -ne 、 -le 、 -lt 。
-eq (Equal) 等于的意思;
例如: 请用数字比较 -eq 作为条件测试,比较后能够成功用echo输出hello world;
方法一:[ 10 -eq 10 ] && echo hello world
译为:判断,当10=10为正确时,则 echo 输出 hello world ;
方法二:[ 10 -eq 15 ] || echo hello world
译为:判断,当 10 = 15 为错误时,则 echo 输出 hello world ;
-ge (Greater or Equal) 大于或等于;
[ 10 -ge 8 ] && echo -ge 大于等于的意思;
译为:当10大于或等于8这个条件为正确时,则echo 输出 -ge 大于等于的意思;
[ 10 -ge 20 ] || echo -ge 大于等于的意思;
译为:当10大于等于20这个条件不正确时,则echo 输出 -ge 大于等于的意思;
-gt (Greater Than) 大于的意思;
[ 10 -gt 5 ] && echo -gt 大于的意思 ;
[ 10 -gt 10 ] || echo -gt 大于的意思;
-le (Lesser or Equal ) 小于或等于;
[ 10 -le 10 ] && echo -le 小于或等于的意思;
[ 10 -le 5 ] || echo -le 小于或等于的意思;
-lt (Lesser Than) 小于;
[ 10 -lt 8 ] && echo -lt 小于的意思;
[ 10 -lt 20 ] || echo -lt 小于的意思;
-ne ( Not Equal ) 不等于;
[ 10 -ne 15 ] && echo -ne 不等于的意思;
[ 10 -ne 10 ] || echo -ne 不等于的意思;
第三问:判断文档是否存在和是否有权限的符号有哪些?
答:判断文档是否存在的符号有:-e 、 -f 、 -d ;
判断该用户对该文档是否有权限的符号有: -r 、 -w 、 -x ;
-e 主要用于判断对象是否存在,不管时目录还是文本文件;
例如: [ -e haha ] && echo haha存在 || echo haha不存在
译为:当haha这个文档存在时,echo输出haha存在,否则echo输出haha不存在;
-f 主要用于判断文本文件是否存在;
[ -f haha ] && echo haha文件存在 || echo haha文件不存在
-d 主要用于判断目录是否存在;
[ -d haha ] && echo haha目录存在 || echo haha目录不存在;
-r 主要用于判断该用户对于该文档是否拥有读权限;
[ -r haha ] && echo 有读权限 || echo 无读权限
-w 主要用于判断该用户对于该文档是否拥有写权限;
[ -w haha ] && echo 有写权限 || echo 无写权限;
-x 主要用于判断该用户对于该文档是否拥有执行权限;
[ -x haha ] && echo 有执行权限 || echo 无执行权限;
文中用到的 && 和 || 这个两组符号的意思是:
$$ 指的是逻辑与
例如:ls a && ls b && ls c
译为:查看目录 a ,如果存在则查看目录 b ,如果目录 b 存在,则继续查看 目录 c ;如果目录 a 不存在,系统也不会继续执行查看目录 b 和 目录 c 的命令了 ;
&&逻辑与需要给定的条件都成立,整个测试结果才为真;
|| 指的是逻辑或
例如:ls a && ls b || ls c
译为:查看目录 a ,如果目录 a 存在,则继续查看目录 b ,如果查看a和b目录失败,则执行查看c目录的命令;
|| 逻辑或只要有一个条件成立,则整个测试结果就为真;
以上.......
(本篇完)
祝顺利!
罗贵于深圳
2019-03-06