日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bash之流程控制for循环及bash命令退出和退出状态码

發布時間:2025/4/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bash之流程控制for循环及bash命令退出和退出状态码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、for循環定義:

????????將一段代碼反復執行;----->進入條件;------> 退出條件;


二、語法格式:

for 變量名 in LIST

do?

statement1

...

done


for VAR in LIST; do statement1; statement2; ...; done


三、LIST:列表

定義:包含至少一個元素的字符串集合;

LIST的生成方法:

(1) 直接給出;

(2) 數值列表:

(a) {start..end},例如:{1..10}

(b) seq [start [step]] end

(3) 返回列表的命令;

(4) globbing;

(5) 變量引用;

$*, $@


例如:添加3個用戶,user1, user2, user3; 密碼同用戶名;

#?vim?user.sh #!/bin/bash # for?username?in?user1?user2?user3?;?douseradd?$usernameecho?$username?|passwd?--stdin?$username done #?bash?-n?user.sh? #?bash?-x?user.sh


例如:添加9個用戶,user101...user109;密碼同用戶名;

#!/bin/bash # useradd?user10$n for?n?in?{1..9};?doecho?user10$n?|?passwd?--stdin?user10$n?&>/dev/null??? done&>/dev/null?省略報告是否創建成功失敗信息


四、for循環練習題:

練習1:于/tmp/test目錄中創建10個空文件f1,.., f10;

#!/bin/bash # for?n?in?{1..10};?domkdir?/tmp/test/file$n?&>/dev/null done


練習2:寫一個腳本,

(1) 創建"/tmp/test-當前時間"目錄;

(2) 添加10用戶tuser1,.., tuser10;?

(3) 在"/tmp/test-當前時間"目錄中,創建10空文件f1,...,f10;

(4) 修改f1的屬主為tuser1;依次類推;

#!/bin/bash # directory=/tmp/test-`date?+%H-%N-%S` mkdir?$directory for?i?in?{1..10};do? useradd?tuser$i touch?$directory/f$i chown?tuser$i?$directory/f$i done


練習3:求100以內所有正整數之和;

#!/bin/bash # sum=0 # for?n?in?{1..100};?dosum=$[$n+$sum] done注意:sum=0也可表示為declare?-i?sum=0let?sum+=$i?也表示sum自身與&i相加


練習4:求100以內所有偶數之和;以及所有奇數之和;

#!/bin/bash # ODD_SUM=0 # EVEN_SUM=0 # ODD_LIST=$(seq?1?2?100) EVEN_LIST=$(seq?0?2?100) # for?n?in?$ODD_LIST;?doODD_SUM=$[$ODD_SUM+$n] done # echo?"一到一百的奇數和為:$ODD_SUM" # for?m?in?$EVEN_LIST;?doEVEN_SUM=$[$EVEN_SUM+$m] done # echo?"一到一百的偶數和為:$EVEN_SUM"



練習5:計算當前系統上所有用戶ID之和;

#!/bin/bash # UID_SUM=0 UID_LIST=$(cut?-d':'?-f3?/etc/passwd) # for?n?in?$UID_LIST;?doUID_SUM=$[$UID_SUM+$n] done echo?"The?all?user?ID?sum?is?'$UID_SUM'"


練習6:傳遞參數(文本文件路徑)給腳本,統計所有文件的空白行數之和;顯示此次共對多少文件進行統計;

#!/bin/bash # File_Sum=$# echo?"the?sum?of?file?is?$File_Sum" for?i?in?$*;?doSpace_Sum=$(grep?'^[[:space:]]*$'?$i?|?wc?-l)SPACE_ALL=$[$SPACE_ALL+$Space_Sum] done echo?"the?sum?of?space?is?$SPACE_ALL" #??$*可以直接生成文件列表


練習7:顯示當前系統所有默認shell為bash的用戶的總數;并統計此些用戶ID之和;

