设为首页 收藏本站
查看: 956|回复: 0

shell脚本编程:bash shell中的条件判断

[复制链接]

尚未签到

发表于 2018-8-28 13:42:32 | 显示全部楼层 |阅读模式
  shell的条件判断主要分为三大部分的内容:

  •   条件测试类型
  •   条件测试表达式
  •   语句之间的逻辑关系
  条件测试表达式
  1、表达式的写法:
  [ expression ]
  ` expression `
  test expression
  2、条件测试表达式的注意事项:
  [ expression ] expression 和中括号之间是有空格,如果没有空格将会报错。
  [ expression ] ` expression ` 作用相同,但是含义不同。
  test expression 其中test是shell提供的一个命令。其返回结构是expression的逻辑结果
  3、何时需要使用 [ expression ]
  当bash shell的脚本中出现 类似-gt,-lt这样的整数测试符或者 -e $FILE 这样的文件测试符的时间才可以使用[],
  if [ grep 'root' /etc/passwd ] 这样是错误的。
  if 可以直接使用 grep 'root' /etc/passed的命令结果的。
  [root@bogon sh]# cat if.sh
  #!/bin/bash
  if grep 'root' /etc/passwd &> /dev/null ;then
  echo "there is root "
  else
  echo "there is no root"
  fi
  [root@bogon sh]# ./if.sh
  there is root
  从命令的执行结果可以知道:if 可以取得grep命令的执行结果。相当与执行来grep命令后的$?的值。此处,我们也需要仔细理解何时需要使用 &>/dev/null 如果我们需要命令执行的返回值,那么不许要使用 &>/dev/null ,如果我们需要命令执行结果,也就是说相当与命令执行完成后的$?值,那么,就需要使用&>/dev/null.
  条件测试类型:对shell而言,常用的条件测试类型有三种:整数测试;字符串测试;文件测试
  整数测试:
测试符用法举例含义-gt[ $A -gt $B ]gt:great then 如果$A大于$B 结果为真,否则结果为假。-lt[ $A -lt $B ]lt:less then 如果$A小于$B结果为真,否则为假-eq[ $A -eq $B ]eq:equal 如果$A 等于$B 结果为真,否则结果为假-ge[ $A -ge $B ]如果$A大于等于$B结果为真,否则结果为假-le [ $A -le $B ]如果$A小于$B结果为真,否则结果为假-ne[ $A -ne $B ]如果$A不等于$B 结果为真,否则结果为假  其中整数测试需要注意的事项有:

  •   整数测试的运算符都是双目运算符
  •   测试符的两侧数据只能是整数。浮点数是不可以的。
  •   测试数与中括号是有空格符的。
  字符串测试:可以分别用操作符 =、 !=、< 和 > 比较字符串是否相等、不相等或者第一个字符串的排序在第二个字符串的前面或后面。单目操作符 -z 测试 null 字符串,如果字符串非空 -n 返回 True(或者根本没有操作符)。
  = :[  'abc' = 'dcf' ] # 判断=两侧的字符串是否一样 #注意区分下面的例子。
  [root@localhost sh]# [ 'abc' = 'dcf' ];echo $?
  1
  [root@localhost sh]# [ 'abc'='dcf' ];echo $?
  0
  !=  [ 'abc' != 'dcf' ] #判断两个字符串是否不等,不等为真,否则未见
  [root@localhost sh]# [ 'abc' != 'dcf' ];echo $?
  0
   同理,判断前面的字符串排序是否在后面字符串的前面
  字符串测试单目操作符: -z ,-n
  [root@bogon testdir]# [ -n 'abc' ];echo $?
  0
  [root@bogon testdir]# [ -n '' ];echo $?
  1
  [ -n $STRING ] 如果$STRING 是空,则返回为真,否则返回为假。
  [root@bogon testdir]# [ -z 'abc' ]; echo $?
  1
  [root@bogon testdir]# [ -z ' ' ];echo $?
  1
  [root@bogon testdir]# [ -z  ];echo $?
  0
  [root@bogon testdir]# [ -z $STRING ] ;echo $?
  0
  [ -z $STRING ] 如果$STRING 为NULL,或者根本没有定义,返回为真,否则返回为假。
  小结:
  字符串测试符号,中有单目运算符 [ -n $STRING  ]  [ -z $STRING ] 也有双目运算符,= ;!=;
   需要注意的-z -n的区别,和需要使用转义字符\
  文件测试
测试符用法举例含义-f[  -f $FILE ]如果$FILE是普通文件,返回真,否则返回假-d[ -d $FILE  ]如果$FILE是目录,返回真,否则返回假-r[ -r $FILE ]如果$FILE 是可读的,返回真,否则返回假-w[ -w $FILE ]如果$FILE 是可写的,返回真,否则返回假-x[ -x $FILE ]如果$FILE 是可执行的,返回真,否则返回假-s[ -s $FILE ]如果$FILE是非空的,返回真,否则返回假-e[ -e $FILE ]如果$FILE 是存在的,返回真,否则返回假  注意:
  $FILE,需要路径,也就是脚本能找到的路径。
  语句间的逻辑关系:
  &&:逻辑与
  ||    ; 逻辑或
  command1 && command2;
  如果com1 返回值是假,那么com2不会执行
  如果com1 返回只是真,那么com2一定要执行,二者执行的结果决定com1 && com2的返回结果
  com1 || com2
  如果com1 执行结果为真,那么com2不会执行,
  如果com1执行结果为假,那么com2一定要执行,二者执行的结果决定com1 || com2的返回的结果
  以上就是短路逻辑的实例。
  条件测试是shell脚本的基础,涉及的内容包括,测试表达式的写法,条件测试的分类,各种测试符的使用。也包括语句之间的逻辑关系。需要特别理解短路逻辑的含义。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-557805-1-1.html 上篇帖子: 第 三 十 二 天:shell 编 程 之 分 发 系 统 (expect) 下篇帖子: shell三剑客之awk(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表