Shell编程之条件语句

目录

一、条件判断的两种方式

1.1 test

1.2 中括号

1.3 文件测试操作符

二、整数值比较

 三、字符串比较

四、逻辑测试

五、三元运算符

六、if语句

6.1 案例1

 6.2 单分支案例2

 6.3 双分支案例3

 6.4 多分支案例4

 七、case语句

 7.1 案例case并行判断

 八、总结

8.1 定义一个变量的方法

8.2 浮点数的运算


一、条件判断的两种方式

1.1 test

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

test 命令期望在命令行中找到一个参数,当 shell 没有为变量赋值时,则将该变量视为空。这意味着在处理脚本时,一旦脚本寻找的参数不存在,则 test 将报告该错误。

test [操作符选项] 表达式

1.2 中括号

[ 操作符选项 表达式 ]

[ -f /opt/abc.txt ]

注意[]空格,否则会失败

测试是否成功使用返回值

boole

true(真)

false(假)

使用场景

返回码

0

非0

Linux系统 shell脚本

1

0

Java C

1.3 文件测试操作符

-e

测试指定的文件或者目录是否存在

-f

测试指定对象是否为文件;指定的文件是否存在

-d

测试指定的对象是否为目录;指定的目录是否存在

-r

测试指定用户是否有读权限

-w

测试当前用户是否有写权限

-x

测试当前用户是否有执行权限

-L

测试文件是否为符号链接(软链接文件)

二、整数值比较

操作符

-eq

等于

==

-gt

大于

\>

-lt

小于

\<

-ge

大于等于

-le

小于等于

-ne

不等于

!=

[ 整数变量1 操作符 整数变量2]

一般是字符表达式,很少用符号表达式,会有问题

 三、字符串比较

[ 字符窜1 = 字符窜2 ] 或者 [ 字符窜1 == 字符窜2 ] 判断是否相同

[ 字符窜1 != 字符窜2 ] 判断是否不相同

##################################

[ -z "字符串" ] -z:判断字符串是否为空;或者指定的变量是否为空值

[ -n “字符串” ] -n:检查是否有字符串存在

 

 注:如果测试的字符串是变量,我们一般加上双引号,防止产生歧义

四、逻辑测试

-a         &&         且   前后条件都要成立

-o         ||           或    只需前后条件中一个成立

[ 表达式1 ] && [ 表达式2 ]         等同于         [ 表达式1 -a 表达式2 ]   [[ 表达式1 && 表达式2 ]]

[ 表达式1 ] || [ 表达式2 ]            等同于         [ 表达式1 -o 表达式2 ]   [[ 表达式1 || 表达式2 ]]

五、三元运算符

#Java  c
条件表达式?a:b
当表达式为真时,取a值;当表达式为假时,取b值
#shell
[ 表达式 ] && a || b  等价于if双分支
[ 表达式 ] && a    等价于if单分支

类似if语句

六、if语句

#单分支
if[ 表达式 ];then
 ...
fi

#双分支
if [ 表达式 ];then
 ...
else
 ...
fi

6.1 案例1

[root@localhost/data/sh]# vim ping.sh

#!/bin/bash
#判断主机是否存活
#ping -c 3 -i 0.5 -w 2 $1 &> /dev/null && echo "$1 is online" || echo "$1 is offline"
#发三个包,每隔5秒,注释的为三元运算符方法
ping -c 3 -i 0.5 -w 2 $1 &> /dev/null
if [ $?-eq 0 ];then 
    echo "$1 is online"
else
    echo "$1 is offline"
fi

 6.2 单分支案例2

 磁盘空间已用大于80%报警

#!/bin/bash
#磁盘空间已用大于80%报警 
USED=$(df |grep /dev/mapper/centos-root | awk '{print $5}'|awk -F '%' '{print $1}')
#将取到的值赋给USED
if [ $USED -gt 40 ];then
#为了方便演示,改为40
        echo "警告!当前/目录的磁盘使用率超过为$USED%"
fi

 6.3 双分支案例3

[root@localhost/data/sh]# vim netstat.sh

#!/bin/bash

netstat -natp |grep :80 &> /dev/null
#查看端口
if [ $? -eq 0 ]
then
        echo "网站服务已在运行!"
else
        if rpm -q httpd &> /dev/null
        #查看软件是否安装
        then
                echo "正在启动httpd服务"
                systemctl start httpd
        else
                echo "正在安装并启动httpd服务"
                yum install -y httpd &> /dev/null && systemctl start httpd &> /dev/null
        fi
fi

 6.4 多分支案例4

#!/bin/bash
read -p "请输入你的考试分数:" grade

if [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
    echo "你的成绩为$grade"
    echo "你的成绩为优秀"

elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
    echo "你的成绩为$grade"
    echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
    echo "你的成绩为$grade"
    echo "你的成绩为合格" 
else
    echo "你的成绩为$grade"
    echo "你的成绩不合格"
fi

 七、case语句

if的多分支是逐条判断,相对而言效率会低一些,而case语句,不满足的条件直接跳过,相对执行效率快一些

 7.1 案例case并行判断

[root@localhost/data/sh]# vim case.sh

#!/bin/bash
#判断分数等级
read -p "请输入你的分数:(0-100)" num

case $num in

100)
        echo "恭喜你获得$num 分"
;;

[89][0-9])
#80-99
        echo "优秀!获得$num 分"
;;

[67][0-9])
#60-79
        echo "获得$num 分继续努力" 
;;

[0-9] | [1-5][0-9])
#0-59
        echo "继续努力!获得$num 分"
;;

*)
        echo "输入有误,请重新输入"
esac

 八、总结

8.1 定义一个变量的方法

1.read -p 执行时显示提示信息变量名

2.变量名=变量值

export +变量名 生成为全局变量

8.2 浮点数的运算

echo "浮点运算字符串” Ibc

awk 'BEGIN{print 浮点运算字符串}’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steve lu

感谢大佬的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值