shell编程------条件语句
Posted 噫噫噫呀呀呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程------条件语句相关的知识,希望对你有一定的参考价值。
目录
- 一、条件测试
- 二、if语句
- 三、case分支语句
- 例题
- 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
- 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
- 3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
- 4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。
- 5.根据上一题再判断输入的内容是奇数还是偶数。
- 6.用if 语句判断主机是否存活
- *7.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中够使用 service start|stop|restart|status firewalld 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
一、条件测试
(一)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编程------条件语句的主要内容,如果未能解决你的问题,请参考以下文章