Shell脚本编程规范

1. 条件测试操作

条件测试操作: test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1: test 条件表达式
格式2: [ 条件表达式 ]

1.1 文件测试

[ 操作符 文件或目录 ]
常用的测试操作符 
-d 测试是否为目录(Directory>)
 
-e 测试目录或文件是否存在(Exist)

-f 测试是否为文件(File)

-r 测试当前用户是否有权限读取
(Read)

-w 测试当前用户是否有权限读入
(Write)

-x 测试当前用户是否有权限执行
(eXcute)
[root@localhost ~]# [ -d /media/cdrom ]
[root@localhost ~]# echo $?  
1  ###条件不成立

[root@localhost ~]# [ -d /media ]
[root@localhost ~]# echo $?
0  ###条件成立

1.2 整数值比较

 [ 整数1 操作符 整数2 ]

常用的测试操作符

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

1.3 字符串比较

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

常用的测试操作符

= 字符串内容相同  

!=  字符串内容不同,!号表示相反的意思 

-z 字符串内容为空
[root@localhost ~]# [ 5 != 3 ] && echo "too"
too

1.4 逻辑测试

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

常用的测试操作符

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

2. 语句的结构

2.1 单分支结构

在这里插入图片描述
一个简单的单分支语句
判断挂载点目录,若不存在则自己创建

#!/bin/bash 
MOUNT_DIR="/media/cdrom"
if [ ! -d $MOUNT_DIR ]
then
mkdir -p $MOUNT_DIR
fi

2.2 双分支语句

双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是“坐视不管”地不执行任何操作
在这里插入图片描述
多分支if语句
判断目标主机是否存活,显示检测结果

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null 
if [ $? -eq 0 ]
then
  echo "Host $1 is up." 
else
  echo "Host $1 is down."
fi

2.3 多分支if语句

与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作,实际上等同于嵌套使用的 if 语句。
在这里插入图片描述
多分支if语句 判断分数范围,分出优秀,合格,不合格三档

#!/bin/bash
read -p "请输入您的分数(0-100): " GRADE 
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] then
echo "$GRADE 分,优秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] then
echo "$GRADE 分,合格!"
else
echo "$GRADE 分,不合格!"
fi

2.4 Case语句结构

Case多分支结构

在这里插入图片描述

case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 2
;;
……
* )
默认命令序列
esac
 
#!/bin/bash
case "$1" in
start)
        echo -n " 正在开启防火墙... "
        systemctl start firewalld
        echo "OK"
        ;;
stop)
        echo -n " 正在关闭防火墙... "
        systemctl stop firewalld
      echo "OK"
        ;;
restart)
        $0 stop
        $0 start
        ;;
*)
        echo " 用法:$0 {start|stop|restart}"
esac

case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。
双分号“;;”表示命令序列的结束。
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号“|”表示或,如“A|B”。
最后的“)”表示默认模式,其中的相当于通配符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值