簡(jiǎn)單而有效的Linux Shell腳本示例
從歷史上看,shell一直是類Unix系統(tǒng)的原生命令行解釋器。多年來(lái),它已被證明是Unix的主要功能之一,它本身已發(fā)展成為一個(gè)全新的話題。
Linux提供了具有強(qiáng)大功能的各種功能強(qiáng)大的Shell,包括Bash,Zsh,Tcsh和Ksh。這些Shell程序最令人驚奇的功能之一就是它們的可編程性。創(chuàng)建簡(jiǎn)單而有效的Linux Shell腳本來(lái)處理日常工作非常容易。此外,對(duì)這一主題的一點(diǎn)了解將使您立即成為L(zhǎng)inux的高級(jí)用戶。請(qǐng)和我們一起對(duì)Unix Shell腳本進(jìn)行詳細(xì)介紹。
Linux Shell腳本示例
在Linux上完成的大多數(shù)shell腳本都涉及bash shell。具有指定選擇的高級(jí)用戶經(jīng)常使用其他Shell,例如Zsh和Ksh。由于示例的廣泛使用和巨大的可用性,我們?cè)谑纠袑⒋蟛糠謭?jiān)持使用Linux bash腳本。我們的編輯器還嘗試概述一些處理bash以外的shell的shell腳本示例。您會(huì)發(fā)現(xiàn)不同的Shell腳本之間相當(dāng)熟悉。
Linux Bash腳本
Bash又名Bourne Again Shell,是當(dāng)今大多數(shù)Linux發(fā)行版中的默認(rèn)命令行解釋器。它是對(duì)早期Bourne Shell的升級(jí),學(xué)習(xí)bash shell腳本將使您更快地了解其他shell腳本。因此,請(qǐng)自己嘗試這些簡(jiǎn)單的示例以獲得第一手經(jīng)驗(yàn)。
1. Hello World
程序員經(jīng)常通過(guò)學(xué)習(xí)hello world程序來(lái)學(xué)習(xí)新語(yǔ)言。這是一個(gè)簡(jiǎn)單的程序,可將字符串“ Hello World”打印到標(biāo)準(zhǔn)輸出。使用vim或nano之類的編輯器創(chuàng)建文件linuxidc.sh并將以下幾行復(fù)制到其中。
- #!/bin/bash
- echo "Hello World,www.linuxidc.com"
保存并退出文件。您需要使用以下命令使該文件可執(zhí)行。
- $ chmod a + x linuxidc.sh
您可以使用以下兩個(gè)命令中的任何一個(gè)來(lái)運(yùn)行它。
- $ bash linuxidc.sh
- $ ./linuxidc.sh
它將打印出傳遞給腳本內(nèi)部echo的字符串。
2. 使用echo進(jìn)行打印
echo命令用于以bash格式打印信息。它類似于C函數(shù)'printf',并提供許多常用選項(xiàng),包括轉(zhuǎn)義序列和重定向。
將以下幾行復(fù)制到一個(gè)名為linuxidc.com.sh的文件中,并使其可執(zhí)行,如上所述。
- #!/bin/bash
- echo "Linux公社www.linuxidc.com"
- echo -n "不使用換行符打印文本"
- echo -e "\nUbuntu \t CentOS \t debian\n"
運(yùn)行腳本,看看它做了什么。-e選項(xiàng)用于告訴echo傳遞給它的字符串包含特殊字符,需要擴(kuò)展功能。
3. 使用注釋
注釋對(duì)于文檔很有用,并且是高質(zhì)量代碼庫(kù)的要求。在處理關(guān)鍵邏輯的代碼中放入注釋是一種常見的做法。要注釋掉一行,只需在它前面使用#(散列)字符。檢查以下bash腳本示例。
- #!/bin/bash
- # 兩個(gè)值相加
- ((sum=17+19))
- #打印結(jié)果
- echo $sum
該腳本將輸出數(shù)字36。請(qǐng)?jiān)谀承┬兄笆褂?檢查如何使用注釋。但是第一行是一個(gè)例外。它被稱為shebang,讓系統(tǒng)知道運(yùn)行此腳本時(shí)使用哪個(gè)解釋器。
4. 多行注釋
許多人使用多行注釋來(lái)記錄其Shell腳本。在下一個(gè)名為linuxidc.com.sh的腳本中檢查如何完成此操作。
- #!/bin/bash
- : '
- 該腳本計(jì)算
- 5的平方。
- '
- ((area=5*5))
- echo $area
注意多行注釋是如何放置在:' and '字符中的。
5. While循環(huán)
while循環(huán)結(jié)構(gòu)用于多次運(yùn)行某些指令。請(qǐng)查看以下名為while.sh的腳本,以更好地理解此概念。
- #!/bin/bash
- i=0
- while [ $i -le 2 ]
- do
- echo Number: $i
- ((i++))
- done
因此,while循環(huán)采用下面的形式。
- while [ condition ]
- do
- commands 1
- commands n
- done
方括號(hào)是必需的。
6. For循環(huán)
for循環(huán)是另一種廣泛使用的bash shell構(gòu)造,它允許用戶有效地遍歷代碼。下面演示一個(gè)簡(jiǎn)單的示例。
- #!/bin/bash
- for (( a=1; a<=5; a++ ))
- do
- echo -n "$a "
- done
- printf "\n"
將此代碼保存在名為inuxidc.com.sh的文件中,然后使用./linuxidc.com.sh運(yùn)行它。不要忘記使其可執(zhí)行。該程序應(yīng)打印出數(shù)字1到15。
7、接收用戶的輸入
獲取用戶輸入對(duì)于在腳本中實(shí)現(xiàn)用戶交互至關(guān)重要。下面的Shell腳本示例將演示如何在Shell程序中接收用戶輸入。
- #!/bin/bash
- echo -n "輸入內(nèi)容:"
- read something
- echo "您輸入了:$something"
因此,read結(jié)構(gòu)后跟一個(gè)變量名,用于獲取用戶輸入。輸入存儲(chǔ)在這個(gè)變量中,可以使用$符號(hào)訪問(wèn)它。
8. If語(yǔ)句
如果語(yǔ)句是Unix shell腳本中最常見的條件構(gòu)造,則它們采用以下形式。
- if CONDITION
- then
- STATEMENTS
- fi
僅當(dāng)條件為true時(shí)才執(zhí)行語(yǔ)句。fi關(guān)鍵字用于標(biāo)記if語(yǔ)句的結(jié)尾。下面是一個(gè)簡(jiǎn)單的示例。
- #!/bin/bash
- echo -n "請(qǐng)輸入數(shù)字: "
- read num
- if [[ $num -gt 17 ]]
- then
- echo "數(shù)字大于17."
- fi
僅當(dāng)通過(guò)輸入提供的數(shù)字大于17時(shí),以上程序才會(huì)顯示輸出。該-gt表示大于; 類似地-lt小于;-le小于等于;和-Ge為大于等于。[[]]是必需的。
9. 使用If Else進(jìn)行更多控制
將else構(gòu)造與if結(jié)合使用,可以更好地控制腳本的邏輯。一個(gè)簡(jiǎn)單的例子如下所示。
- #!/bin/bash
- read n
- if [ $n -lt 10 ];
- then
- echo "這是一個(gè)數(shù)字"
- else
- echo "這是一個(gè)兩位數(shù)的數(shù)字"
- fi
else部分需要放在if的操作部分和fi之間。