簡(jiǎn)單而有效的Linux Shell腳本示例(續(xù)一)
Linux提供了具有強(qiáng)大功能的各種功能強(qiáng)大的Shell,包括Bash,Zsh,Tcsh和Ksh。這些Shell程序最令人驚奇的功能之一就是它們的可編程性。創(chuàng)建簡(jiǎn)單而有效的Linux Shell腳本來(lái)處理日常工作非常容易。此外,對(duì)這一主題的了解將使您成為L(zhǎng)inux的高級(jí)用戶。請(qǐng)和我們一起對(duì)Unix Shell腳本進(jìn)行詳細(xì)介紹。簡(jiǎn)單而有效的Linux Shell腳本示例(1-9)見(jiàn) :
https://os.51cto.com/art/202004/614978.htm
10. 使用AND運(yùn)算符
AND運(yùn)算符允許我們的程序一次檢查是否滿足多個(gè)條件。用AND運(yùn)算符分隔的所有部分都必須為true。否則,包含AND的語(yǔ)句將返回false。查看以下bash腳本示例,以更好地了解AND的工作原理。
- #!/bin/bash
- echo -n "輸入數(shù)字:"
- read num
- if [[ ( $num -lt 10 ) && ( $num%2 -eq 0 ) ]]; then
- echo "您剛才輸入的是偶數(shù):$num"
- else
- echo "您剛才輸入的是奇數(shù):$num"
- fi
11. 使用“OR”運(yùn)算符
OR運(yùn)算符是另一個(gè)至關(guān)重要的結(jié)構(gòu),它使我們能夠在腳本中實(shí)現(xiàn)復(fù)雜而強(qiáng)大的編程邏輯。與AND相反,由OR運(yùn)算符組成的語(yǔ)句在其任何一個(gè)操作數(shù)為true時(shí)均返回true。僅當(dāng)由OR分隔的每個(gè)操作數(shù)為false時(shí),它才返回false。
- #!/bin/bash
- echo -n "輸入任何數(shù)字:"
- read n
- if [[ ( $n -eq 25 || $n -eq 50 ) ]]
- then
- echo "你贏了"
- else
- echo "你輸了"
- fi
這個(gè)簡(jiǎn)單的示例演示了OR運(yùn)算符如何在Linux Shell腳本中工作。僅當(dāng)用戶輸入數(shù)字25或50時(shí),它才宣布用戶為贏家。符號(hào)代表“or”運(yùn)算符。
12. 使用Elif
elif語(yǔ)句代表else if,并為實(shí)現(xiàn)鏈邏輯提供了一種方便的方法。通過(guò)評(píng)估以下示例,了解elif的工作原理。
- #!/bin/bash
- echo -n "輸入一個(gè)數(shù)字: "
- read num
- if [[ $num -gt 20 ]]
- then
- echo "數(shù)字大于20."
- elif [[ $num -eq 20 ]]
- then
- echo "數(shù)字等于20."
- else
- echo "數(shù)字小于20."
- fi
上面的程序是不言自明的,因此我們不再逐行進(jìn)行剖析。你更改腳本的某些部分(例如變量名和值)以檢查它們?nèi)绾我黄鸸ぷ鳌?/p>
13. 多分支選擇結(jié)構(gòu)
多分支選擇結(jié)構(gòu)是Linux bash腳本提供的另一個(gè)大特性。它可以在需要嵌套條件的地方使用,但是您不希望使用復(fù)雜的if-else-elif鏈。那請(qǐng)看下一個(gè)例子。
條件寫(xiě)在case和esac關(guān)鍵字之間。 *)用于匹配除100和200以外的所有輸入。
14. 命令行參數(shù)
在許多情況下,直接從命令shell獲取參數(shù)可能是有益的。下面的示例演示如何在bash中執(zhí)行此操作。
- #!/bin/bash
- echo "參數(shù)總數(shù) : $#"
- echo "第1個(gè)參數(shù) = $1"
- echo "第2個(gè)參數(shù) = $2"
echo "第2個(gè)參數(shù) = $2"在其名稱之后,使用兩個(gè)附加參數(shù)運(yùn)行此腳本。我將其命名為linuxidc.com.sh,并且調(diào)用過(guò)程概述如下。
- [linuxidc@linux:~/www.linuxidc.com]$ ./linuxidc.com.sh linuxidc.com linuxidc ubuntu
因此,$1用于訪問(wèn)第一個(gè)參數(shù),$2用于訪問(wèn)第二個(gè)參數(shù),依此類推。$#用于獲取參數(shù)的總數(shù)。
15. 獲取帶有名稱的參數(shù)
下面的示例演示如何獲取帶有名稱的命令行參數(shù)。
- #!/bin/bash
- for arg in "$@"
- do
- index=$(echo $arg | cut -f1 -d=)
- val=$(echo $arg | cut -f2 -d=)
- case $index in
- A) a=$val;;
- B) b=$val;;
- *)
- esac
- done
- ((result=a+b))
- echo "A+B=$result"
echo "A+B=$result"將此腳本命名為linuxidc.com.sh并按如下所示進(jìn)行調(diào)用。
- [linuxidc@linux:~/www.linuxidc.com]$ ./linuxidc.com.sh A=200 B=70
它應(yīng)該返回A+B=270。此處的參數(shù)存儲(chǔ)在' $@ '內(nèi),腳本使用Linux cut命令獲取它們。
16. 連接字符串
字符串處理對(duì)于各種現(xiàn)代bash腳本至關(guān)重要。值得慶幸的是,它在bash中使用起來(lái)更加舒適,并且允許使用一種更加精確,簡(jiǎn)潔的方式來(lái)實(shí)現(xiàn)此目的。請(qǐng)參閱以下示例,快速瀏覽bash字符串連接。
- #!/bin/bash
- string1="Linux"
- string2="公社"
- string3="(www.linuxidc.com)"
- string=$string1$string2$string3
- echo "$string 為L(zhǎng)inux愛(ài)好者提供海量技術(shù)教程。"
echo "$string 為L(zhǎng)inux愛(ài)好者提供海量技術(shù)教程。"以下程序輸出字符串“Linux公社(www.linuxidc.com) 為L(zhǎng)inux愛(ài)好者提供海量技術(shù)教程。”如下圖:
17. 切片字符串
與許多編程語(yǔ)言相反,bash不提供用于切片字符串部分的任何內(nèi)置函數(shù)。下面的示例演示如何使用參數(shù)擴(kuò)展來(lái)完成此操作。
- #!/bin/bash
- Str="Learn Bash Commands from linuxidc.com"
- subStr=${Str:0:20}
- echo $subStr
這個(gè)腳本應(yīng)該輸出“Learn Bash Commands”。參數(shù)擴(kuò)展采用${VAR_NAME:S:L}的形式。在此,S表示起始位置,L表示長(zhǎng)度。
18. 使用cut提取子字符串
可以在腳本內(nèi)部使用Linux cut命令來(lái)“剪切”一部分字符串,也就是子字符串。下一個(gè)示例顯示了如何完成此操作。
- #!/bin/bash
- Str="Learn Bash Commands from linuxidc.com"
- #subStr=${Str:0:25}
- subStr=$(echo $Str| cut -d ' ' -f 1-4)
- echo $subStr
19. 兩個(gè)值相加
在Linux Shell腳本中執(zhí)行算術(shù)運(yùn)算非常容易。下面的示例演示如何從用戶接收兩個(gè)數(shù)字作為輸入并將其相加。
- #!/bin/bash
- echo -n "輸入第一個(gè)數(shù)字:"
- read a
- echo -n "輸入第2個(gè)數(shù)字:"
- read b
- (( sum=a+b ))
- echo "相加的結(jié)果=$sum"
如您所見(jiàn),在bash中添加數(shù)字相當(dāng)簡(jiǎn)單。