最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell?循環(huán)命令詳解

 更新時(shí)間:2022年10月12日 16:45:51   作者:zhbi98  
這篇文章給大家介紹了shell?循環(huán)命令的相關(guān)知識(shí),包括for命令使用,c?風(fēng)格?for?命令及while?命令等等,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1. for 命令

1.1 for 命令的使用

bash shell 提供了 for 命令,可以創(chuàng)建一個(gè)遍歷一系列值的循環(huán)。每次一輪循環(huán)都使用其中一個(gè)值來(lái)執(zhí)行已定義好的一組命令。下面是 bash shell 中 for 命令的基本格式。

for var in list
do
    commands
done

還可以是這樣的形式
for var in list; do

注意這里的 list 這不是 shell 的關(guān)鍵詞,list 只是想說(shuō)明這是由數(shù)值,字符,字符串所組成的列表,for 循環(huán)來(lái)遍歷這個(gè)列表。

使用:

for i in a b c d e f
do
    echo "The char is: $i"
done
------------------------------
The char is: a
The char is: b
The char is: c
The char is: d
The char is: e
The char is: f
for name in Alabama Alaska Arizona Arkansas California Colorado
do
	echo The next state is $name
done
---------------------------------------------------------------
The next state is Alabama
The next state is Alaska
The next state is Arizona
The next state is Arkansas
The next state is California
The next state is Colorado

還可以在變量中加載值:

通常shell腳本遇到的情況是,你將一系列值都集中存儲(chǔ)在了一個(gè)變量中,然后需要遍歷變量中的整個(gè)列表。

str="hello, word"

for s in str
do
	echo "$s"
done

還可以在命令中加載值:

生成列表中所需值的另外一個(gè)途徑就是使用命令的輸出。可以用命令替換來(lái)執(zhí)行任何能產(chǎn)生輸出的命令,然后在 for 命令中使用該命令的輸出。

file="file_name"

for f in $(cat $file)
do
	echo "$f"
done

1.2 for 命令面臨的問(wèn)題

for 循環(huán)可以遍歷字符串列表,比如 Alabama Alaska Arizona Arkansas California Colorado,這很簡(jiǎn)單,但是如果字符串中夾雜著特殊字符,比如這樣 this'll 那這就有些麻煩了,因?yàn)橛行┨厥庾址?shell 中存在其他的含義。為了解決這樣的問(wèn)題,字符串中需要加入反斜杠 \ 進(jìn)行轉(zhuǎn)義,比如這樣 this\'ll。這時(shí) shell 就可以識(shí)別出特殊字符了。
還有一個(gè)辦法是將含有特殊字符的字符串使用雙引號(hào)括起來(lái),比如像這樣 "this'll"。

例如:

for s in I don\'t know if "this'll" work
do
	echo "word:$s"
done

1.3 更改字段分隔符

為什么需要更改字段分隔符呢?如果你需要輸出一篇英文文章,英文文章內(nèi)容自然存在單詞間的空格,行與行之間的換行符,現(xiàn)在如果shell輸出內(nèi)容的字段分隔符是空格,那這會(huì)存在一個(gè)問(wèn)題,就是輸出內(nèi)容時(shí)內(nèi)容會(huì)排成一列,而不是一行一行的輸出。造成這個(gè)問(wèn)題的原因是特殊的環(huán)境變量 IFS ,叫作內(nèi)部字段分隔符(internal field separator)。IFS 環(huán)境變量定義了bash shell用作字段分隔符的一系列字符。默認(rèn)情況下,bash shell會(huì)將下列字符當(dāng)作字段分隔符:

  • 空格
  • 制表符
  • 換行符
    如果bash shell在數(shù)據(jù)中看到以上這些字符中的任意一個(gè),它就會(huì)假定這表明了列表中一個(gè)新數(shù)據(jù)字段的開(kāi)始。

要解決這個(gè)問(wèn)題,可以在 shell 腳本中臨時(shí)更改 IFS 環(huán)境變量的值來(lái)限制被 bash shell 當(dāng)作字段分隔符的字符,比如 IFS=$'\n',這樣字段分隔符就被更改為換行了。這樣 bash shell 就認(rèn)為換行才是數(shù)據(jù)的結(jié)束,bash shell 會(huì)在數(shù)據(jù)值中忽略空格和制表符。

就像下面這樣存儲(chǔ)舊值,賦予臨時(shí)修改值:

file="file_name"

IFS.OLD=$IFS
IFS=$'\n'

for f in $(cat $file)
do
	echo "$f"
done

IFS=$IFS.OLD

1.4 用通配符讀取目錄

