Shell脚本之——条件语句if详解

Posted Zcien

tags:

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

文章目录

一、test命令

1.2、格式

测试表达式是否成立,若成立返回0,否则返回其他数值。

格式1:    test 条件表达式
格式2:    [ 条件表达式 ]

1.2、实例操作

二、文件测试

2.1、格式:

操作符 文件名或者目录名 

2.2、常用的测试操作符

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

2.3、实例操作


三、整数值比较

3.1、格式

[ 整数1 操作符 整数2 ]

3.2、常用的测试操作符

-eq∶ 等于(Equal)
-ne∶ 不等于(Not Equal)
-gt∶ 大于(Greater Than)
-lt∶ 小于(Lesser Than)
-le∶ 小于或等于(Lesser or Equal)·
-ge∶ 大于或等于(Greater or Equal)

3.3、实例操作

1 结合逻辑与进行查询当前目录下的文件数目

2 查看系统内存是否低于或者高于1024M,如果满足条件则提示

3 使用双括号加数字进行表示

四、字符串比较

4.1、格式

[ 字符串1 = 字符串2 ]             #判断是否相等
[ 字符串1 != 字符串2 ]            #判断是否不等[ -z 字符串 ]                            #是否空值[ -n 字符串 ]                            # 字符集是否存在

4.2、常用的测试操作符

  • =∶ 字符串内容相同
  • !=∶ 字符串内容不同,!号表示相反的意思
  • z∶字符串内容为空

4.3、实例操作


五、逻辑测试(三元运算符)

5.1、格式

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

5.2、常用的测试操作符

  • -a或&&∶ 逻辑与,"而且"的意思
  • -o或||∶ 逻辑或,"或者"的意思
  • !∶逻辑否

5.3、实例操作一

5.4、实例操作二

#!/bin/bash
#Ping test
 
ping -c 3 -i 0.5 -w 2 $1 &> /dev/null && echo "$1 is online!" || echo "$1 is offline!"

六、if语句

6.1、单分支结构

如果只有一个判断式要进行,那么我们可以使用单分支的if语句

6.1.1 格式

if [ 条件判断式 ]; then
    当条件判断成立时,可以进行的命令工作内容
fi                  #这里将if反过来写,结束if语句的意思

6.1.2 原理图:

6.1.3 实例操作

6.2、双分支结构

在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:

6.2.1 格式

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

6.2.2 原理图:

6.2.3 实例操作一

6.2.4 实例操作二

#!/bin/bash
#Shut down httpd service
 
netstat -natp | grep :80 &> /dev/null
 
if [ $? -eq 0 ];then
   echo "httpd 服务正常运行!"
else
   echo "httpd 服务未开启,正在开启服务......"
   systemctl start httpd && echo "httpd 服务启动成功"
fi


6.3、多分支结构

如果数据需要进行多种不同的判断,则可以使用多分支结构

6.3.1 格式

if [ 条件判断式 ]; then
    当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]; then
    当条件判断成立时,可以进行的命令工作内容
else   
    当上面的条件判断都不成立时,可以进行的命令工作内容
fi     

6.3.2 原理图:

6.3.3 实例操作


七、case语句结构

7.1、格式

case 变量名称 in
“第一个变量内容”
    程序段
    ;;
“第二个变量内容”
    程序段
    ;;
*)
    不包含第一个变量内容与第二个变量内容的其他程序执行段
    默认程序段
    ;;
esac       

7.2、实例操作一

#!/bin/bash
#Determine grades and scores
 
read -p "请输入你的分数(0-100):" score
 
[ $score -ge 90 -a $score -le 100 ] && a="great"
[ $score -ge 70 -a $score -le 89 ] && a="medium"
[ $score -ge 60 -a $score -le 69 ] && a="pass"
[ $score -lt 60 ] && a="fail"
 
case $a in
great)
   echo "优秀"
;;
medium)
   echo "中等"
