Shell脚本 基本测试 if语句case语句

shell概述

在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程。
但是,单一的顺序结构使得脚本过于机械化,不够“智能”,难以处理更加领过的系统任务。

测试命令

测试表达是否成立,成立返回0,其他表示不成立
有两种方法
1、test 条件表达
2、[ 条件表达 ]

文件测试

d 测试是否为目录
-e 测试目录或文件是否存在
-f 测试是不是文件
-w 测试当前用户是否有权写入
-r 测试当前用户是否有权读取
-x 测试当前用户是否有权执行

[root@localhost /]# [ -d mulu ]
[root@localhost /]# echo $?
0
[root@localhost /]# test -d /mulu
[root@localhost /]# echo $?
0
[root@localhost /]# test -f /mulu
[root@localhost /]# echo $?
1
[root@localhost /]# [ -f mulu ]
[root@localhost /]# echo $?
1

数值比较

[ 整数1 操作 整数2 ]

常用的测试操作符

-eq 等于 Equal
-ne 不等于 Not Equal
-gt 大于 Greater Than
-lt 小雨 Leasser Than
-le 小于或等于 lesser or qual
-ge 大于或等于 greater or equal

注:仅能比较数值,若要比较字符,可以使用 “ == ”符号

数值比较

[root@localhost mulu]# FREE=$(free -m | grep Mem |awk '{print $4}')
[root@localhost mulu]# echo "$FREE"MB
2159MB

[root@localhost mulu]# vim neicun.sh
#!/bin/bash
FREE=$(free -m |grep "Mem" |awk '{print $4}')
#echo $FREE //测试用
if [ $FREE -ge 1000 ]
  then
    echo "内存够大,你还剩"$FREE"MB"
else
   echo  "内存不够了"
fi
[root@localhost mulu]# source neicun.sh 
内存够大,你还剩2151MB

字符串比较

[ 字符串1 符号 字符串2 ]
常用符号: = 字符串内容是否相同
!= 字符串内容不同,!表示取反

[root@localhost mulu]# [ 123 = 123 ]&&echo "相同"
相同

常用测试操作

[root@localhost mulu]# [ $LANG != "en.US" ] && echo "no"
no

逻辑测试

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

[root@localhost mulu]# [ -d /mulu ] && [ -e /mulu ] &&echo "成立"
成立
[root@localhost mulu]# [ -f /mulu ]||[ -d /mulu ]&&echo "成立"
成立

IF语句

单分支结构

if 条件
then 命令
fi 结尾
在这里插入图片描述

[root@localhost mulu]# vi dxh.sh
#!/bin/bash
read -p "请输入一个十以内的正整数" zhengshu
if [ $zhengshu -lt 10 ]
  then
    echo "你输入的是$zhengshu"
fi
[root@localhost mulu]# source dxh.sh 
请输入一个十以内的正整数5
你输入的是5

双分支结构

if条件
then 命令
else 密令序列
fi
在这里插入图片描述

[root@localhost mulu]# vim sfz.sh
#!/bin/bash
read -p "请输入一个正整数" zzs
yushu=`expr $zzs % 2`
if [ $yushu -eq 0 ]
  then
   echo "你输入的是双数"
else
  echo "你输入的是单数"
fi
[root@localhost mulu]# source sfz.sh 
请输入一个正整数5
你输入的是单数
[root@localhost mulu]# source sfz.sh 
请输入一个正整数6
你输入的是双数

多分支结构

在这里插入图片描述

[root@localhost mulu]# vim dfz.sh

#!/bin/bash
read -p "请输入你的成绩" cj
if [ $cj -ge 90 ]&&[ $cj -le 100 ]
 then
  echo "你的成绩优秀"
elif [ $cj -lt 90 ]&&[ $cj -ge 70 ]
 then
  echo "你的成绩良好"
elif [ $cj -lt 70 ]&&[ $cj -ge 60 ]
 then
  echo "你的成绩及格"
elif [ $cj -lt 60 ]&&[ $cj -ge 0 ]
 then
  echo "你成绩……继续努力"
else
  echo "请端正你的态度"
fi
[root@localhost mulu]# source dfz.sh 
请输入你的成绩90
你的成绩优秀
[root@localhost mulu]# source dfz.sh 
请输入你的成绩80
你的成绩良好
[root@localhost mulu]# source dfz.sh 
请输入你的成绩60
你的成绩及格
[root@localhost mulu]# source dfz.sh 
请输入你的成绩40
你成绩……继续努力
[root@localhost mulu]# source dfz.sh 
请输入你的成绩110
请端正你的态度

CASE多分支

在这里插入图片描述

[root@localhost mulu]# vim pb.sh 
#!/bin/bash
read -p "你的跑步时间:" sj
case "$sj" in
 [0-9]|10)
  echo "恭喜"  
read -p "你的性别:" se

case "$se" in
  nan)
  echo "男子组决赛"
  ;;
  nv)
  echo "女子组决赛"
  ;;
  *)
  echo "请正视你的性别" 
esac
;;

*)
 echo "出局"
esac

[root@localhost mulu]# source pb.sh 
你的跑步时间:8
恭喜
你的性别:nan
男子组决赛
[root@localhost mulu]# source pb.sh 
你的跑步时间:9
恭喜
你的性别:nv
女子组决赛
[root@localhost mulu]# source pb.sh 
你的跑步时间:12
出局

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/107391078