👨?🎓博主簡介
??🏅云計算領域優質創作者
??🏅華為云開發者社區專家博主
??🏅阿里云開發者社區專家博主
💊交流社區:運維交流社區 歡迎大家的加入!
🐋 希望大家多多支持,我們一起進步!😄
🎉如果文章對你有幫助的話,歡迎 點贊 👍🏻 評論 💬 收藏 ?? 加關注+💗
文章目錄
- 🍁 if 判斷
- 🍁 if 判斷格式:
- 🍁 if 判斷實例:
- 🍃 單條件判斷實例:判斷是否為整數
- 🍃 多條件判斷實例:成績及格否
- 🍁 for 循環
- 🍁 for 循環格式:
- 🍁 for 循環實例:
- 🍃 需求1:打印10以內的偶數-->能被2整除,除2余數為0
- 🍃 需求2:循環創建文件cs{1..100}
- 🍃 需求3:從變量中取遍歷的值
- 🍃 需求4:從命令中取值
- 🍃 需求5:for循環自增自減
- 🍃 需求5.1:批量創建cs1-cs10用戶
- 🍃 需求5.2:輸出數字 a 自增、 a自增、 a自增、b自減
- 🍃 需求5.3:循環20次zabbix調用
- 🍃 需求6:批量創建用戶,密碼默認為123456
- 🍁 while 循環
- 🍁 while 循環格式:
- 🍁 while 循環實例:
- 🍃 需求1:計算1到100正整數的和
- 🍃 需求2:批量創建用戶,密碼默認為123456
- 🍃 需求3:提示用戶輸入字符,如果是小寫就把字母全部變為大寫,如果是quit則退出腳本
- 🍃 需求4:無限循環執行zabbix_get調用命令
- 🍁 case 循環判斷
- 🍁 case 循環判斷格式:
- 🍁 case 循環判斷實例:
- 🍃 nginx服務啟停腳本:函數 + case
- 相關文章:
🍁 if 判斷
🍁 if 判斷格式:
#單條件判斷
if 條件測試;then執行代碼
fiif 條件測試;then執行代碼
eles執行代碼
fi#多條件判斷
if 條件測試;then執行代碼
elif 條件測試;then執行代碼
eles執行代碼
fi
🍁 if 判斷實例:
🍃 單條件判斷實例:判斷是否為整數
#!/bin/bashread -p "please input a number:" numexpr 10 + $num &>/dev/null
if [ $? -eq 0 ];thenecho "${num}是整數"
elseecho "${num}不是整數"
fi
🍃 多條件判斷實例:成績及格否
對輸入成績做判斷:
如果成績小于60;那么打印不及格
如果60>=成績<80;那么打印及格
如果80>=成績<90;那么打印良好
如果90>=成績<=100;那么打印優秀
否則請輸入0-100的整數
結尾
#!/bin/bashread -p "please input is results:" results
expr 10 + $results &>/dev/null
if [ $? -ne 0 ];thenecho "${results}不是合法整數"exit 1
fi
if [ ${results} -lt 60 ];thenecho "不及格"
elif [ ${results} -ge 60 ] && [ ${results} -lt 80 ];thenecho "及格"
elif [ ${results} -ge 80 ] && [ ${results} -lt 90 ];thenecho "良好"
elif [ ${results} -ge 90 ] && [ ${results} -le 100 ];thenecho "優秀"
elseecho "請輸入0-100之間合法的整數,您輸入的是:${results}"
fi
🍁 for 循環
🍁 for 循環格式:
for 變量 in 取值列表;do執行代碼
donefor 變量 in 取值列表
do執行代碼
donefor (( i=1;i<20;i++ ));do執行代碼;(表示循環20次執行代碼)
done
取值列表中的值都將被歷遍
🍁 for 循環實例:
🍃 需求1:打印10以內的偶數–>能被2整除,除2余數為0
#!/bin/bash#{起始數字..終止數字..步長} 默認步長為1
for i in {2..10..2};doecho $i
done
continue 跳過當前循環
break 終止當前循環
exit 退出腳本,同時可以指定退出時的狀態碼
seq [起始位置(不指定默認是1)] 終止位置
-s 指定分隔符
-w 補齊相同寬度
🍃 需求2:循環創建文件cs{1…100}
#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )text=$DIR/for[ ! -d $text ] && mkdir $textfor I in {1..100};dotouch ${text}/cs$I
done#其實直接用touch也可以創建,這里只為了演示
#touch cs{1..100}
#會在當前目錄創建cs{1..100}文件
🍃 需求3:從變量中取遍歷的值
#!/bin/bashList="file1 file2 file3"
for I in $List;doecho "當前文件為 ${I}"
done
🍃 需求4:從命令中取值
#!/bin/bashfor I in $(cat /etc/passwd)
doecho "$I"
done
🍃 需求5:for循環自增自減
🍃 需求5.1:批量創建cs1-cs10用戶
#!/bin/bashfor (( i=1;i<=10;i++ ));douseradd cs_$i
done
如果需要刪除這些用戶,可在腳本中把useradd
改為userdel -r
即可;
🍃 需求5.2:輸出數字 a 自增、 a自增、 a自增、b自減
#!/bin/bashfor (( a=1,b=9;a<=10;a++,b-- ));doecho "num is $a $b"
done
a的初始值為1;b的初始值為9;
a在前,所以寫a最大不能>10;
a每次加1,直至加到10;b每次-1,直至a停止。
🍃 需求5.3:循環20次zabbix調用
#!/bin/bashfor (( i=1;i<=20;i++ ));docs=$(zabbix_get -s 172.16.10.1 -k cs)echo "調用$i次!調用結果為:$cs"echo "------------------------------------------------------------------------"
done
🍃 需求6:批量創建用戶,密碼默認為123456
#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )#創建一個用戶組
groupadd mailgroup 2>/dev/nullfor i in $(cat $DIR/a.txt);douseradd -g mailgroup -s /sbin/nologin $i 2>/dev/nullecho 123456 | passwd --stdin $i
done
a.txt 中名字可以隨便起;
🍁 while 循環
🍁 while 循環格式:
while [條件測試];do執行代碼
donewhile [條件測試]
do執行代碼
donewhile true;do執行代碼(無限循環此命令,每次循環停留兩秒)sleep 2
done
條件測試比如:$i -le 5
當條件成立時,執行循環,不成立,結束循環。
如果while中的條件永遠成立,會一直循環,成為死循環。
🍁 while 循環實例:
🍃 需求1:計算1到100正整數的和
#!/bin/bashdeclare -i I=1declare -i SUM=0while [ $I -le 100 ]; dolet SUM+=$Ilet I++
doneecho "$SUM"
在執行腳本時加個 -x
可查看執行過程
🍃 需求2:批量創建用戶,密碼默認為123456
#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )#創建一個用戶組
groupadd mailgroup 2>/dev/nullwhile read username; douseradd -g mailgroup -s /sbin/nologin $username 2>/dev/nullecho 123456 | passwd --stdin $username
done < $DIR/username.txt
username.txt
lcy
cs
abc
abb
abd
abe
abf
批量刪除用戶
#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )#創建一個用戶組
groupadd mailgroup 2>/dev/nullcat $DIR/username.txt | while read username; douserdel -r $username
done
🍃 需求3:提示用戶輸入字符,如果是小寫就把字母全部變為大寫,如果是quit則退出腳本
#!/bin/bash#如果輸入的不是quit則把小寫字母全部換成大寫字母,如果輸入的是quit則退出循環,否則會一直循環;
read -p "Please enter content:" SCRIPTwhile [ $SCRIPT != "quit" ]; doecho "$SCRIPT" | tr 'a-z' 'A-Z'read -p "Please enter content:" SCRIPT
done
字母寫的小寫,全部會替換為大寫,數字和其他字符不會被替換;
🍃 需求4:無限循環執行zabbix_get調用命令
#!/bin/bashwhile true;docs=$(zabbix_get -s 172.16.10.1 -k cs)echo "結果為$cs"echo "----------------------------------------"sleep 2
done
🍁 case 循環判斷
🍁 case 循環判斷格式:
case 變量 in條件或值1)執行代碼
;;條件或值2)執行代碼
;;條件或值3)執行代碼
;;*)執行代碼
esac
🍁 case 循環判斷實例:
🍃 nginx服務啟停腳本:函數 + case
#!/bin/bashngstart (){/usr/local/nginx/sbin/nginx
}ngstop (){/usr/local/nginx/sbin/nginx -s stop
}ngrestart (){/usr/local/nginx/sbin/nginx -s reload
}ngstatus (){/usr/local/nginx/sbin/nginx -s status
}#nginx服務器起停的腳本case $1 instart)echo "啟動nginx服務"ngstart
;;stop)echo "關閉nginx服務"ngstop
;;restart)echo "重啟nginx服務"
# $0 stop
# $0 startngrestart
;;status)echo "查看nginx服務狀態"ngstatus
;;*) echo "USage: /etc/init.d/nginx {start|stop|restart}"
esac
推薦一個使用case寫的啟動腳本,包含啟動,停止及重啟監測狀態:linux啟動、關閉、重啟jar包shell腳本
相關文章:
文章名 | 文章地址 |
---|---|
【Linux】 shell腳本的創建及使用 《入門到實踐》詳解[?建議收藏!!?] | https://liucy.blog.csdn.net/article/details/130111812 |
【Linux】Shell腳本之函數的操作+實戰詳解[?建議收藏!!?] | https://liucy.blog.csdn.net/article/details/130387377 |
【Linux】Shell腳本之流程控制語句 if判斷、for循環、while循環、case循環判斷 + 實戰詳解[?建議收藏!!?] | https://liucy.blog.csdn.net/article/details/130387523 |