shell脚本之if语句

条件测试

条件测试:
设定一个条件,判断设定是否满足,执行一段特定代码,不满足,也可以执行不满足的代码
$?的返回码来判断条件为真还是为假(true或false)

条件测试的格式

格式一:
test表达式:

命令含义
-e判断文件(目录)是否存在
-d判断目录是否存在
-f判断文件是否存在
-r判断当前用户是否有读权限
-w判断当前用户是否有写权限
-x判断当前用户是否有执行权限

在这里插入图片描述

整数比较:

命令含义符号含义
-eq等于==比较字符和数字
-ne不等于!=比较数字和字符串
-gt大于>大于
-lt小于<小于
-ge大于等于>=大于等于
-le小于等于<=小于等于

仅限于整数比较

格式二:[ ] 、 [ [ ] ]bash自带的

中括号两边都要有空格

字符串只能比较是否一致,不能比较大小

逻辑测试

逻辑测试:且 或
且:表达式中的所有条件都必须成立才能使且
或:只要表达式中有一个条件成立即可
符号:
且:-a 、 &&
或:-o 、 ||
[[]]和[]:双中括号的功能更强大,适用于复杂的表达式,[]功能比较适用于简单的条件判断,[[]]可以避免歧义

if判断语句

单分支语句

换行写法:
if [条件判断]
then
运行代码
fi
单行写法:if [条件判断]; then 运行的代码; fi

练习

输入一个数字,如果比5大,就回显“ok”

#!/bin/bash
read -p "请输入一个数字:" a
if [ "$a" -gt 5 ]
then
 echo "ok"
 fi

多分支语句

双分支

if [条件判断]
then(条件满足)
代码
else(条件不满足)
代码
fi

/dev/null这是系统的一个黑洞文件,把不需要的信息丢入到这个当中

练习

输入一个数字,如果数字是偶数,则回显偶数,如果是奇数,则回显奇数

#!/bin/bash
read -p "请输入一个数字" a
if [ "$a"%2  -eq 0 ]
then
 echo "${a}是偶数"
else
 echo "${a}是奇数"
fi

多分支语句

if [条件判断]
then
代码
elif [条件]
then
代码
elif [条件]
then
代码
else
代码
fi

练习

输入一个考试成绩,85-100分优秀,60-84分一般,60分以下,抄30遍

#!/bin/bash
read -p "请输入一个考试成绩:" a
if [ $a -ge 85 -a $a -le 100 ]
then
        echo "你的成绩为优秀"
elif [ $a -ge 60 -a $a -le 84 ]
then
        echo "你的成绩为一般"
else
        echo "抄30遍"
fi

if嵌套语句

if [条件1]
then
​ if [条件2]
​ then
​ echo 代码
​ else
​ echo 代码
​ fi
else
echo 代码
fi
if嵌套,只有大的条件满足,才会执行小的条件

练习

输入一个考试成绩,85-100分优秀,60-84分一般,60分以下,抄30遍,成绩为整数,且在0-100之内

#!/bin/bash
read -p "请输入一个考试成绩:" a
if [ "$a" -eq "$a" ] && [[ "$a" -ge 0 && "$a" -le 100 ]]
then
if [ $a -ge 85 -a $a -le 100 ]
then
        echo "你的成绩为优秀"
elif [ $a -ge 60 -a $a -le 84 ]
then
        echo "你的成绩为一般"
else
        echo "抄30遍"
fi
else
        echo "输入不正确"
fi 2> /dev/null

case语句

case语句:也是条件判断的一种,是多条件判断的另一种写法
以模式来进行匹配:
case 变量值 in
模块1)
​ 代码
;;
模块2)
代码
;;
*)
代码
esac

练习

输入一个考试成绩,85-100分优秀,60-84分一般,60分以下,抄30遍

#!/bin/bash
read -p "请输入一个考试成绩:" num
[[ "$num" -ge 85 && "$num" -le 100 ]] && num="a"
[[ "$num" -ge 60 && "$num" -le 84 ]] && num="b"
case $num in
a)
     echo "你的成绩为优秀"
;;
b)
     echo "你的成绩为一般"
;;
*)
      echo "抄30遍"
esac

作业

1、检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

#!/bin/bash
[ -e /home/test.sh ]
if [ $? -eq 0 ]
then
[ -x /home/test.sh  ]
if [ $? -eq 0 ]
then
        echo "test.sh文件具备执行权限"
else
        echo "test.sh文件存在,但是不具备执行权限"
fi
else
        echo "test.sh文件不存在"
fi

2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误

#!/bin/bash
read -p "请输入百米赛跑的用时:" time
if [[ "$time" -eq "$time"  && "$time" -gt 0 && "$time" -le 10 ]]
then
read -p "请输入性别[boy\gril]:" age
if [ "$age" == boy ]
then
        echo "进入男生组"
        echo "${time} ${age}" >> boy.txt
elif [ "$gae" == gril ]
then
        echo "进入女生组"
        echo "${time} ${age}" >> gril.txt
else
        echo "输入错误"
fi
elif [ "$time" -gt 10 ]
then
        echo "你被淘汰了"
else
        echo "输入错误,请重新输入"
fi  2> /dev/null
~                                             

3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录

#!/bin/bash
read -p "请输入压缩包名称:" name
case $name in
*.tar.gz)
	tar -zxvf "$name" -C /opt/ &> /dev/null
;;
*.tar.bz2)
	tar -jxvf "$name" -C /opt/ &> /dev/null
;;
*)
	echo "输入错误,你输入的不是压缩包"
esac

4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。判断输入的内容是奇数还是偶数。

#!/bin/bash
read -p "请输入一个整数数字(1-100):" num
if [ "$num" -eq "$num" ] &> /dev/null  && [[ "$num" -ge 0 && "$num" -le 100 ]] &> /dev/null
then
if [ "$num%2"  -eq 0 ]
then
	echo "${num}是偶数"
else
	echo "${num}是奇数"
fi	
else
	echo "输入错误"
fi

5、用if 语句判断主机是否存活.保存到/opt/hosts.txt
ping -c 5 不显示ping的过程

#!/bin/bash
read -p "请输入主机ip地址:" ip
ping -c 5 $ip &>> /dev/null
if [ $? -eq 0 ]
then 
	echo "主机存活"
	echo "${ip}" >>/opt/hosts.txt
else
	echo "主机不存活"
fi

6、用case语句控制 firewalld start|stop|restart|status 来管理nginx服务,
要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}”。

#!/bin/bash
apt -y install nginx
read -p "请输入下列选项:(start、stop、restart、status)" score
case $score in
start)
        systemctl "$score" nginx
;;
stop)
        systemctl "$score" nginx
;;
restart)
        systemctl "$score" nginx
;;
status)
        systemctl "$score" nginx
;;

*)
        echo "输入不正确:{start|stop|restart|status}"
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值