【shell腳本語法】判斷、流程控制語句

目錄

1、判斷用戶參數

1.1 文件判斷參數

 

 

PS:$?表明上一個命令的返回值,爲0表示正確執行,非0表示錯誤執行。詳情可參考我另外一篇博客:https://www.cnblogs.com/HeiDi-BoKe/p/11635473.htmlhtml

補充:邏輯語句有三個(與:&&,或:||,非:!)shell

實例:centos

1.2 比較運算符

 

 

 

 

 

實例:bash

# FreeMem=`free -m | grep Mem: | awk '{print $4}`
# echo $FreeMem

1.3 字符串比較符

 

 

 

 

實例:curl

 

 

2、流程控制語句

  下面介紹if、for、while、case這4中流程控制語句url

2.1 if條件判斷語句

  if語句分爲單分支,雙分支,多分支spa

2.1.1 if單分支語句

  單分支語句結構由if、then、fi關鍵詞組成,只在條件成立才執行預設的語句。即若是...那麼...3d

語法:code

 

if 條件表達式;then 命令 fi

 

 

 

實例:htm

# vi ifDemo.sh #!/bin/bash
DIR=/tmp/test/
if [ ! -e $DIR ];then echo "$DIR 目錄不存在" mkdir -p /tmp/test fi echo "$DIR 目錄已存在"

 

 

2.1.2 if雙分支語句

  雙分支語句結構由if、then、else、fi關鍵詞組成,判斷第一次的條件,若是匹配則執行,若是不匹配則執行else後面的命令。即若是...那麼...或者...那麼...

語法:

if 條件表達式;then 命令1 else 命令2 fi

 

 

實例:

# 驗證某臺主機是否在線(這裏使用從參數讀取ip和直接寫腳本中) # ping -c 指定次數,-i指定每一個數據發送的間隔 -W指定等待時間 # 方法一:從參數讀取ip # vi ifelseDemo.sh #!/bin/bash
if [ $# -eq 0 ];then
        echo "[usage] 請使用./ifelseDemo.sh ip地址" exit 0 fi ping -c 3 -i 0.2 -W 3 $1 &> /dev/null if [ $? -eq 0 ];then echo "$1 是通的"
else echo "$1 是不通的" fi #方法二:將ip直接寫腳本里 # vi ifelseDemo2.sh  #!/bin/bash
if `ping -c 3 106.53.73.200 &> /dev/null`;then echo "通的"
else echo "不通" fi

2.1.3 if多分支語句

  多分支語句結構由if、then、else、elif、fi關鍵詞組成,進行屢次條件匹配,匹配成功則執行對應的預設語句。即若是...那麼..若是...那麼...

語法:

if 條件語句1;then 命令1 elif 條件語句2;then 命令2 ... else 命令 fi

 

實例:

 

# vi grade.sh #!/bin/bash
read -p "請輸入你的成績(0-100): " GRADE if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ];then echo "[info] 您輸入的成績無效,請輸入(0-100)之間包括0和100的數" elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then echo "$GRADE is Execllent" elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ];then echo "$GRADE is Pass"
else echo "$GRADE is Fail" fi

 

 

 

2.2 for循環語句

  for語句能一次讀取多個信息,而後逐一對信息進行操做處理

 

語法:

語法一:
for
變量名 in 取值列表 do 命令 done
語法二:
for ((expr1;expr2;expr3));do 命令列表 done 

 

 

實例:

# 提早準備好用戶的文件
[root@VM_0_10_centos shellScript]# vi username.txt
test01 test02 test03 test04 test05 test06 # vi example.sh #!/bin/bash
read -p "請輸入用戶密碼:" PASSWD for UNAME in `cat username.txt` do id $UNAME &> /dev/null if [ $? -eq 0 ] then echo "$UNAME user is exists"
        else useradd $UNAME &> /dev/null echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null if [ $? -eq 0 ] then echo "$UNAME,Create success"
        else echo "$UNAME,Create failure" fi fi done
# 大於數字1小於數字10 # cat for.sh #!/bin/bash
for ((i=1;i<10;i++)) do echo $i done # 結果 # ./for.sh 
1
2
3
4
5
6
7
8
9
# 檢查多個主機是否存活 # cat ip.sh  #!/bin/bash
for IP in 106.53.73.200 182.254.184.102
do
    if `ping -c 2 $IP &> /dev/null` then echo -e "$IP OK"
    else echo "$IP NO" fi done # 結果 # ./ip.sh 
106.53.73.200 OK 182.254.184.102 OK
# 檢查多個域名是否能夠訪問 # cat http.sh  #!/bin/bash
URL="www.tourby.com www.baidu.com"
for i in $URL
do HTTP=`curl -i -m 10 -o /dev/null -s -w %{http_code}"\n" http://$i` if [ $HTTP -eq 200 -o $HTTP -eq 301 ] then echo "$i OK"
    else echo "$i NO" fi done # 結果 # ./http.sh 
www.tourby.com NO www.baidu.com OK

2.3 while語句

  while語句經過判斷條件的真假來決定是否執行命令。條件爲真則執行,爲假則結束循環。當表達式爲true時,會變成死循環

語法:

while 條件 do 命令 done

 

補充:

1)break:終止循環

2)continue:跳出當前循環,執行下一個循環

2.4 case條件語句

  用於選擇性的執行對應的命令

語法:

case 模塊名 in 模式1) 命令;; 模式2) 命令;; ... *) 命令 esac

 

實例:

# cat case.sh  #!/bin/bash
read -p "請輸入任意字符,並按Enter鍵確認:" KEY case $KEY in [a-z][A-Z]) echo "您輸入是字母。" ;; [0-9]) echo "您輸入是數字。" ;; *) echo "您輸入是空格,下劃線,功能鍵或其餘" esac
相關文章
相關標籤/搜索