Shell脚本: if,case判断结构,开启小白的shell之路(二)

条件测试

■test命令

●测试表达式是否成立,若成立返回O,否则返回其他数值

■test命令格式

格式1: test 条件表达式

格式2:【条件表达式】

■文件测试

●操作符 文件或目录

■常用的测试操作符

-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-r:测试当前用户是否有权限读取(Réead)

在这里插入图片描述

■格式和案列

[操作符] 文件或目录

■常用的测试操作符

[root@localhost~]# [ -d lmedialcdrom ]

[root@localhost~]# echo $?
0
[root@localhost~]# [ -d  /medialcdrom/Server ]

[root@localhost~]# echo $?
1

[root@localhost~]# [ -d /dev/cdrom ]  && echo "YES"
YES


返回  0  表示条件成立
返回  1  表示条件不成立
&& : 逻辑与,“而且”的意思

■整数值比较

■格式

[ 整数1 操作符 整数2 ]

■常用的测试操作符

-eq:等于 (Equal)
-ne:不等于 (Not Equal)
-gt:大于 (Greater Than)
-lt:小于 (Lesser Than)
-le:小于或等于 (Lesser or Equal)
-ge:大于或等于 (Greater or Equal)

■常用的测试操作符举列

用户数是否>5
[root@localhost~]# who | wc -l
7

[root@localhost~]#[ $(who | wc -l) -gt 5 ]  && echo "Too many."
Too many.

[root@localhost~]#[ $(who | wc -l) -ge 10 ] && echo "> =10."
用户数是否>=10?

[root@localhost~]# FreeCC=$(free -m | grep "Mem: " | awk '{print $6}')

[root@localhost~]#[ $FreecC -lt 1024 ]  &&  echo ${FreeCC}MB
275MB

空闲内存是否<1024MB?



■字符串比较

■格式

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

■常用的测试操作符

=:字符串内容相同
-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 "覆盖"
覆盖

测试读入的字符串是否为yes

■逻辑测试

■格式

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

■常用的测试操作符

-a 或 && :逻辑与,“而且”的意思
-o 或 ll :逻辑或,“或者”的意思
!:逻辑否

■举列

[root@localhost opt]# [ -d /etc ]&& [ -r /etc ] && echo "you can open /etc this diretory"
you can open /etc this diretory
[root@localhost opt]# [ -d /etc ]|| [ -d /home ]&& echo "ok"
ok
[root@localhost opt]# [ -r /etc ]|| [ -d /home ]&& echo "ok"
ok
[root@localhost opt]# [ -r /etc ]|| [ -r /home ]&& echo "ok"
ok
[root@localhost opt]# [ -f /etc ]|| [ -f /home ]&& echo "ok"
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ ! -f /etc ]|| [ -f /home ]&& echo "ok"
ok


if语句的结构

■if单分支结构

在这里插入图片描述

使用方法

[root@localhost opt]# vi  chkdir.sh
#!/bin/bash
MOUNT_DIR="/opt/cdrom"
if   [ ! -d $MOUNT_DIR ]
then
echo "创建 "$MOUNT_DIR”>>/opt/1.txt
echo "创建$MOUNT_DIR"
mkdir -p  $MOUNT

■if双分支结构

在这里插入图片描述

使用方法

使用if多分支去ping一下

[root@localhost shell]# vi if2.sh         
ping -c 3 -i 0.2 -W 3 $1 &> /opt/10.txt 
if [ $? -eq 0 ]
then
 echo "可ping通"
else
 echo "状态不通"
fi
-c 指定发送几个包
-i 间隔几秒
-W 超时几秒
$? 上一次命令执行后返回的状态,如果为0则成功,为其他则失败
$1 位置参数  ping$1 参数发送三个包,间隔0.2秒,超时3秒
如果ping的是通的,则打印可ping通,
如果不能通,则打印状态不通
验证
[root@localhost shell]# ./if2.sh 20.0.0.10
状态不通
[root@localhost shell]# ./if2.sh 20.0.0.2
可ping通


我这里用的是NAT虚拟机网卡,网关为20.0.0.2

■if多分支

在这里插入图片描述
在这里插入图片描述

使用方法

[root@localhost shell]# vi if2.sh
#!/bin/bash
read -p "请输入您的分数(0-100): " A         read:把你输入的值,附加给A使用
if [ $A -ge 85 ] && [ $A -le 100 ]
then
        echo "$A分,优秀"
elif [ $A -ge 70 ] && [ $A -le 84 ]
then
        echo "$A分,合格"
elif [ $A -ge 0 ] && [ $A -le 69 ]
then
        echo "$A分,不合格"
else
        echo "请输入正确的数字,否则无效"
fi
验证
[root@localhost shell]# ./if2.sh 
请输入您的分数(0-100): 90
90分,优秀
[root@localhost shell]# ./if2.sh
请输入您的分数(0-100): 30
30分,不合格
[root@localhost shell]# ./if2.sh
请输入您的分数(0-100): 84
84分,合格
[root@localhost shell]# ./if2.sh
请输入您的分数(0-100): x
请输入正确的数字,否则无效
[root@localhost shell]

■case多分支

在这里插入图片描述

使用方法

[root@localhost ~]# vi 2.sh
read -p "输入一个字符,并按回车键确认: " KEY
case "$KEY" in
   [a-z]|[A-Z])
        echo 您输入的是字母
        ;;
   [0-9])
        echo 输的是数字 
        ;;
   *)
        echo 输入的是其他 
esac
[root@localhost shell]# ./if2.sh 
输入一个字符,可以是[A-Z][0-9],回车确认:a
您输入的是字母
[root@localhost shell]# ./if2.sh
输入一个字符,可以是[A-Z][0-9],回车确认:3
您输入的是数字
[root@localhost shell]# ./if2.sh 
输入一个字符,可以是[A-Z][0-9],回车确认: 
输入的是其他

最后给大家科普一个反撇号(

反撇号主要用于命令替换,允许讲执行某个命令的屏幕输出结果复制给变量,反撇号括起来的范围必须是能够执行的命令行,否则会出错

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值