shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)

shell编程之条件语句

简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程。

条件测试

文件测试

test命令

-d  测试是否为目录(directory)
-e	测试目录或文件是否存在(Exist)
-f	测试是否为文件(File)
-r	测试当前用户是否有权限读取(Read)
-w	测试当前用户是否有权限写入(Write)
-x	测试当前用户是否有权限执行(eXcute)
[root@localhost ~]# mkdir ccc
[root@localhost ~]# test -d ccc 测试是否是目录
[root@localhost ~]# echo $?
0                               是
[root@localhost ~]# test -f ccc 测试是否是文件
[root@localhost ~]# echo $?
1                              不是
[root@localhost ~]# [ -d ccc ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -f ccc ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -x ccc ] && echo "yes"
yes
[root@localhost ~]# [ -x ccc ] || echo "yes"

整数值测试

-eq	         等于(Equal)
-ne        	 不等于(Not Equal)
-gt	         大于(Greater Than)
-lt	         小于(Lesser Than)
-le	         小于或等于(Lesser or Equal)
-ge	         大于或等于(Greater or Equal)
[root@localhost ~]# [ 5 -gt 3 ] && echo “yes”
“yes”
[root@localhost ~]# [ 5 -lt 3 ] && echo “yes”
[root@localhost ~]# [ 5 -eq 5 ] && echo “yes”
“yes”

free -m 提供了更简洁的查看系统内存使用情况:

 [root@localhost ~]# free  -m 提供了更简洁的查看系统内存使用情况:
             total        used        free      shared  buff/cache   available
Mem:           3770         160        3408          11         201        3366
Swap:          3967           0        3967
              
Mem:表示物理内存统计
Swap:表示硬盘上交换分区的使用情况
total1:    表示物理内存总量。
used1:     表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实
free1:     未被分配的内存。
shared1:   共享内存,一般系统不会用到,这里也不讨论
buffers1: 系统分配但未被使用的buffers 数量。
cached1:   系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
used2:     实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2:     未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

字符串和逻辑测试

字符串

操作符 解释
= 第一个字符串与第二个字符串内容相同
!= 第一个字符串与第二个字符串内容不同,!号表示相反的意思
-z 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串
[root@localhost ~]# [ “男” != “男“ ] && echo "yes"
yes
[root@localhost ~]# [ “男” = “女“ ] && echo "yes"
[root@localhost ~]# 

[root@192 ~]# vim 44.sh
#!/bin/bash
read -p "是后创建/opt/zhang目录: (yes/no)" ack
[ $ack = yes ] && mkdir /opt/zhang
echo "创建成功"
[root@192 ~]# sh 44.sh 
是后创建/opt/share目录: (yes/no)yes
创建成功
[root@192 ~]# ls /opt
zhang

逻辑测试

操作符 解释
&& 而且”的意思
|| 或者"的意思
逻辑否

&&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断。

用 || 时,左端为真,右端不需要进行运算,结果直接为真

但&&和 || 更为高效一点,可以减少不必要的运算

[root@xue ~]# [ 1 -ne 2 ] && echo "yes"
yes
[root@localhost opt]# [ -d /opt/zhangsan ] && echo "yes"
yes

一元运算符,二元运算符和三元运算符

let 命令

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

i=i++:先赋值在运算

i=++i:先自加在赋值

i=–i:先自减在赋值
[root@192 ~]# echo $i
1
[root@192 ~]# let i=++i
[root@192 ~]# echo $i
2
[root@192 ~]# let i+=2 相当于i=i+2'
[root@192 ~]# echo $i
4

if语句

if单分支语句

单分支结构(基本格式)
if 条件测试操作
	then  命令序列
fi

mark

实验

[root@localhost ~]# vim text
#!/bin/bsah
read -p "请输入目录位置: " FILE
if [ ! -d $FILE ]
  then
   mkdir -p $FILE
fi
[root@localhost ~]# sh text 
请输入目录位置: tesr
[root@localhost ~]# ls
 tesr

