目录

  • 一、条件测试
  • test命令
  • 文件测试与整数测试
  • 文件测试
  • 整数值比较
  • 字符串测试与逻辑测试
  • 字符串比较
  • 逻辑测试
  • 二、if语句
  • if单分支语句
  • 单分支结构
  • if双分支语句
  • 双分支结构
  • if多分支语句
  • 多分支结构
  • 三、case语句结构
  • case多分支结构
  • 四、条件语句示例



一、条件测试

test命令

测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ] #方括号 “ [ ” 或 “ ] ” 与条件表达式之间需要至少一个空格进行分隔

文件测试与整数测试

文件测试

格式:[ 操作符 文件或目录 ]

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

[转帖]shell编程之条件语句_分支结构


[转帖]shell编程之条件语句_操作符_02

整数值比较

格式:[ 整数变量1 操作符 整数变量2 ]
test 1 == 1
echo $?

常用的操作符:
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-le:小于等于
-ge:大于等于

[转帖]shell编程之条件语句_逻辑测试_03

[转帖]shell编程之条件语句_逻辑测试_04

字符串测试与逻辑测试

字符串比较

[转帖]shell编程之条件语句_分支结构_05


[转帖]shell编程之条件语句_逻辑测试_06

[转帖]shell编程之条件语句_分支结构_07


[转帖]shell编程之条件语句_逻辑测试_08

[转帖]shell编程之条件语句_操作符_09

逻辑测试

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

常用的操作符:
-a或&& :逻辑与,“而且”的意思,前后条件需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否

[转帖]shell编程之条件语句_逻辑测试_10


[转帖]shell编程之条件语句_分支结构_11


[转帖]shell编程之条件语句_操作符_12

二、if语句

if单分支语句

单分支结构

[转帖]shell编程之条件语句_分支结构_13


[转帖]shell编程之条件语句_操作符_14

[转帖]shell编程之条件语句_操作符_15

if双分支语句

双分支结构

[转帖]shell编程之条件语句_逻辑测试_16


[转帖]shell编程之条件语句_操作符_17


[转帖]shell编程之条件语句_分支结构_18

if多分支语句

多分支结构

[转帖]shell编程之条件语句_逻辑测试_19


[转帖]shell编程之条件语句_操作符_20


[转帖]shell编程之条件语句_逻辑测试_21


[转帖]shell编程之条件语句_逻辑测试_22

三、case语句结构

case多分支结构

[转帖]shell编程之条件语句_逻辑测试_23


[转帖]shell编程之条件语句_操作符_24


[转帖]shell编程之条件语句_操作符_25


[转帖]shell编程之条件语句_操作符_26

四、条件语句示例

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

#!/bin/bash
cd /home
file="test.sh"
if [ -e $file ]
then
    echo "文件存在"
   if [ -x $file ]
   then
       echo "该文件有执行权限"
    else
       echo "该文件没有执行权限"
    fi
else
    echo "文件不存在"
fi
~

[转帖]shell编程之条件语句_操作符_27

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

read -p "请输入100米赛跑的秒数:" miao
if [[ $miao -gt 0  && $miao -le 10 ]]
then
   echo "进入决赛"
 <span >read</span> -p <span >"请输入选手性别:"</span> sex
 <span >if</span> <span >[</span><span >[</span> <span >$sex</span> <span >=</span> <span >"男"</span> <span >]</span><span >]</span>
     <span >then</span>
     <span >echo</span> <span >"该选手进入男子组"</span>
 <span >elif</span> <span >[</span><span >[</span> <span >$sex</span> <span >=</span> <span >"女"</span> <span >]</span><span >]</span>
     <span >then</span>
     <span >echo</span> <span >"该选手进入女子组"</span>
  <span >else</span>
     <span >echo</span> <span >"输入错误"</span>
 <span >fi</span>

else
echo "淘汰"
fi

 <span >read</span> -p <span >"请输入选手性别:"</span> sex
 <span >if</span> <span >[</span><span >[</span> <span >$sex</span> <span >=</span> <span >"男"</span> <span >]</span><span >]</span>
     <span >then</span>
     <span >echo</span> <span >"该选手进入男子组"</span>
 <span >elif</span> <span >[</span><span >[</span> <span >$sex</span> <span >=</span> <span >"女"</span> <span >]</span><span >]</span>
     <span >then</span>
     <span >echo</span> <span >"该选手进入女子组"</span>
  <span >else</span>
     <span >echo</span> <span >"输入错误"</span>
 <span >fi</span>

[转帖]shell编程之条件语句_逻辑测试_28

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

read -p "请输入压缩文件的名称:" file
case $file in
*.tar.gz)
    echo "正在将gz文件解压至opt目录下"
    tar -zxvf $file -C /opt/ > /dev/null
;;
*.tar.bz2)
    echo "正在将bz2文件解压至opt目录下"
    tar -jxvf $file -C /opt/  > /dev/null
;;
*)
    echo "输入不合法"
esac

[转帖]shell编程之条件语句_分支结构_29

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

read -p "请输入内容:" a
if [[  $a -lt 0 ||  $a -gt 0 || $a == 0 ]] &> /dev/null
then
   echo "该内容是整数"
   if [[ $a%2 -eq 0 ]]
   then
     echo "该数字为偶数"
   else
     echo "该数字为奇数"
fi
else
echo "该内容不是整数"
fi

[转帖]shell编程之条件语句_操作符_30

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

for i in {10..20}
do
  ping -c 3 -i 0.5 -W 2 192.168.154.$i &> /dev/null
  if [[ $? -eq 0 ]]
  then
     echo "192.168.154.$i online"
  else
     echo "192.168.154.$i offline"
  fi
done

[转帖]shell编程之条件语句_逻辑测试_31

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

#!/bin/bash
read -p "请输入服务:" fw
case $fw in
start)
     systemctl start firewalld
     echo "防火墙已开启"
;;
stop)
      systemctl stop firewalld
     echo "防火墙已关闭"
;;
status)
      systemctl status firewalld &> /dev/null
      if [[ $? -eq 0 ]]
      then
      echo "防火墙已经启动"
      else
      echo "防火墙未启动"
      fi
;;
restart)
      systemctl restart firewalld
      echo "重启防火墙"
;;
*)
     echo "用法 $0 {start|stop|status|restart} "
esac

[转帖]shell编程之条件语句_逻辑测试_32