Shell编程之条件语句

时间:2021-07-12
本文章向大家介绍Shell编程之条件语句,主要包括Shell编程之条件语句使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Shell编程之条件语句

一、条件测试

1. 文件测试与整数测试

(1)test命令

测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
注:格式2[]前后需留有至少一个空格

(2)文件测试

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

[root@localhost ~]# [ -d /etc/sysconfig ]
[root@localhost ~]# echo $?                              #返回0表示条件成立
0
[root@localhost ~]# [ -d /etc/sys ]
[root@localhost ~]# echo $?                              #返回1表示条件不成立
1
[root@localhost ~]# [ -d /etc/sysconfig ] && echo "YES"  #逻辑与,“而且”的意思
YES

(3)常用的文件测试操作符

常用文件比较运算符 说明 示例
-e filename 如果filename存在,则为真 [ -e /var/log/syslog ]
-d filename 如果filename目录存在,则为真 [ -d /tmp/mydir ]
-f filename 如果filename文件存在,则为真 [ -f /usr/bin/grep ]
-L filename 如果filename符号链接存在,则为真 [ -L /usr/bin/grep ]
-r filename 如果filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果filename可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果filename1比filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果filename1比filename2旧,则为真 [ /tmp/install/etc/services -nt /etc/services ]

(4)整数值比较

格式为:[ 整数1 操作符 整数2 ]

[root@localhost ~]# who | wc -l
1
[root@localhost ~]# [ $(who | wc -l) -lt 5 ] && echo "<5"
<5

[root@localhost ~]# FreeCC=$(free -m | grep "Mem:" | awk '{print $6}')
[root@localhost ~]# [ $FreeCC -lt 1024 ] && echo ${FreeCC}MB
606MB
常用的测试操作符 说明
-eq 等于(equal)
-ne 不等于(not equal)
-gt 大于(greater than)
-lt 小于(lesser than)
-le 小于或等于(lesser or equal)
-ge 大于或等于(greater or equal)

2. 字符串测试与逻辑测试

(1)字符串比较

格式1:
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ]

[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US

[root@localhost ~]# read -p "是否覆盖(yes/no)?" ACK
是否覆盖(yes/no)?yes
[root@localhost ~]# [ $ACK="yes" ] && echo "覆盖"
覆盖

(2)read命令

Linux read命令用于从标准输入读取数值。
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

read常用选项 说明
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标准
-p 后面跟提示信息,即在输入前打印提示信息
-e 在输入的时候可以使用命令补全功能
-n 后跟一个数字,定义输入文本的长度,很实用
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话\就是个正常的字符了
-s 安静模式,在输入字符时不在屏幕上显示,例如login时输入密码
-l 后面跟秒数,定义输入字符的等待时间
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的

二、if语句

1. if语句概述

(1)逻辑测试

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

(2)常用的测试操作符

常用操作符 说明
-a或&& 逻辑与,“而且”的意思
-o或|| 逻辑或,“或者”的意思
逻辑否
[root@localhost ~]# [ -d /etc ] && [ -r /etc ] && echo "you can open it"
you can open it
[root@localhost ~]# [ -d /etc ] || [ -d /home ] && echo "ok"
ok

2. if单分支语句

graph LR A{if条件测试操作} -->|条件成立 then| B[命令序列] B -->C[fi结束判断] A -->|条件不成立| C D[单分支流程图]
if 条件测试操作
  then 命令序列
fi

例如:

#!/bin/bash
read -p "请输入您的数据:" nums
if [ $[nums%2] == 0 ];then
    echo "$nums是偶数"
fi

3. if双分支语句

graph LR A{if条件测试操作} -->|条件成立 then| B[命令序列1] B -->D[fi结束判断] A -->|条件不成立 else| C[命令序列2] C -->D E[双分支流程图]
if 条件测试操作
  then 命令序列1
  else 命令序列2
fi

例如:

#!/bin/bash
read -p "请输入您的数据:" nums
if [ $[nums%2] == 0 ];then
    echo "$nums是偶数"
else
    echo "$nums是奇数"
fi

4. if多分支语句

graph LR A{if条件测试操作} -->|条件成立 then| B[命令序列1] B -->F[fi结束判断] A -->C{elif条件测试操作} C -->|条件成立 then| D[命令序列2] D -->F C -->|条件不成立 else| E[命令序列n] E -->F G[双分支流程图]
if 条件测试操作1
  then 命令序列1
elif 条件测试操作2
  then 命令序列2
else
  命令序列3
fi

例如:

#!/bin/bash
read -p "请输入您的成绩:" nums
if [ $nums -ge 90 ];then
    echo "出去旅游"
elif [ $nums -ge 80 ];then
    echo "买个玩具"
elif [ $nums -ge 70 ];then
    echo "在家写作业"
elif [ $nums -ge 60 ];then
    echo "试卷抄3遍"
else
    echo "再报5个班"
fi

原文地址:https://www.cnblogs.com/dingcong1201/p/15001394.html