;;
pass)
   echo "及格"
;;
fail)
   echo "不及格"
;;
*)
  echo "输入有误"
esac


7.3、实例操作二

#!/bin/bash
#Determine Input
 
read -p "请输入一个字符:" string
 
case "$string" in
[a-z]|[A-Z])
    echo "你输入的是字母"
;;
[0-9])
   echo "你输入的是数字"
;;
*)
   echo "你输入的是其他字符"
esac

八、总结

1、test命令:

两种格式

test 条件表达式

[条件表达式]

2、文件测试

-d -e -f -r -w -L

3、整数值比较

-eq -ge -le -gt -lt -ne

4、字符串比较

相等=

不相等 !=

空值 -z

是否存在 -n

5、逻辑测试

逻辑与:-a 或者&&

逻辑或:-o 或者||

逻辑否:!

6、if语句

单分支

双分支

多分支

当 if 语句中使用 [ ] 条件修饰符时, $flag 变量必须加上引号。

当 if 语句中使用 [[]] 条件修饰符时,$flag 变量的引号可有可无。

7、case语句

多分支结构

Shell脚本之条件语句

技术图片

Shell脚本之条件语句

本章结构

条件测试
文件测试
整数测试
字符串与逻辑测试
if语句
if单分支语句
if双分支语句
if多分支语句
if嵌套语句

一.条件测试

技术图片

格式1: test  条件表达式

格式2:[ 条件表达式 ]   

二.文件测试

技术图片

-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
[root@localhost ~]# test -d /etc/yum  //测试/etc/yum是否是目录
[root@localhost ~]# echo $?         //上一条命令执行状态0就是正常执行,1就是错误
0
[root@localhost ~]# test -f /etc/yum   //测试/etc/yum是否是文件
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -e /etc/yum  //测试/etc/yum是否存在
[root@localhost ~]# echo $?
0
[root@localhost ~]# 

三.整数测试

技术图片

-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)

[root@localhost ~]# [ $(who|wc -l) -gt 10 ]&& echo "有点多!" //统计当前用户量
有点多!

四.字符串比较

技术图片

=:字符串内容相同
!=:字符串内容不同,!表示相反的意思
-z:字符串内容为空

五.逻辑测试

技术图片

-a或&&:逻辑与、“而且”的意思
-o或||: 逻辑或、“或者”的意思
!:逻辑否

[root@localhost ~]# [ ! -e /opt/abc ]&&mkdir /opt/abc  // /opt/abc这个目录不存在我就创建这个目录
[root@localhost ~]# ls /opt
abc  rh

6.if语句单分支

技术图片

#!/bin/bash
mulu="/etc/ccc"  
if [ ! -d $mulu ] 
then
        mkdir -p $mulu
fi

7.if双分支语句

技术图片

#!/bin/bash

ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if [ $? -eq 0 ]
then
        echo "Host $1 is up "
else
        echo "Host $1 is down "
fi
-C发数据包  ,-0.2每隔两秒发一次  -W 3次回复  所有输出到这个无用的目录中

[root@localhost ~]# ./c.sh
Host  is down 

8.if多分支和嵌套语句

技术图片

#!/bin/bash
#一场跑步比赛,10秒内进入决赛,进入决赛之后会被分进男子组或女子组
read -p "请输入你的比赛时间" soucre
if [ $soucre -lt 10 ]
 then
 echo "进入决赛"
 read -p "请输入你的性别(男/女) " sex
 if [ $sex = "男" ]
   then
   echo "进入男子组"
 else
   echo "进入女子组"
 fi
else "被淘汰"
fi
~                                                                                        
~                            

以上是关于Shell脚本之——条件语句if详解的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本之if条件测试语句

Shell脚本之条件语句

shell脚本之条件语句 与 if 语句

Shell脚本之if条件语句

linux自学_shell脚本if详解

Shell脚本之进阶