1.if控制語句 ? if then fi ? ? if then else fi ? ?if then elif then elif then ······ else fi
if ?條件表達式
then 命令序列(滿足條件才執行) #注意,如果if與then(elif與then)寫在同一行,要用;隔開) ?
fi
if ?條件表達式;then?
命令序列
fi ?
if ?條件表達式
then ?命令序列1(條件滿足)
else ?命令序列1(條件不滿足)
fi
if ?條件表達式1
then ?命令序列1
elif 條件表達式2
then ?命令序列2
······
else ?命令序列(以上條件均不滿足)
fi
#!/bin/bash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# ex.sh
read -p "Enter your score(0-100): " GRADE ? ? ?# read命令
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ;then?
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then echo "$GRADE is pass"
elif [ $GRADE -gt 100 ]
then echo "$GRADE is error"
elif [ $GRADE -lt 0 ]
then echo "$GRADE is error"
else
echo "$GRADE is fail"
fi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bash ex.sh ? ?sh ex.sh ? ?./ex.sh
2.for控制語句
for 變量名 in 控制列表 ?
do
? ?命令序列
done
# vim name.txt ?#每行只有一個用戶
andy
barry
carl
sjd
#!/bin/bash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#user.sh
read -p "Enter the users password: " PASSWD ?#讀取密碼,所有用戶的密碼設置相同?
for NAME in `cat name.txt`
do
? ?id $NAME &> /dev/null
? ?if [ $? -eq 0 ]
? ?then?
? ? ? echo "Already exists"
? ?else?
? ? ? useradd $NAME &> /dev/null
? ? ? echo "$PASSWD" | passwd --stdin $NAME &> /dev/null
? ? ? if [ $? -eq 0 ]
? ? ? then?
? ? ? ? ?echo "$NAME, create success"
? ? ? else?
? ? ? ? ?echo "$NAME, create failure"
? ? ? fi
? ?fi
done ? ? ? ?bash user.sh ? tail -n 4 /etc/passwd ?查看新建用戶信息 ?for NAME in `cat name.txt` ?等
價于 for NAME in $(cat name.txt) ? 或者: EH= $(cat name.txt) ? for NAME in $EH
3.while控制語句
while 條件表達式
do
? ?命令序列
done
#!/bin/bash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#guess.sh
PRICE=$(expr $RANDOM % 1000) ? ? #或者 ?PRICE=`expr $RANDOM % 1000`
TIMES=0
echo "商品實際價格為0~999之間,猜猜看是多少?"
while true
do
? ?read -p "please input the value that you guess: " GU
? ?let TIMES++
? ?if [ $PRICE -eq $GU ]
? ?then echo "congratulations! your guess is accurate which is $PRICE"
? ? ? ? echo "the times that you guess is $TIMES"
? ? ? ? exit 0
? ?elif [ $GU -gt $PRICE ]
? ?then echo "your guess is bigger"
? ?else
? ? ? ? echo "your guess is lower"
? ?fi
done ? ? ? ?bash guess.sh ? ? ? ? $RANDOM為環境變量,系統隨機產生一個隨機數(范圍為0~32767)。使用
expr命令取得后面表達式的結果。exit 0 跳出while循環。
4.case控制語句
case 變量值 in
模式1)
? ?命令序列1
;;
模式2)
? ?命令序列2
;;
······
*)
? ?默認命令序列
esac
當變量指都不符合以上的模式時,則執行默認命令序列。
#!/bin/bash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#exw.sh
read -p "please input a character: " KU
case $KU in
[a-z])
? ?echo "你輸入的是字母!"
;;
[0-9])
? ?echo "你輸入的是數字!"
;;
*)
? ?echo "你輸入的是其它字符!"
esac ? ? ? [a-z] ?可以匹配所有大小寫字母,并不僅僅只是小寫字母,與上面矛盾(經試驗證明)
5.計劃任務服務程序
在指定的時間段自動啟用或停止某些服務或命令,從而實現運維的自動化。
一次性計劃任務:如今晚11:30開啟網站服務 ? at 時間 ? 設置一次性計劃任務 ? ?at -l 查看還未執行的一次性計劃任務 ? atrm 任務序號 刪除對應的還未執行的一次性計劃任務 ? ?# at 11:30 ? ?systemctl restart httpd ? Ctrl+D組合鍵來結束計劃任務的編寫 ? 這是采用交互的方式來實現一次性計劃任務,可以利用管道符來直接實現: echo "systemctl restart httpd" | at 11:30 ? ?即可 ? ?然后就可以用at -l命令查看
長期性計劃任務:如每周一3:25分把/home/luciusvorenus目錄打包備份為backup.tar.gz? ? ? ? ? crontab -e 創建、編輯計劃任務書 ? crontab -l 查看計劃任務 ? 注意:每一行只能寫一條計劃任務,且命令必須采用絕對路徑的方式書寫,如:/uer/bin/rm ? ? 可用whereis 或which命令查看 ?