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

shell编程之条件测试

[复制链接]

尚未签到

发表于 2018-8-19 11:53:56 | 显示全部楼层 |阅读模式
  shell编程中,当使用if语句时,总是涉及到条件的判断。下面来讨论下条件判断的各种情况。
  1. 条件为语句
  例如:当目录下有sam开头的文件时,输出hi,it's here.
if ls sam* &> /dev/null; then  echo "Hi,it's here."
  
fi
  当条件为语句时,直接跟在if后面,如果语句执行成功,返回0,表示真,然后执行语句块中的语句。
  再来个例子,查看本机中是否有hive的用户,如果有,显示hive的uid和bash类型。
if grep "^hive" /etc/passwd; then  grep "^hive" /etc/passwd | cut -d: -f1,3,7
  
fi
  2. 条件为变量判断时
  即判断某个变量是否符合某个条件的时候,判断语句有下面三种类型
  [ expression ]
  ` expression `
  test expression
  根据变量类型,分为以下几种情况讨论:
  (1) 整数测试
  当变量为整数时,可以选择[ expression ]这种格式的语句。
  expression可以写成这样:数值1 比较符号 数值2($A 比较符号 $B)
  比较符号有下面这些:
  大于:-gt, 例如 $A -gt $B
  大于或等于:-ge
  等于:-eq
  小于:-lt
  小于或等于:-le
  不等于:-ne
  还是看例子吧
  例1;写一个脚本,生成两个随机数,比较其大小;显示大数;
  bash有个内置变量:$RANDOM
#!/bin/bash  
#
  
A=$RANDOM
  
B=$RANDOM
  
if [ $A -ge $B ]; then
  echo "Max number is $A."
  
else
  echo "Max number is $B."
  
fi
  例2:写一脚本,随机生成一个整数,判定,显示其奇偶性
#!/bin/bash  
#
  
A=$RANDOM
  
if [ $[$A%2] -eq 0 ]; then
  echo "$A: Even"
  
else
  echo "$A: Odd"
  
fi
  (2) 字符测试
  变量为字符时,进行字符测试。
  bash字符测试时,从左至右逐字符比较
  >: 大于
   /dev/null
  echo "Starting $SvcName successfully."
  fi
  
elif [ $1 == 'stop' ]; then
  if [ -e $LockFile ];then
  rm -f $LockFile &> /dev/null
  echo "Stopping $SvcName finished."
  else
  echo "$SvcName is stopped yet."
  fi
  
elif [ $1 == 'restart' ]; then
  rm -f $LockFile &> /dev/null
  touch $LockFile &> /dev/null
  echo "Restarting $SvcName successfully."
  
elif [ $1 == 'status' ]; then
  if [ -e $LockFile ]; then
  echo "$SvcName is running."
  else
  echo "$SvcName is stopped."
  fi
  
else
  echo "Usage: $SvcName {start|stop|restart|status}"
  exit 4
  
fi
  3. 条件判断中的组合符
  当判断的条件不只一个时,需要用到组合符
  -a 和,表示两端条件都要满足
  -o 并,表示两端条件只要满足一个就好
  ! 非,与后面的条件相反
  例1: 输入一个数字,若大于1并且小于100,输出"available",否则输出"invalid input"
#!/bin/bash  
read -p "please input a number: " num
  
if [ $num -gt 1 -a $num -lt 100 ];then
  echo "available"
  
else
  echo "invalid input"
  
fi
  4. 短路运算符
  短路操作:只要前半段已经可以决定最终结果,后半段就不再运算;
  与运算:
  假 && {真|假} = 假
  或运算:
  真 || (真,假) = 真
  例1:判断目录/tmp/test是否存在,不存在的话,就新建该目录,存在的话,就输出"derictory exists"
[ -d /tmp/test ] || mkdir /tmp/test && echo "directory exists"


运维网声明 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-553831-1-1.html 上篇帖子: java调用shell脚本且传递参数 下篇帖子: 【小项目】:使用shell编写一个简单的告警系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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