shell 编程之if条件语句(内含实验)

前言:

​ 在简单的Shell脚本程序中,各条语句将按先后顺序一次执行,从而实现批处理的自动化过程,然而,单一的顺序结构使得脚本过于机械化,难以处理更加灵活的任务。

​ 本篇博客将介绍如何进行条件测试操作,并通过正确使用if语句,使Shell脚本具有一定的”判断“能力,以根据不同的条件来完成不同的管理任务。

一、条件测试操作

1.1 条件测试操作 1
  • test命令

  • 测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值

格式1:test 条件表达式
格式2:[ 条件表达式 ]  (中括号中的文字与左右括号间都需要空格)
[root@localhost opt]# ls
abc  rh  test.txt
[root@localhost opt]# test -d /opt/abc
[root@localhost opt]# echo $?
0
[root@localhost opt]# test -e /opt/abc
[root@localhost opt]# echo $?
0
[root@localhost opt]# test -f /opt/abc.txt
[root@localhost opt]# echo $?
1
[root@localhost opt]# test -f /opt/test.txt
[root@localhost opt]# echo $?
0
[root@localhost opt]# ! test -d /opt/abc
[root@localhost opt]# echo $?
1

“!” 为取反

使用$?返回0表示条件成立 返回除0之外的数字表示不成立

1.2 条件测试 2
  • 文件测试

格式:

[ 操作符 文件或目录 ]  

常用的测试操作符:
在这里插入图片描述

示例:

[root@localhost opt]# [ -w /opt/abc ]
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -x /opt/abc ]
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -r /opt/abc ]
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -r /opt/abc ] && echo "yes"
yes

以上最后一条为逻辑与的关系(而且的意思)

1.3 条件测试 3
  • 整数值比较

格式:

[ 整数1 操作符 整数2 ]

常用的测试操作符:
在这里插入图片描述

示例:

[root@localhost opt]# [ 5 -gt 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 5 -le 3 ]&& echo "yes"
[root@localhost opt]# [ 5 -ne 3 ]&& echo "yes"
yes

第二条中因为5大于3,所以输入有误,不会生成yes

数值比较的另一种用法

我们使用数据时可以通过”行“的统计来生成文件或程序的数量,然后进行数值比较来判断是否需要进行处理。
示例:

[root@localhost opt]# ps -aux | wc -l
201
[root@localhost opt]# [ `ps -aux | wc -l` -gt 50 ]&& echo "很多"
很多

同时我们也可以通过“列”的统计来生成我们需要的位置下的数值,然后设置一个标准与其进行对比大小来判断我们是否要进行处理。
示例:

[root@localhost ~]# free -m   (查看空间内存)
total        used        free      shared  buff/cache   available
Mem:           1823         291        1146           9         384        1335
Swap:          6143           0        6143
[root@localhost ~]# FreCC=$(free -m | grep "Mem:" | awk '{print $4}')
[root@localhost ~]# [ $FreeCC -gt 1024 ] && echo ${FreeCC}MB
1146MB

以上判断的是如果Mem 物理内存的大小大于1024MB,则我们输出第四列空闲内存的大小

1.4 条件测试操作 4
  • 字符串比较

格式1:

[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]

格式2:

[ -z 字符串]

常用的测试操作符:
在这里插入图片描述

实验:测试当前语言环境:

[root@localhost ~]# echo $LANG    (当前语言环境)
en_US.UTF-8
[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US  
 以上比较如果当前语言环境不是"en.US"则输出Not en.US

以上比较的是输入的内容

1.5 条件测试 5
  • 逻辑测试
格式1 :[ 表达式1 ] 操作符 [ 表达式2 ]
格式2 :命令1 操作符 命令2

常用的测试操作符:
在这里插入图片描述

示例:

[root@localhost demo]# pwd
/opt/demo
[root@localhost demo]# ls
test.txt
[root@localhost demo]# [ -e /opt/demo/test.txt ] && echo "yes"
yes

二、if 语句

2.1 if语句结构
  • 单分支结构:
    在这里插入图片描述
    在这里插入图片描述

  • 双分支结构
    在这里插入图片描述
    在这里插入图片描述

  • 多分支结构
    在这里插入图片描述
    在这里插入图片描述

实验示例:

需求:学校田径比赛百米赛跑,若成绩在10s内则进入决赛,然后按照性别分男子组和女子组

[root@localhost demo]# vi bisai.sh
#!/bin/bash
read -p "请输入比赛秒数:" stime
    if [ $stime -le 10 ] && [ $stime -gt 0 ]
       then
         echo "恭喜进入决赛"
         read -p "请输入你的性别:" sex
         if [ $sex = "男" ]
              then
                 echo "进入男子组"
         elif [ $sex = "女" ]
              then
                 echo "进入女子组"
         else
                 echo "输入有误"
         fi
       else
         echo "未进入决赛"
    fi
~ 
[root@localhost demo]# chmod +x bisai.sh 
[root@localhost demo]# ./bisai.sh
请输入比赛秒数:8
恭喜进入决赛
请输入你的性别:男
进入男子组
[root@localhost demo]# ./bisai.sh
请输入比赛秒数:7
恭喜进入决赛
请输入你的性别:nan
输入有误

以上通过if语句的嵌套来完成需求

总结:

我们在写 if 条件语句的脚本时,要观察需求中有几条分支选项。然后我们在使用if语句进行处理时,要选好比较、判断的标准。
在使用多条嵌套语句来完成需求的时候,我们要可以先把 “if” 和 “fi” 写好,以免写完脚本因为漏写 fi 而导致脚本报错或无法执行。
在写完脚本后,如果要使用./来执行语句时,要注意先授予脚本执行权限。

发布了48 篇原创文章 · 获赞 46 · 访问量 6621

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/103325992