shell 条件语句

目录

1. 条件测试

1.1 文件测试

1.2 整数值比较

1.3 字符串比较

1.4 逻辑测试

2 if语句

2.1 if单分支语句

2.2 if双分支语句

2.3 if多分支语句

3. case分支语句


1. 条件测试

shell环境根据命令执行后的返回状态值($?) 来判断是否执行成功,当返回值为0 (真true)时表示成功,返回值为非0值(假false)时表示失败或异常。

test 条件表达式

test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为0表示条件成立)

[ 条件表达式 ] #方括号“["或"]”与条件表达式之间需要至少一个空格进行分隔

1.1 文件测试

格式:[ 操作符 文件或目录]

  • 常用的操作符
操作符说明
e测试目录或文件是否存在(Exist)
d测试是否为目录(Directory)
f测试是否为文件(File)
r测试当前用户是否有权限读取(Read)
w测试当前用户是否有权限写入(Write)
x测试是否设置有可执行(Excute) 权限
L测试是否为符号链接

1.2 整数值比较

格式: [整数变量1 操作符 整数变量2]

  • 常用的操作符
操作符说明符号
eq等于==
ne不等于!=
gt大于>
lt小于<
le小于等于<=
ge大于等于>=

1.3 字符串比较

  • 格式

[字符串1 = 字符串2 ] 或 [字符串1 == 字符串2]

[字符串1 != 字符串2]

[ -z "字符串"] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串

[ -n "字符串”] #检查是否有字符串存在

请注意:引号的使用,这是防止空格扰乱代码的好方法

1.4 逻辑测试

  • 格式

[表达式1] 操作符 [表达式2]

命令1 操作符 命令2

  • 常用的操作符
    • a或&&:逻辑与,“而且”的意思,前后条件需都成立
    • o或|| :逻辑或,“或者"的意思,只需前后条件中一个成立
    • ! :逻辑否

2 if语句

  1. if语句使用fi结尾,和一般语言使用大括号结尾不同。
  2. [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格。
  3. then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要用“;”了。

2.1 if单分支语句

先判断“表达式”的值,如果值为真(非零),则执行“语句”;如果值为假(零),则不执行语句。

  • 脚本示例

启动httpd服务

#!/bin/bash
#80端口是否在监听
netstat -nltp | grep :80 &> /dev/null  //监听80端口,运行结果放到/dev/null文件
if [ $? -eq 0 ];then  //是否监听到,监听到返回0,没有监听到返回非0值
        echo "httpd网站服务已在运行"  
else
        echo "httpd网站服务未运行,正在启动httpd服务....."

        rpm -q httpd &> /dev/null  //查询是否安装httpd服务
        if [ $? -ne 0 ];then
                df | /mnt &> /dev/null  //看是否挂载
                if [ $? -ne 0 ];then  // 不能0时,执行挂载
                        mount /dev/sr0 /mnt &> /dev/null
                fi

                yum install -y httpd &> /dev/null
        fi

        systemctl start httpd

        if netstat -nltp | grep :80 &> /dev/null;then  //监听80端口,运行结果放到/dev/null文件
                echo "httpd网站服务启动成功! "
        else
                echo "httpd网站服务启动失败! !"
        fi
fi
复制代码

2.2 if双分支语句

双分支if语句是指由某个条件的两种取值(真或假)构成两个分支,任何时候都会执行其中一个分支,这便形成了“二选一”的结构

  • 脚本示例

判断是否是整数

#!/bin/bash

read -p "请输入一个整数:" num

expr $num + 0 &> /dev/null
if [ $? -eq 0 ];then
        echo "是整数"
else
        echo "不是整数"
复制代码

2.3 if多分支语句

多分支语句就是利用多个条件来选择不同的语句执行得到不同的结果多选1的过程

  • 脚本示例

输入分数分出等级

#!/bin/bash
read -p "输入分数:" num  //输入提示信息
if [ $num -ge 85 ] && [ $num  -le 100 ];then 
        echo "优秀"
elif [ $num -ge 70 ] && [ $num -le 84 ];then
        echo "良好"
elif [ $num -ge 60 ] && [ $num -le 69 ];then
        echo "合格"
elif [ $num -ge 0 ] && [ $num -le 59 ];then
        echo "不合格"
else
        echo "请输入0-100的分数"
fi
复制代码

3. case分支语句

case的分支语句用在 如果里面匹配到固定值;或某个变量存在多中取值,需要对其中的每一个取值分别执行不同的命令序列。

  • 脚本示例

输入分数分出等级

#!/bin/bash
read -p "输入分数:" num

case $num in
8[5-9]|9[0-9]|100)
        echo "优秀"
        ;;

7[0-9]|8[0-4])
        echo "良好"
        ;;
6[0-9])
        echo "合格"
        ;;
[0-9]|[0-5][0-9])
        echo "不合格"
        ;;
*)
        echo "请输入0-100的数"
esac        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值