shell--编程之条件语句

文章目录

  • shell--编程之条件语句
    • 一:条件测试
      • 1.1:文件测试
        • 1.1.1:test命令
        • 1.1.2文件测试基本格式
      • 1.2:整数测试
      • 1.3:字符串与逻辑测试
        • 1.3.1:字符串比较
          • 1.3.2:逻辑测试
  • 二:if语句
    • 2.1:if单分支语句
      • 2.2if双分支语句
      • **2.3:if多分支语句**
    • 三、case语句结构
      • 3.1case多分支语句
      • 1.1:case语句的结构

shell–编程之条件语句

一:条件测试

1.1:文件测试

1.1.1:test命令

  • test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
  • 命令基本格式 格式一:test 条件表达式 格式二:[ 条件表达式 ] ‘两端要有空格,此法更为常用’

1.1.2文件测试基本格式

[ 操作符 文件或目录 ] ‘注意两端空格’

&? 返回0表示条件成立,返回非零值表示条件不成立

&& 逻辑与,"而且"的意思

|| 逻辑或,"或者"的意思

常见的测试操作符 解释
d 测试是否为目录(directory)
e 测试目录或文件是否存在(Exist)
f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(eXcute)
[root@localhost ~]# touch fff.txt
[root@localhost ~]# test -f fff.txt
[root@localhost ~]# echo $?
0         
[root@localhost ~]# test -d fff.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d fff.txt]
[root@localhost ~]# [ -d fff.txt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -f fff.txt ]
[root@localhost ~]# echo $?
0

1.2:整数测试

  • 整数值比较

    命令基本格式
    [ 整数1 操作符 整数2 ]	

常用的测试操作符

操作符 作用
-eq 等于(Equal)
-ne 不等于(Not Equal)
-gt 大于(Greater Than)
-lt 小于(Lesser Than)
-le 小于或等于(Lesser or Equal)
-ge 大于或等于(Greater or Equal)
[root@localhost ~]# [ 5 -eq 3 ]&& echo "yes"
[root@localhost ~]# [ 5 -eq 5 ]&& echo "yes"
yes
[root@localhost ~]# [ 5 -ne 5 ]&& echo "yes"
[root@localhost ~]# [ 5 -ne 6 ]&& echo "yes"
yes
[root@localhost ~]# [ 5 -gt 6 ]&& echo "yes"
[root@localhost ~]# [ 7 -gt 6 ]&& echo "yes"
yes
[root@localhost ~]# [ 7 -lt 6 ]&& echo "yes"
[root@localhost ~]# [ 7 -lt 8 ]&& echo "yes"
yes
[root@localhost ~]# [ 7 -le 8 ]&& echo "yes"
yes
[root@localhost ~]# [ 7 -ge 8 ]&& echo "yes"
[root@localhost ~]# [ 9 -ge 8 ]&& echo "yes"
yes



free -m   查看电脑内存使用情况

[root@localhost ~]# free -m 
              total        used        free      shared  buff/cache   available
Mem:           3771         764        2165          45         840        2672
Swap:          3967           0        3967

查看电脑硬盘剩余空间

[root@localhost ~]# free -m | grep "Mem" | awk '{print $4}'
2165

[root@localhost ~]# free -m | grep "Mem" | awk '{print $4}'
2087
[root@localhost ~]# FREECC=$[free -m | grep "Mem" | awk '{print $4}']
-bash: free -m | grep "Mem" | awk '{print }': 语法错误: 无效的算术运算符 (错误符号是 ""Mem" | awk '{print }'")
[root@localhost ~]# FREECC=$(free -m | grep "Mem" | awk '{print $4}')  用圆括号就不报错了
[root@localhost ~]# [ $FREECC -gt 1000 ] &&echo "$FREECC"MB
2087MB

注意括号的选择

1.3:字符串与逻辑测试

1.3.1:字符串比较

  • 常用的格式
    格式一:[ 字符串1 = 字符串2 ]
    	   [ 字符串1 != 字符串2 ]
    格式二:[ -z 字符串 ]
常用的测试操作符 解释
= 第一个字符串与第二个字符串内容相同
!= 第一个字符串与第二个字符串内容不同,!号表示相反的意思
-z 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串

字符串比较

[root@localhost ~]# [ lisi=zhangsan ] && echo "yes"    字符串要带单引号否则识别不出来
yes
[root@localhost ~]# [ 'lisi'  =  'zhangsan' ] && echo "yes"
[root@localhost ~]# [ ! 'lisi'  = 'zhangsan' ] && echo "yes"
yes
  • 17
    
