shell脚本——第二章 条件语句、if语句、case语句

目录

一、条件测试

1.1 test命令测试

1.2 整数数值比较

1.3 字符串比较

1.4 逻辑测试

二、if条件语句

2.1 单分支if

实例:判断是否为超级管理员

2.2 双分支if

实例:判断服务器是否开启

2.3 多分支if

实例1:判断分数

实例2:石头剪刀布小游戏

实例3:新建用户名字

实例4:判断主机连通性

三、case语句

实例1:输入yes或者no

实例2:工具箱操作


一、条件测试

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成

若真,则状态码变量 $? 返回0

若假,则状态码变量 $? 返回1

1.1 test命令测试

格式1:test  [操作符选项]  条件表达式
格式2:[  操作符 条件表达式  ]

常见的测试操作符含义
-d测试是否为目录(directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-x测试当前用户是否有权限执行(eXcute)
-l测试是否为软连接文件
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件

1.2 整数数值比较

格式:

[ 整数1  操作符 整数  ] 公式

选项:

  • -eq:第一个数等于(Equal)第二个数
  • -ne:第一个数不等于(Not Equal)第二个数
  • -gt:第一个数大于(Greater Than)第二个数
  • -lt:第一个数小于(Lesser Than)第二个数
  • -le:第一个数小于或等于(Lesser or Equal)第二个数
  • -ge:第一个数大于或等于(Greater or Equal)第二个数

1.3 字符串比较

常用的测试操作符

  • =:字符串内容相同

  • !=:字符串内容不同,! 号表示相反的意思

  • -z:字符串内容为空

  • -n: 字符是否存在

1.4 逻辑测试

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

格式2:命令1 操作符 命令2 ...

常见条件

  • -a或&&:逻辑与,全真为真,一假即为假
  • -o或||:一真为真 全假为假
  • !:逻辑否

标准写法:

 cmd1  &&  cmd2   ||  cmd3

二、if条件语句

2.1 单分支if

if 判断条件
then
命令语句
else
命令语句
fi

实例:判断是否为超级管理员

#!/bin/bash
if [ "$USER" != "root" ]
then
    echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi

2.2 双分支if

if 判断条件; then
 条件为真的分支代码

else
 条件为假的分支代码

fi

实例:判断服务器是否开启

#!/bin/bash
ss -natp|grep 80          //过滤80端口

if [ $? -eq 0 ]          
then
echo "服务器已开启"
else
systemctl start httpd &>/dev/null
        if   [  $?  -eq  0 ]
        then
        echo  "httpd 服务已开启"
        else
        echo "httpd 服务启动失败"
        fi
fi

2.3 多分支if

if 判断条件1
then
 条件1为真的分支代码

elif 判断条件2


then
 条件2为真的分支代码

elif 判断条件3;then
 条件3为真的分支代码

...
else
 以上条件都为假的分支代码  托底

fi
 

实例1:判断分数

#!/bin/bash
read -p "请输入你的分数(0-100 正整数):" num

if [ $num -ge 90 -a $num -le 100 ]
then
echo "优秀"
elif [ $num -ge 70 -a $num -lt 90 ]
then
echo "良好"
elif [ $num -ge 60 -a $num -lt 70 ]
then
echo "及格"
elif [ $num -lt 60 ]
then
echo  "罚抄20遍"
else
echo  "输入有误,请输入0-100 之间的正整数"
bash $0
fi

实例2:石头剪刀布小游戏

#!/bin/bash
#1 布  2锤子 3 剪刀

read -p "请输入 1布 2锤子 3剪刀:" human

m=`echo $[RANDOM%3+1]`

if [ $human -eq $m ]
then
echo "人机 打平"
elif [ $human -eq 1 -a $m -eq 2 -o $human -eq 2 -a $m -eq 3 -o $human -eq 3 -a $m -eq 1 ]
then
echo "你赢了"
else
echo "你输了"
fi

实例3:新建用户名字

#!/bin/bash
read -p "请输入你要新建用户的 名字:"  name

grep -q  $name /etc/passwd
if [ $?  -eq 0 ]
then
echo "该用户已存在"
exit
else
useradd $name
pass=`cat /dev/random |tr -dc [[:alnum:]]|head -c 12`
echo $pass |passwd $name --stdin
echo $pass >> /opt/pass.txt
fi

实例4:判断主机连通性

#!/bin/bash

read -p "请输入 最后一位ip地址1-254:"  num

ping -c1 -W2  192.168.76.${num}  &>/dev/null
if [ $? -eq 0 ]
then
echo "主机 $num is onlien"
else
echo "主机 $num is offlien"
fi

三、case语句

格式:

case $变量 in

1)

命令序列1

;;

2)

命令序列2

;;

.......

*)

;;

esac

实例1:输入yes或者no

#!/bin/bash
read -p "请输入yes 或no:"  key

case $key in
[yY][eE][sS]|[yY])
echo "你输入的是yes"
;;

[nN]|[nN][oO])
echo "你输入的是no"
;;

*)
echo "输入有误请重新输入"
bash $0
;;
esac

实例2:工具箱操作

#!/bin/bash
cat <<EOF
1.关闭防火墙
2.临时关闭selinux
3.查看当前用户
EOF

read -p "请选择操作(1-3):" key
case $key in
1)
systemctl stop firewalld;
;;
2)
setenforce 0
;;
3)
user=`whoami`
echo "当前用户$user"
;;
*)
echo "输出错误,请输入1-3进行选择"
esac

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值