②shell流程控制语句if

1.单分支结构

#!/bin/bash
which ls
if [ $? = 0 ];then
   echo ok
fi

2.双分支结构

#!/bin/bash
if grep -qs "CentOS" /etc/os-release;then
   echo "OS is centos"
else
   echo "OS not centos"
fi   

双分支套双分支

#!/bin/bash
if [ $EUID -eq 0 ];then
	if [ -f /var/log/message ];then
		tail -n 100  /var/log/message >/var/log/message_bak
		cat /var/log/message_bak>/var/log/message
	         echo "is ok" && exit
	else
		 echo '/var/log/message not exiting'
	fi
else 
    echo "USER IS NOT root"
     exit
fi

3.多分支结构

if [ 有房 ];then
   嫁
elif [ 有车 ];then
   嫁
elif [ 有钱 ];then  
   嫁
else 
  不嫁
fi

#!/bin/bash
read -p "请输入你有多少钱: " money
read -p "请输入你有几套房子: " houses

if [ $money -ge 1000000 ]   ### ge 表示大于
  then
     echo "有钱我嫁给你"
elif [ $houses -ge 3 ]
  then
     echo "有房我嫁给你"
else
     echo "我考虑下"
fi

4.if语句中的文件比对

参数 说明 示例
-e 如果条件或目录存在则为真 -e file
-s 如果文件存在且至少有一个字符则为真 -s file
-d 如果文件存在且为目录则为真 -d file
-f 如果文件存在且为普通文件则为真 -f file
-r 如果文件存在可读则为真 -r file
-w 如果文件存在可写则为真 -w file
-x 如果文件存在可执行则为真 -x file
1)-e file/dir
#!/bin/bash
if [ -e "$1" ];then
echo "file is exiting"
else
   echo "file is not exiting"
fi

也可以写成
[root@famous-machine-1 ~]# [ -e /etc/hosts ]&& echo 'file exiting '||echo 'file no exiting'
file exiting 
[root@famous-machine-1 ~]# [ -e /etc/hosts11 ]&& echo 'file exiting '||echo 'file no exiting'
file no exiting
5.if整数比对
-eq 等于则条件为真 1 -eq 1
-ne 不等于则条件为真 1 -ne 2
-gt 大于则条件为真 2 -gt 1
-ge 大于或等于则条件为真 2 -ge 2
-lt 小于则条件为真 1 -lt 2
-le 小于等于则条件为真 1 -le 1
< 小于(需要双括号) 如:((“ a " < " a" < " a"<"b”))
<= 小于等于(需要双括号) 如:((“ a " < = " a" <= " a"<="b”))
1)查找服务是否运行的脚本
#!/bin/bash
if [ $# -ne 1 ];then
  echo "请输入一个参数!" && exit
fi

systemctl status $1 >>/dev/null
if [ $? -eq 0 ];then
  echo "$1 server is running!"
else
  echo "$1 server no running!"
fi

2)磁盘使用率超过80%报警

cat test.sh 
#!/bin/bash
Disk_Use=$(df -h|grep /$ |awk '{print $5}')
if [ ${Disk_Use//%} -gt 80 ];then
   echo "disk_use is gt 80%"
else 
   echo ' disk is ok '
fi

5.if字符串比较

参数 说明 示例
= 等于则条件为真 [ "$a" == "$a"]
!= 不等于则条件为真 [ "$a" != "$b"]
-z 字符串的长度为零则为真 [ -z $a ]
-n 字符串的长度不为空则为真 [ -n "$a" ]
str1>str2 str1大于str2为真 str1 > str2
str1<str2 str1小于str2为真 str1 < str2

6.多条件比对

-a and

[root@famous-machine-1 ~]# [ 1 -eq 1 -a 1 -ne 2 ]&& echo $?   #两个条件都必须满足
0

root@rongbiz-Super-Server:~# cat test.sh 
#!/bin/bash
read -p "请输入考试成绩: " cj
if [ $cj -ge 0 -a $cj -lt 60 ];then
	echo "补考!"
elif [ $cj -ge 60 -a $cj -lt 80 ];then
	echo "合格!"
elif [ $cj -ge 80 -a $cj -le 100 ];then
	echo "优秀"
else 
	echo "请输入合规数字!"
fi

-o or

[root@famous-machine-1 ~]# [ 1 -eq 1 -o 2 -ne 2 ]&& echo $?   #两个条件满足一个就行
0

6.if正则比对

必须 [[]]

#!/bin/bash
read -p "请输入考试成绩: " cj
if [[ ${cj} =~ ^[0-9]+$ ]];then
      echo "$cj"  
else 
	  echo "input error"
fi

1)添加一个用户 名称开通必须是英文字符串 后缀必须是数字 例如:yangtao416

#!/bin/bash
read -p "请输入一个前缀: " cj
if [[ ! $cj =~ ^[a-Z]+$ ]];then
     echo "输入错误!" && exit
fi

read -p "请输入一个数字后缀: " num
if [[ $num =~ ^[0-9]+$ ]];then
	id ${cj}${num}
	if [ $? -ne 0 ];then
	         useradd ${cj}${num}
	         echo "create user ${cj}${num} OK"
        else
	         echo " ${cj}${num}  is exiting"
	         exit
       fi
fi
posted @ 2021-05-24 15:06  老夫聊发少年狂88  阅读(79)  评论(0编辑  收藏  举报