1.3.2:逻辑测试
  • 基本格式
    格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
    格式二: 命令1 操作符 命令2 ...
常用的测试操作符 解释
&& 逻辑与,“而且”的意思,使用test命令测试时,可将“&&”改为“-a”
|| 逻辑或,“或者”的意思,使用test命令测试时,可将“||”改为“-o”
逻辑否
[root@localhost ~]# [ -d /etc ] && [ -r /etc ] &&echo "yes"
yes
[root@localhost ~]# [ -d /etc ] || [ -r /etc ] &&echo "yes"
yes
[root@localhost ~]# [ -f /etc ] || [ -r /etc ] &&echo "yes"
yes
[root@localhost ~]# [ -f /etc ] && [ -r /etc ] &&echo "yes"

二:if语句

2.1:if单分支语句

单分支结构(基本格式)
if 条件测试操作
	then  命令序列
fi
单分支结构(举例)
if cpu占用>80%
	then  报警
fi

shell--编程之条件语句_第1张图片

示例

[@localhost ~]# vim test04.sh

#!/bin/bash
read -p "请输入位置:" file
if [ ! -d $file ];then
        mkdir -p  $file
fi

[root@localhost ~]# sh test04.sh
请输入位置:/opt/wangwu
[root@localhost ~]# ls /opt/
rh  wangwu

2.2if双分支语句

双分支结构(基本格式)

if 条件测试操作

then  命令序列1

else  命令序列2

fi

shell--编程之条件语句_第2张图片

示例

vim test02.sh

#!/bin/bash
read -p "请输入目录位置:" file
if [ -d $file ]
 then
        echo "目录已存在"
 else
        mkdir -p $file
fi

[root@localhost ~]# sh test02.sh
请输入目录位置:/etc/lib
[root@localhost ~]# sh test02.sh
请输入目录位置:/opt
目录已存在

2.3:if多分支语句

多分支结构(基本格式)

if 条件测试操作1 

​		then  命令序列1 

elif  条件测试操作2

 		then  命令序列2

 else 命令序列3

 fi

shell--编程之条件语句_第3张图片

示例

判断分数范围,分出优秀、合格、不合格

vim test.sh

#!/bin/bash
read -p "请输入你的分数(0-100),并按ENTER键确认:" grade
if [ $grade -ge 85 ] && [ $grade -le 100 ];
then
        echo "优"
elif [ $grade -ge 60 ] && [ $grade -le 84 ];
then
        echo "合格"
else [ $grade -ge 0 ] && [ $grade -le 59 ];

        echo "不合格"

fi

[root@localhost ~]# sh test.sh
请输入你的分数(0-100),并按ENTER键确认:85

[root@localhost ~]# sh test.sh
请输入你的分数(0-100),并按ENTER键确认:65
合格
[root@localhost ~]# sh test.sh
请输入你的分数(0-100),并按ENTER键确认:50
不合格

三、case语句结构

3.1case多分支语句

1.1:case语句的结构

  • 针对变量的不同取值,分别执行不同的命令序列
  • 这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句指示判断一个变量的不同取值

格式:

case 变量值 in

 模式1)

 		命令序列1

 ;; 

模式2)

​		 命令序列2 

;; 

 *) 默认命令序列 

esac

shell--编程之条件语句_第4张图片

示例

进入十秒,分别进入男子组和女子组赛事

#!/bin/bash
read -p "请输入性别,并按ENTER:" sex
read -p "请输入成绩,并按ENTER:" score
case $sex in
  男)
        case $score in
                [1-9]|10)
                echo "你进入男子组"
                ;;
                *)
                echo "你没有进入男子组"
        esac

  ;;
  女)

        case $score in
                [1-9]|10)
                echo "你进入女子组"
                ;;
                *)
                echo "你没有进入女子组"
        esac

 ;;
*)
 echo "你输入的性别错误"
esac
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:8
你进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:6
你进入女子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:11
你没有进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:11
你没有进入女子组

*)
echo “你没有进入女子组”
esac

;;
*)
echo “你输入的性别错误”
esac


[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:8
你进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:6
你进入女子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:男
请输入成绩,并按ENTER:11
你没有进入男子组
[root@localhost ~]# sh test01.sh
请输入性别,并按ENTER:女
请输入成绩,并按ENTER:11
你没有进入女子组


你可能感兴趣的:(shell)