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

[经验分享] bash脚本基础入门之条件测试

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-8 09:55:46 | 显示全部楼层 |阅读模式
  在运行bash命令的时候,无论成功还是失败都会返回为用户返回一个执行的结果,通常把他叫做退出状态码,每当我们运行命令的时候,退出状态码都会被记录在$?变量中,在命令行echo $?可以查看命令的执行结果,成功的值为0,失败的值为1-255之间的某个值。
wKioL1R8WMKBnOClAAE8H445D3Y971.jpg
    注:在shell脚本中,退出状态码记录的是脚本最后一条命令,为方便检查脚本错误,可以使用exit #自定义退出状态码。
    shell结构化命令中,如if...then语句、while...do...done语句等的CONDITION条件都是以命令的退出状态码,作为下一条命令是否执行的依据。它们无法测试跟命令的退出状态码无关的条件,例如我们要判断3是否大于5,是没法直接用3>5作为测试条件输出正确结果的,因此我们就需要借助于其它条件测试工具。
wKiom1SCb2HT7t9DAAEOwkA1Dxs921.jpg
    bash/shell提供了几个好用的条件测试工具,可用于测试跟命令的退出状态码无关的条件,真为0,假为非0值。(注:与C语言中的条件真假不同,切记!)

    条件测试工具有:test EXPRESSION 、[ EXPRESSION ]或[[ EXPRESSION ]](注:EXPRESSION两边都要有空格,否则shell视为语法错误)、命令COMMAND(COMMAND不能放在[]中,在[]内的命令要使用``引用)。
    test、[]、[[]]可以用于比较(测试)三类条件:整数比较、字符串比较、文件比较。不同的测试条件,运算符尽不不相同

    整数比较运算符:

wKiom1R8XRKzsL1zAAGGHGPqui8288.jpg
wKioL1SCcoDxRJhpAADiEP-8dxU155.jpg
wKioL1R8XpSy9FldAAQR5msyl2I795.jpg
wKiom1R8XnSi-GUHAAOiRk-EPXQ508.jpg
    字符串比较运算符:

wKioL1R8Xgyy9UNkAAFcXdPHnoc752.jpg
wKioL1R8X0TwrdVIAAMtOI-1gqM608.jpg
wKiom1R8YAbgdwU7AAK6DqsblYc642.jpg
    文件测试运算符:

wKioL1SCeSOzI-qYAATYPZwH7pY899.jpg
wKioL1SCe3myazFuAAOeLwLvn_8851.jpg
wKiom1SCev6ChpHVAAO0D6_uiTs564.jpg
    逻辑操作运算符:

wKioL1SCfbCQUyTMAAFLLE9o0w0817.jpg
wKioL1SCfpewWDfXAAOdsJRYP7g407.jpg
wKiom1SCfhLBSH3VAAlbyeF57no407.jpg
wKiom1SCfqqRg_-6AAbXUc4zBjM971.jpg
    在shell的结构化命令中,如果CONDITION条件是命令时,要先理清是要用命令的运行结果作为测试条件还是命令的退出状态码作为测试条件。若使用命令运行的结果作为测试条件(实际上,这种情况经常被使用),那么应要使用命令引用,然后在用比较操作符。   
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
# 传递一个参数给脚本,此参数为用户名;
# 如果用户存在,则执行如下任务
# 如果用户的id号小于500,显示其为管理员或系统用户;
# 否则,显示其为普通用户;
if id $1 &> /dev/null; then
#要使用id -u的运行结果跟500做比较,因此先命令引用再比较操作符
        if [ "`id -u $1`" -lt 500 ]; then
                echo "$1为管理员或系统用户"
        else
                echo "$1为普通用户"
        fi



wKiom1SCrfXw-X5vAAC1mKWYycs070.jpg
    如果要使用命令的退出状态码作为测试条件,则要先运行命令再使用命令状态码,有两种表现形式:一种是

1
2
3
  if CMD; then
      ...
  fi



另一种是
1
2
3
4
CMD
if [ $? -eq 0 ]; then
    ...
fi




wKiom1SCsNOjKZcVAAMugzrXiF8742.jpg
    shell中允许用户使用&&、||、!组合测试条件,进行条件测试。这三个操作符既可以用于连接[]与[],也可以用于连接命令,相当于结构化命令的使用

1
2
3
4
5
6
7
8
#!/bin/bash
#用ping命令测试172.16.100.X内的所有主机
#将在线的主机输出出来
for i in {1..255}
do
        ping -c1 -w1 172.16.100.$i &> /dev/null
        [[ $? -eq 0 ]] && echo "172.16.100.$i 在线"
done






运维网声明 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-37556-1-1.html 上篇帖子: Linux bash综合实例之 bash脚本编辑器 下篇帖子: bash编程基础及for循环
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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