if双分支语句(一看就懂)

双分支结构(基本格式)
if 条件测试操作
	then  命令序列1
	语句块1(条件成立)
	else  命令序列2
	语句块2(条件不成立)
fi
-------------------------------
搞笑解释
如果(if)   [你有房]
那么(then)
        我就嫁给你
否则(else)
        good bye!
果如

mark

实验

if双分支语句
[root@localhost ~]# vim text
#!/bin/bsah
read -p "请输入目录位置: " FILE
if [ -e $FILE ]
   then
    mkdir -p $ FILE           mkdir的-p选项允许你一次性创建多层次的目录
 else
    echo "目录已存在"
fi
[root@localhost ~]# sh text 
请输入目录位置: 12
目录已存在
判断主机是否在线
[root@localhost ~]# vim 3.txt
#!/bin/bash
read -p "请输入IP地址:" addr
ping -c 3 -i 0.2 -W 3 $addr &> /dev/null  《《 意思是把 标准输出 和 标准错误输出 都重定向到黑洞里
if [ $? -eq 0 ]
        then
                echo "$addr is up"
        else
                echo "$addr is down"
fi

[root@localhost ~]# sh 3.txt 
请输入IP地址:192.168.136.244
192.168.136.244 is up        
-c:发送三个包
-i: 发包间隔0.2秒
-W:等待时间3秒

if多分支语句(一看就懂)

多分支结构(基本格式)
if 条件测试
	then  命令序列1
	语句块1(条件成立)
elif  条件测试操作2
    语句块1(条件成立)
	then  命令序列2
else   
	命令序列3
fi
--------------------------------------------
搞笑解释
如果(if)   [你有房]
那么(then)
        我就嫁给你        
或者(elif)    [你爸是马云]
那么(then)
       我就嫁给你       
或者(eilf)   [你很努力很吃苦]
那么(then)
        我们可以先谈男女朋友     
否则 (else)
        洗洗,早点睡吧
果如


mark

实验

[root@xue ~]# vim grap.sh
#!/bin/bash
read -p "请输入你的分数(0-100: " GRADE

if [ $GRADE -ge 0 ] && [ $GRADE -le 100 ]
   then
 if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
 then
    echo "$GRADE分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
 then
    echo "$GRADE分,合格"
  else
      echo  “不合格”
   fi
      echo "请输入(0-100)区间 "
 fi


[root@xue ~]# sh grap.sh 
请输入你的分数(0-100: 111
请输入(0-100)区域指!

case 命令

image-20200717234617457

case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。

格式
case $ake in
    [a-z]|[A-Z])
       echo "你的字母"
        ;;
    [0-9])
       echo "你的字母"
        ;;
    ……
    *)
        echo "你的字母"
esac
[root@localhost ~]# vi pinghost.sh 
read -p "请输入(0-100) 成绩: " score
case $score in
 8[5-9]|9[0-9]|100)
    echo "成绩优秀"
  ;;
 7[0-9]|8[0-4])
     echo "成绩良好"
  ;;
 6[0-9])
     echo "成绩合格"
  ;;
*)
    echo "成绩不合格"   
 esac

有趣小实验

竞速比赛10秒进决赛,分男子组和女子

[root@xue ~]# sh run.sh 
#!/bin/bash
#竞速比赛10秒进决赛,分男子组和女子组
read -p "请输入你的成绩" num
  if [ $num -ge 0 ]&&[ $num -le 10 ];then
  read -p  "请输入你的性别" sex
    if [ $sex = 男 ];then
       echo "成绩合格,进入男子组"
    elif [ $sex = 女 ];then
       echo "成绩合格,进入女子组 "
     else echo "请输入正确信息"
     fi
 else echo "成绩不及格,你被淘汰"
fi
[root@xue ~]# sh run.sh 
请输入你的成绩10
请输入你的性别男
成绩合格,进入男子组


猜你喜欢

转载自blog.csdn.net/weixin_47151717/article/details/107435577