shell编程之循环语句
shell編程之循環(huán)語句
文章目錄
- shell編程之循環(huán)語句
- 一、for循環(huán)語句
- 1. for循環(huán)語法結(jié)構(gòu)
- ㈠ 列表循環(huán)
- 2. 應(yīng)用案例
- 二、while循環(huán)語句
- 1. while循環(huán)語法結(jié)構(gòu)
- 2. 應(yīng)用案例
- 三、until循環(huán)
- 1. until語法結(jié)構(gòu)
- 2. 應(yīng)用案例
一、for循環(huán)語句
關(guān)鍵詞:愛的魔力轉(zhuǎn)圈圈😇
1. for循環(huán)語法結(jié)構(gòu)
㈠ 列表循環(huán)
列表for循環(huán):用于將一組命令執(zhí)行已知的次數(shù)
- 基本語法格式
- 舉例說明
㈡ 不帶列表循環(huán)
不帶列表的for循環(huán)執(zhí)行時(shí) 由用戶指定參數(shù)和參數(shù)的個(gè)數(shù)
- 基本語法格式
- 舉例說明
㈢ 類C風(fēng)格的for循環(huán)
- 基本語法結(jié)構(gòu)
- 舉例說明
2. 應(yīng)用案例
㈠ 腳本計(jì)算1-100奇數(shù)和
① 思路
② 落地實(shí)現(xiàn)(條條大路通羅馬)
#!/bin/env bash # 計(jì)算1-100的奇數(shù)和 # 定義變量來保存奇數(shù)和 sum=0 #for循環(huán)遍歷1-100的奇數(shù),并且相加,把結(jié)果重新賦值給sum for i in {1..100..2}dolet sum=$sum+$idone#打印所有奇數(shù)的和 echo "1-100的奇數(shù)和是:$sum"方法1: #!/bin/bash sum=0 for i in {1..100..2}dosum=$[$i+$sum]done echo "1-100的奇數(shù)和為:$sum"方法2: #!/bin/bash sum=0 for ((i=1;i<=100;i+=2))dolet sum=$i+$sumdone echo "1-100的奇數(shù)和為:$sum"方法3: #!/bin/bash sum=0 for ((i=1;i<=100;i++))doif [ $[$i%2] -ne 0 ];thenlet sum=$sum+$ifi或者test $[$i%2] -ne 0 && let sum=$sum+$idone echo "1-100的奇數(shù)和為:$sum"方法4: sum=0 for ((i=1;i<=100;i++))doif [ $[$i%2] -eq 0 ];thencontinueelselet sum=$sum+$ifidone echo "1-100的奇數(shù)和為:$sum"#!/bin/bash sum=0 for ((i=1;i<=100;i++))dotest $[$i%2] -eq 0 && continue || let sum=sum+$idone echo "1-100的奇數(shù)和是:$sum"③ 循環(huán)控制語句
循環(huán)體: do…done之間的內(nèi)容
- continue:繼續(xù);表示循環(huán)體內(nèi)下面的代碼不執(zhí)行,重新開始下一次循環(huán)
- break:打斷;馬上停止執(zhí)行本次循環(huán),執(zhí)行循環(huán)體后面的代碼
- exit:表示直接跳出程序
㈡ 判斷所輸整數(shù)是否為質(zhì)數(shù)
質(zhì)數(shù)(素?cái)?shù)):只能被1和它本身整除的數(shù)叫質(zhì)數(shù)。
① 思路
② 落地實(shí)現(xiàn)
㈢ 批量創(chuàng)建用戶
需求:批量加5個(gè)新用戶,以u1到u5命名,并統(tǒng)一加一個(gè)新組,組名為class,統(tǒng)一改密碼為123
① 思路
② 落地實(shí)現(xiàn)
#!/bin/env bash #判斷class組是否存在 grep -w ^class /etc/group &>/dev/null test $? -ne 0 && groupadd class #循環(huán)創(chuàng)建用戶 for ((i=1;i<=5;i++))douseradd -G class u$iecho 123|passwd --stdin u$idone #用戶創(chuàng)建信息保存日志文件方法一: #!/bin/bash #判斷class組是否存在 grep -w class /etc/group &>/dev/null [ $? -ne 0 ] && groupadd class #批量創(chuàng)建5個(gè)用戶 for i in {1..5}douseradd -G class u$iecho 123|passwd --stdin u$idone方法二: #!/bin/bash #判斷class組是否存在 cut -d: -f1 /etc/group|grep -w class &>/dev/null [ $? -ne 0 ] && groupadd class #循環(huán)增加用戶,循環(huán)次數(shù)5次,for循環(huán),給用戶設(shè)定密碼 for ((i=1;i<=5;i++))douseradd u$i -G classecho 123|passwd --stdin u$idone方法三: #!/bin/bash grep -w class /etc/group &>/dev/null test $? -ne 0 && groupadd class 或者 groupadd class &>/dev/null for ((i=1;i<=5;i++))douseradd -G class u$i && echo 123|passwd --stdin u$idoneshell腳本并發(fā)
并行執(zhí)行: {程序}&表示將程序放到后臺并行執(zhí)行,如果需要等待程序執(zhí)行完畢再進(jìn)行下面內(nèi)容,需要加wait #!/bin/bash #定義變量 ip=10.1.1.1 #循環(huán)去ping主機(jī)的IP for ((i=1;i<=10;i++))do{ping -c1 $ip.$i &>/dev/nullif [ $? -eq 0 ];thenecho "$ip.$i is ok" >> /tmp/ip_up.txtelseecho "$ip.$i is down" >> /tmp/ip_down.txtfi}&done waitecho "ip is ok...." [root@server ~]# time ./ping.sh ip is ok... real 0m3.091s user 0m0.001s sys 0m0.008s二、while循環(huán)語句
特點(diǎn):條件為真就進(jìn)入循環(huán);條件為假就退出循環(huán)
1. while循環(huán)語法結(jié)構(gòu)
while 表達(dá)式docommand...donewhile [ 1 -eq 1 ] 或者 (( 1 > 2 ))docommandcommand...done循環(huán)打印1-5數(shù)字
FOR循環(huán)打印: for ((i=1;i<=5;i++))doecho $idonewhile循環(huán)打印: i=1 while [ $i -le 5 ]doecho $ilet i++done2. 應(yīng)用案例
㈠ 腳本計(jì)算1-50偶數(shù)和
#!/bin/env bash sum=0 for ((i=0;i<=50;i+=2))dolet sum=$sum+$i (let sum=sum+i)done echo "1-50的偶數(shù)和為:$sum"#!/bin/bash #定義變量 sum=0 i=2 #循環(huán)打印1-50的偶數(shù)和并且計(jì)算后重新賦值給sum while [ $i -le 50 ]dolet sum=$sum+$ilet i+=2 或者 $[$i+2]done #打印sum的值 echo "1-50的偶數(shù)和為:$sum"㈡ 腳本同步系統(tǒng)時(shí)間
① 具體需求
② 思路
③ 落地實(shí)現(xiàn)
#!/bin/env bash # 該腳本用于時(shí)間同步 NTP=10.1.1.1 count=0 while truedontpdate $NTP &>/dev/nullif [ $? -ne 0 ];thenecho "system date failed" |mail -s "check system date" root@localhostelselet count++if [ $count -eq 100 ];thenecho "systemc date success" |mail -s "check system date" root@localhost && count=0fifisleep 30done#!/bin/bash #定義變量 count=0 ntp_server=10.1.1.1 while truedordate -s $ntp-server &>/dev/nullif [ $? -ne 0 ];thenecho "system date failed" |mail -s 'check system date' root@localhostelselet count++if [ $[$count%100] -eq 0 ];thenecho "system date successfull" |mail -s 'check system date' root@localhost &&count=0fifisleep 3done三、until循環(huán)
特點(diǎn):條件為假就進(jìn)入循環(huán);條件為真就退出循環(huán)
1. until語法結(jié)構(gòu)
until expression [ 1 -eq 1 ] (( 1 >= 1 ))docommandcommand...done打印1-5數(shù)字
i=1 while [ $i -le 5 ]doecho $ilet i++donei=1 until [ $i -gt 5 ]doecho $ilet i++done2. 應(yīng)用案例
㈠ 具體需求
㈡ 思路
㈢ 落地實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的shell编程之循环语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯2020校园招聘----逛街
- 下一篇: shell编程之随机数和嵌套循环