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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Shell脚本中如何实现循环

發(fā)布時間:2023/12/19 综合教程 40 生活家
生活随笔 收集整理的這篇文章主要介紹了 Shell脚本中如何实现循环 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章主要介紹了Shell腳本中如何實現(xiàn)循環(huán),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

for 循環(huán)

Shell 腳本里最簡單的循環(huán)當屬 for 循環(huán),有編程基礎的朋友應該都有使用過 for 循環(huán)。最簡單的 for 循環(huán)如下所示,你只需將變量值依次寫在 in 后面即可:

#!/bin/bashfornumin1234doecho$numdone

如果要循環(huán)的內(nèi)容是字母表里的連續(xù)字母或連續(xù)數(shù)字,那么就可以按以下語法來寫腳本:

#!/bin/bashforxin{a..z}doecho$xdone

while 循環(huán)

除了 for 循環(huán),Shell 同樣提供了 while 循環(huán)。對于其它語言,如果你見過 for 循環(huán)卻沒見過 while 循環(huán),那么你一定是學了個假語言。

在 while 循環(huán)里,每進行一次循環(huán),條件都會被判斷一次,來確定本次循環(huán)是否該繼續(xù)。其實在循環(huán)次數(shù)比較少的情況下,for 循環(huán)與 while 循環(huán)效果差不多,但如果循環(huán)次數(shù)比較多,比如 10 萬次,那么 while 循環(huán)的優(yōu)勢就體現(xiàn)出來了。

#!/bin/bashn=1while[$n-le4]doecho$n((n++))done

循環(huán)套循環(huán)

像其它高級語言一樣,循環(huán)是可以互相嵌套的。比如下面這個例子,我們在 while 循環(huán)里再套入一個 for 循環(huán):

#!/bin/bashn=1while[$n-lt6]doforlin{a..d}doecho$n$ldone((n++))done

這個腳本執(zhí)行的結(jié)果應該是 1a, 1b, 1c, 1d, 2a, 2b ... 5d。

循環(huán)的內(nèi)容是變化的

我們上面提到的 for 循環(huán),循環(huán)變量要賦的值都列在了 in 后面的列表里了。但這樣靈活性太差,因為在很多情況下,循環(huán)變量要獲得的值是不固定的。

就比如,有個變量要獲得當前系統(tǒng)上所有用戶,但因為每臺電腦用戶都不一樣,我們根本就沒辦法將這個變量寫死。

在這種情況下,我們可以使用 ls 命令將 /home 目錄下所有用戶都列出來,然后用循環(huán)變量依次獲取它們。完整代碼如下:

#!/bin/bashforuserin`ls/home`doecho$userdone

當然,除了 ls ,Shell 還支持其它命令。比如我們可以使用 date 命令獲取當前系統(tǒng)時間,再依次打印出來:

$forwordin`date`>do>echo$word>doneThuApr908:12:09CST2020

變量值檢查

我們在使用 while 循環(huán)時,經(jīng)常需要判斷一個變量的值是否大于或者小于某個數(shù)。有時候這個數(shù)也是用另一個變量來表示,那么我們就需要判斷這個變量的值是否是數(shù)字。有三種判斷方法:

#!/bin/bashecho-n"HowmanytimesshouldIsayhello?"readansif["$ans"-eq"$ans"];thenechook1fiif[[$ans=*[[:digit:]]*]];thenechook2fiif[["$ans"=~^[0-9]+$]];thenechook3fi

第一種方法看起來似乎是個廢話,但實際上,-eq 只能用于數(shù)值間判斷,如果是字符串則判斷不通過,所以這就保證了 ans 是個數(shù)值型變量。

第二種方法是直接使用 Shell 的通配符對變量進行判斷。

第三種方法就更直接了,使用正則表達式對變量進行判斷。

我們直接來看一個例子:

#!/bin/bashecho-n"HowmanytimesshouldIsayhello?"readansif["$ans"-eq"$ans"];thenn=1while[$n-le$ans]doechohello((n++))donefi

在這個腳本里,我將要循環(huán)的次數(shù)傳入到 ans 變量,然后腳本就具體打印幾次 hello 。為了保證我們傳入的內(nèi)容是數(shù)字,我們使用了 if [ "$ans" -eq "$ans" ] 語句來判斷。如果我們傳入的不是數(shù)字,則不會進入 while 循環(huán)。

循環(huán)輸出文本文件內(nèi)容

如果你想按行依次循環(huán)輸出文本文件的內(nèi)容,可以這樣操作:

#!/bin/bashecho-n"File>"readfilen=0whilereadline;do((n++))echo"$n:$line"done<$file

在這里,我們使用 read 命令將文本文件的內(nèi)容讀取存入 file 變量,然后再使用重定向(上述腳本最后一行)將 file 內(nèi)容依次傳入 while 循環(huán)處理再打印出來。

死循環(huán)

有時候我們需要一直永遠循環(huán)做某件事,那么我們就可以使用死循環(huán)。達到這個目的很簡單,只需使用 while true 即可。

#!/bin/bashwhiletruedoecho-n"Stillrunningat"datesleep1done

在以上這個腳本里,將每隔 1 秒打印一次 Still running at 具體時間 ,直到你按 Ctrl + C 終止這個腳本。

總結(jié)

以上是生活随笔為你收集整理的Shell脚本中如何实现循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。