shell编程------条件语句

Posted 噫噫噫呀呀呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程------条件语句相关的知识,希望对你有一定的参考价值。

一、条件测试

(一)test测试

测试表达式是否成立,若成立返回0,否则返回其他数值
注意 空格 空格 空格

格式1:test 条件表达式

格式2:[ 条件表达式 ] 

在这里插入图片描述

(二)文件测试

格式

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

在这里插入图片描述
在这里插入图片描述

(三)整数测试

整数值比较

[ 整数1 操作符 整数2 ]
-eq等于 equal
-ne不等于 not equal
-gt大于 greater than
-lt小于 lesser than
-le小于或等于 lesser or equal
-ge大于或等于 greater or equal

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(四)字符串测试

字符串比较

格式1:[ 字符串1 = 字符串2 ]

格式2:[ 字符串1 != 字符串2 ]

格式3:
[ -z 字符串 ]  #检查字符串是否为空zero,对于未定义或赋予空值的变量将视为空串
[ -n 字符串 ]  #检查是否有字符串存在
=字符串内容相同
!=字符串内容不同,!表示取反
-z字符串内容为空

在这里插入图片描述

(五)逻辑测试

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...

格式2:命令1 操作符 命令2 ...
-a或&&逻辑与,而且
-o或 ‖逻辑或,或者
!逻辑否

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、if语句

(一)if单分支语句

if 条件测试操作
	then 命令序列
fi

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(二)if双分支语句

if 条件测试操作
	then 命令序列1
	else 命令序列2
fi

在这里插入图片描述

例题

if 80端口是否在监听
	then 网站服务已在运行
	else 启动httpd服务
fi

在这里插入图片描述
在这里插入图片描述

(三)if多分支语句

if 条件测试操作1
	then 命令序列1
elif 条件测试操作2
	then 命令序列2
else

在这里插入图片描述

例题

#!/bin/bash
read -p "请输入你的分数:" score
if [ $score -eq 100 ];then
        echo "优秀"
elif [ $score -ge 90 ] && [ $score -lt 100 ];then
        echo "$score分,抄10遍"
elif [ $score -ge 70 ] && [ $score -lt 89 ];then
        echo "$score分,抄20遍"
elif [ $score -ge 60 ] && [ $score -lt 69 ];then
        echo "$score分,抄30遍"
elif [ $score -ge 0 ] && [ $score -lt 60 ];then
        echo "输入有误"
fi

在这里插入图片描述

三、case分支语句

case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
........
*)
	默认命令序列
esac

在这里插入图片描述

例题

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

例题

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

#!/bin/bash

if [ -f ~/test.sh ];then
   echo "test.sh文件存在"
   if [ -x ~/test.sh ];then
      echo "test.sh有可执行权限"
   else
      echo "没有可执行权限"
   fi

else
   echo "文件不存在"
fi

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

在这里插入图片描述

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

在这里插入图片描述

4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。

#!/bin/bash
read -p "输入一个数字:" a
expr $a + 1 &>/dev/null
if [ `echo $?` = 0 ];  #if [ $? = 0 ];
    then echo "输入的为整数"
else echo "输入的不是整数"
fi

在这里插入图片描述

5.根据上一题再判断输入的内容是奇数还是偶数。

在这里插入图片描述

6.用if 语句判断主机是否存活

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null

if [ `echo $?` -eq 0 ]
then
echo " host $1 is on"
else
echo "host $1 is off"
fi

在这里插入图片描述
在这里插入图片描述

*7.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中够使用 service start|stop|restart|status firewalld 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。

提示:
加入服务管理用chkconfig命令
vim /etc/init.d/firewalld
#!/bin/bash
#chkconfig: 35 99 20
#description:firewalld Service Control Script

chkconfig: 35 表示在 level 3 和 level 5  的 运行级别(runlevel)下启动

操作

touch /etc/init.d/firewalld
chmod +x firewalld
ll

vim firewalld

#!/bin/bash
#chkconfig: 35 99 20
#description: Firewalld Service Control Script
#date:2021-05-10

#echo $1
#echo $0

case "$1" in
start)
        echo "Starting firewawlld Server..."
        systemctl start firewalld
        ;;
stop)
        echo "Stopping firewawlld  Server..."
        systemctl stop firewalld
        ;;
restart)
        echo "Restarting firewawlld Server..."
        systemctl restart firewalld
        ;;
status)
        echo "Firewalld status is ..."
        systemctl status firewalld
        ;;
*)
        echo "用法: $0 {start|stop|restart|status}"
esac

#exit 0 


使用chkconfig 加入到系统服务管理中:

chkconfig --add firewalld
chkconfig firewalld on  #将firewalld 加入开机启动

添加成功后就可以执行:service firewalld start、stop、restart、status

验证

执行 service firewalld stop 的话,最终传到 /etc/init.d/firewalld 文件的参数就是 stop 。
$0 表示 /etc/init.d/firewalld
$1 表示 start、stop、restart、status

以上是关于shell编程------条件语句的主要内容,如果未能解决你的问题,请参考以下文章

SHELL脚本编程进阶

shell高级编程

Shell编程Shell中多分支case条件语句

Shell编程之条件语句——if语句case语句

shell编程之 if 判断语句

shell编程进阶