#!/bin/bash # BASH_SUM=0 BASH_SUM=$(grep?'bash$'?/etc/passwd?|?wc?-l) echo?"the?sum?of?bash?is?$BASH_SUM" UID_SUM=0 UID_LIST=$(grep?'bash$'?/etc/passwd?|?cut?-d':'?-f3) for?n?in?$UID_LIST;?doUID_SUM=$[$UID_SUM+$n] done echo?"the?sum?of?BID?is?$UID_SUM" grep?'bash$'?/etc/passwd?|?cut?-d':'?-f3



練習8:寫一個腳本

(1) 假設某目錄下分別有K##和S##開頭文件若干;(/etc/rc.d/rc3.d/為例;)

(2) 給此目錄下的所有以K開頭的文件,傳遞一個stop參數;(echo "/etc/rc.d/rc3.d/atd stop")

(3) 給此目錄下的所有以S開頭的文件,傳遞一個start參數;

#!/bin/bash for?file?in?/etc/rc.d/rc3.d/K*;?doecho?'$file?stop'?  another?way:?echo?-e?"$file?stop...........[\033[34mOK\033[0m]"?則后面會顯示藍色OK done for?file?in?/etc/rc.d/rc3.d/S*;?doecho?'$file?start' done




練習9:寫一個腳本

(1) 使用Ping命令探測172.16.100.X主機的在線狀態;

#!/bin/bashfor?host?in?{1..254};?doping?-c1?-w1?172.16.100.$host done


練習10:寫一個腳本

(1) 給一個腳本傳遞一些用戶名;

(2) 計算此些用戶所屬基本組的id之和;

#!/bin/bashdeclare?-i?GSUM=0 for?username?in?$1;?doGSUM=$[$GSUM+`id?-g?$username`] done echo?the?GID_SUM?is?$GSUM



五、for的幾種特殊情況:

(1) for省略,會自動獲取腳本參數列表;

(2) C編程風格:

for ((變量賦值;循環條件;修正表達式)); do

CMD1

CMD2

done

例如:求100以內偶數之和

#!/bin/bash declare?-i?evensum=0 for?((i=2;i<=100;i+=2));do let?evensum+=$i done echo?$evensum


(3) 循環嵌套:

for i in [LIST1]; do

CMD1

for j in [LIST2]; do

CMD2

...

done

done


練習11:寫一個腳本

(1) ping 172.16.X.Y內的所有主機;

172.16.0-255.1-254

#!/bin/bash for?i?in?{0..255};?dofor?j?in?{1..254};?doping?-c1?-w1?172.16.$i.$jdone done


練習12:寫個腳本

(1) 傳遞一些目錄給腳本;

(2) 逐個顯示每個目錄下的所有一級文件的內容類型;

(3) 統計一個有多少個目錄;一共顯示了多少個文件;

#!/bin/bash # declare?-i?dirs=0 declare?-i?files=0 for?d?in?$*;?dofor?f?in?$d/*;?dofile?$flet?files++donelet?dirs++ done echo?"Directories:?$dirs." echo?"Files:?$files."解析:let?dirs++?為計數器,就是循環多少次,計數為多少;等價于dir=[$dirs+1]


六、bash命令退出和退出狀態碼

命令在bash中執行結束退出時,其執行成功與否可通過退出狀態碼來記錄;


腳本的退出狀態碼取決于執行的最后一條命令;自定義退出狀態碼:

exit #


成功:0

失敗:1-255


注意:提前退出腳本,也可使用exit命令實現;

例如:以某條命令的狀態作為腳本的退出狀態碼

#!/bin/bash # ls?/varr retval=$? echo?"hello" exit?$retval 解析:retval為此條命令的輸出狀態碼



轉載于:https://blog.51cto.com/burgess8909/1673133

總結

以上是生活随笔為你收集整理的bash之流程控制for循环及bash命令退出和退出状态码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。