shell——条件语句

文件测试

文件测试格式

 格式一: test 操作符 表达式
 ​
 格式二: [ 操作符 表达式 ]  

常用的文件测试操作符:

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

示例1

[root@localhost ~]# test -d /etc/      //测试是否为目录
[root@localhost ~]# echo $?        //状态码返回0,表示为真,是目录
0
[root@localhost ~]# test -f /etc/sysconfig/       //测试是否为普通文件
[root@localhost ~]# echo $?          //状态码返回1,表示为假,不是普通文件
1

整数测试

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

操作符:

操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

逻辑测试(短路运算)

逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与","逻辑或","逻辑否"三种。

逻辑测试两种格式:

 格式一:[  表达式1  ]  逻辑运算符  [  表达式2  ] ...
 #例:[表达式1] && [表达式2]  等同于  [表达式1 -a 表达式2]  等同于  [[表达式1 && 表达式2]]
 #例:[表达式1] || [表达式2]  等同于  [表达式1 -o 表达式2]  等同于  [[表达式1 || 表达式2]]
 ​
 格式二:命令1  逻辑运算符  命令2  ...

 逻辑运算符:

  • -a或&& :逻辑与,“而且”的意思,全真才为真。
  • -o或|| :逻辑或,“或者”的意思,一真即为真。
  • ! :逻辑否。

 if 单分支结构

单分支语句格式:

 if  判断条件
 ​
      then                  //条件成立的分支代码     
 ​
 fi                         //条件不成立直接结束

 示例

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

[root@localhost ~]# vim 20.sh

if [ -f ~/test.sh ]
 then
  echo "文件存在"
 if [ -x ~/test.sh ]
  then
   echo "文件有可执行权限"
  else
   echo "文件没有可执行权限"
 fi
 else
  echo "文件不存在"
fi
[root@localhost ~]# sh 20.sh 
文件存在
文件没有可执行权限

  if 双分支结构

双分支语句结构:

if 条件判断式
    then  
    当条件判断成立时,可以进行的命令工作内容
else   
    当条件判断不成立时,可以进行的命令工作内容
fi 

示例

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

[root@localhost ~]# vim si.sh
read -p "数字:" num
let n=$num+1 &> /dev/null
if [ $? -eq 0 ]
then
  echo "是整数"
else
  echo "不是整数"
fi
[root@localhost ~]# sh si.sh 
数字:4
是整数
[root@localhost ~]# sh si.sh 
数字:4.5
不是整数

if 多分支结构

多分支语句格式:

 if 判断条件1
 then
     条件1为真的分支代码
 ​
 elif 判断条件2
 then
     条件2为真的分支代码
 ​
 elif 判断条件3
 then
     条件3为真的分支代码
 ​
 ...
 else
     以上条件都为假的分支代码
 ​
 fi

 示例

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

[root@localhost ~]# vim er.sh

read -p "请输入秒数:" sec
if [ $sec -gt 0 ] && [ $sec -le 10 ]
then
read -p "输入性别:" sex

    if [ $sex == "男" ]
    then
       echo "男生组"
     elif [ $sex == "女" ]
       then
   echo "女生组"
   else
   echo "请重新输入"
fi
else
echo "淘汰"
fi    
[root@localhost ~]# sh er.sh 
请输入秒数:2
输入性别:男 
男生组

case语句

格式:

 case 变量引用 in
 模式1)
     命令分支1
     ;;
 模式2)
     命令分支2
     ;;
 ...
 *)
     默认命令分支
 esac

 示例

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

[root@localhost ~]# vim qi.sh
read -p "管理防火墙命令" firewalld
case $firewalld in
start)
 systemctl start firewalld
 echo "防火墙已开启"
;;
stop)
 systemctl stop firewalld
echo "防火墙已关闭"
 ;;
restart)
 systemctl restart firewalld
echo "防火墙已重启"
;;
status)
 systemctl status firewalld
echo "查看状态"
;;
*)
echo "用法$0{start|stop|restart|status}"
esac
[root@localhost ~]# sh qi.sh 
管理防火墙命令start
防火墙已开启
[root@localhost ~]# sh qi.sh 
管理防火墙命令stop
防火墙已关闭

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值