可以用 for 命令來(lái)自動(dòng)遍歷目錄中的文件。進(jìn)行此操作時(shí),必須在文件名或路徑名中使用通配符。它會(huì)強(qiáng)制shell 使用文件擴(kuò)展匹配。文件擴(kuò)展匹配是生成匹配指定通配符的文件名或路徑名的過(guò)程。在不知道所有的文件名,這個(gè)特性在處理目錄中的文件時(shí)就非常有用。

從目錄中加載出所有的文件和文件夾:

for file in /home/rich/test/*
do
	if [ -d "$file" ]
	then
		echo "$file is a directory"
	elif [ -f "$file" ]
	then
		echo "$file is a file"
fi
done

2. c 風(fēng)格 for 命令

我們先來(lái)看看 C 語(yǔ)言代碼中 for 循環(huán)的代碼風(fēng)格:

for (i = 0; i < 10; i++) {
	printf("The next number is %d\n", i);
}

以下是 bash shell 中 C 語(yǔ)言風(fēng)格的 for 循環(huán)的基本格式:

for (( variable assignment ; condition ; iteration process ))
                   ↓↓↓
for (( a = 1; a < 10; a++ ))

C語(yǔ)言風(fēng)格的 for 循環(huán)的格式會(huì)讓 bash shell 腳本程序員摸不著頭腦,因?yàn)樗褂昧薈語(yǔ)言風(fēng)格
的變量引用方式而不是shell風(fēng)格的變量引用方式。
注意,有些部分并沒(méi)有遵循 bash shell 標(biāo)準(zhǔn)的 for 命令:
變量賦值可以有空格
條件中的變量不以美元符開(kāi)頭
迭代過(guò)程的算式未用 expr 命令格式

使用 C 風(fēng)格的 for 命令可以像 C 語(yǔ)言那樣使用多個(gè)變量,例如下面這樣:

for (( a=1, b=10; a <= 10; a++, b-- ))
do
    echo "$a - $b"
done

3. while 命令

while 命令的關(guān)鍵在于所指定的 test command 的退出狀態(tài)碼必須隨著循環(huán)中運(yùn)行的命令而改變。如果退出狀態(tài)碼不發(fā)生變化, while 循環(huán)就將一直不停地進(jìn)行下去。最常見(jiàn)的 test command 的用法是用方括號(hào)來(lái)檢查循環(huán)命令中用到的shell變量的值。

while test command
do
	other commands
done

實(shí)例:

while [ $a -gt 0 ]
do
	echo $a
	a=$[ $a - 1 ]
done

while 還可以haike使用多個(gè)測(cè)試命令

while 命令允許你在 while 語(yǔ)句行定義多個(gè)測(cè)試命令。只有最后一個(gè)測(cè)試命令的退出狀態(tài)碼會(huì)被用來(lái)決定什么時(shí)候結(jié)束循環(huán)。

while echo $a
	[ $a -ge 0 ]
do
	echo "This is inside the loop"
	a=$[ $a - 1 ]
done

4. until 命令

until 命令和 while 命令工作的方式完全相反。 until 命令要求你指定一個(gè)通常返回非零退出狀態(tài)碼的測(cè)試命令。只有測(cè)試命令的退出狀態(tài)碼不為 0 ,bash shell 才會(huì)執(zhí)行循環(huán)中列出的命令。一旦測(cè)試命令返回了退出狀態(tài)碼 0 ,循環(huán)就結(jié)束了。

until test command
do
	other commands
done

實(shí)例:

until [ $a -eq 0 ]
do
	echo $a
	a=$[ $a - 25 ]
done

5. 控制循環(huán)

有時(shí)我們?cè)谀_本中執(zhí)行循環(huán)的過(guò)程中,我們需要根據(jù)特定的條件來(lái)及時(shí)的退出循環(huán)去執(zhí)行其他的任務(wù),所以我們要能夠?qū)ρh(huán)進(jìn)行條件上的控制,shell 中 break 命令,continue 命令能幫我們控制循環(huán)內(nèi)部的情況。

5.1. break 命令

break 命令是退出循環(huán)的一個(gè)簡(jiǎn)單方法??梢杂?break 命令來(lái)退出任意類型的循環(huán),包括 while 和 until 循環(huán)。

在 shell 執(zhí)行 break 命令時(shí),它會(huì)嘗試跳出當(dāng)前正在執(zhí)行的循環(huán)。
有時(shí)你在內(nèi)部循環(huán),但需要停止外部循環(huán)。 break 命令接受單個(gè)命令行參數(shù)值,break n 其中 n 指定了要跳出的循環(huán)層級(jí)。默認(rèn)情況下, n 為 1 ,表明跳出的是當(dāng)前的循環(huán)。如果你將 n 設(shè)為 2 , break 命令就會(huì)停止下一級(jí)的外部循環(huán)。

5.2. continue命令

continue 命令可以提前中止某次循環(huán)中的命令,但并不會(huì)完全終止整個(gè)循環(huán)。比如提前終止本次循環(huán),進(jìn)入下一次循環(huán)(當(dāng) shell 執(zhí)行 continue 命令時(shí),它跳過(guò)了 while 循環(huán)中余下的命令)。

到此這篇關(guān)于shell 循環(huán)命令詳解的文章就介紹到這了,更多相關(guān)shell 循環(huán)命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Bash Shell對(duì)目錄中的文件實(shí)現(xiàn)遞歸式拷貝

    使用Bash Shell對(duì)目錄中的文件實(shí)現(xiàn)遞歸式拷貝

    這篇文章主要介紹了使用Bash Shell對(duì)目錄中的文件實(shí)現(xiàn)遞歸式拷貝,適用于Ubuntu等Debian系的Linux系統(tǒng),需要的朋友可以參考下
    2015-07-07
  • 用shell腳本自己一個(gè)秒級(jí)定時(shí)任務(wù)

    用shell腳本自己一個(gè)秒級(jí)定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Shell腳本實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)管理工具,可以每秒執(zhí)行一次,并保證任務(wù)異步、非阻塞執(zhí)行,需要的可以參考下
    2024-12-12
  • 一個(gè)監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動(dòng)重啟的簡(jiǎn)潔Shell腳本分享

    一個(gè)監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動(dòng)重啟的簡(jiǎn)潔Shell腳本分享

    這篇文章主要介紹了一個(gè)監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動(dòng)重啟的簡(jiǎn)潔Shell腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • shell參數(shù)換行與shell輸出換行的方法實(shí)例

    shell參數(shù)換行與shell輸出換行的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于shell參數(shù)換行與shell輸出換行的方法實(shí)例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • linux shell自定義函數(shù)(定義、返回值、變量作用域)介紹

    linux shell自定義函數(shù)(定義、返回值、變量作用域)介紹

    linux shell 可以用戶定義函數(shù),然后在shell腳本中可以隨便調(diào)用。下面說(shuō)說(shuō)它的定義方法,以及調(diào)用需要注意那些事項(xiàng)
    2013-02-02
  • Linux?grep?-q用法示例詳解

    Linux?grep?-q用法示例詳解

    grep指令用于查找內(nèi)容包含指定的范本樣式的文件,如果發(fā)現(xiàn)某文件的內(nèi)容符合所指定的范本樣式,預(yù)設(shè)grep指令會(huì)把含有范本樣式的那一列顯示出來(lái),這篇文章主要介紹了Linux?grep?-q用法示例詳解,需要的朋友可以參考下
    2023-02-02
  • Shell命令解釋器分類示例詳解

    Shell命令解釋器分類示例詳解

    Shell是負(fù)責(zé)User與Linux OS之間溝通的橋梁,Shell為用戶提供了一個(gè)操作界面,User在這個(gè)界面輸入指令,其實(shí)就是通過(guò)Shell向Linux Kernel傳遞過(guò)去,這也就是為什么Shell也叫解釋器的原因,這篇文章主要給大家介紹了關(guān)于Shell命令解釋器分類的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Linux 下C語(yǔ)言獲取文件大小

    Linux 下C語(yǔ)言獲取文件大小

    這篇文章主要介紹了Linux 下C語(yǔ)言獲取文件大小的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Linux下date命令,格式化輸出,時(shí)間設(shè)置方法

    Linux下date命令,格式化輸出,時(shí)間設(shè)置方法

    下面小編就為大家?guī)?lái)一篇Linux下date命令,格式化輸出,時(shí)間設(shè)置方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • linux模糊查找一個(gè)文件的方法

    linux模糊查找一個(gè)文件的方法

    這篇文章主要介紹了linux模糊查找一個(gè)文件的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06

最新評(píng)論

怀宁县| 瑞金市| 宁明县| 南漳县| 兴业县| 大英县| 平顶山市| 长沙市| 大邑县| 江川县| 汉中市| 盐边县| 赤壁市| 唐海县| 葵青区| 防城港市| 靖远县| 嘉鱼县| 福州市| 黄平县| 雅江县| 哈巴河县| 墨脱县| 浦东新区| 吴江市| 府谷县| 灯塔市| 沐川县| 嘉禾县| 商都县| 镇巴县| 西藏| 昔阳县| 桓台县| 石阡县| 六盘水市| 滕州市| 庐江县| 卓尼县| 阳原县| 环江|