Shell腳本學習之基礎程序結構

Shell腳本:一個由一堆命令堆砌而成的,用來完成特定任務的,可以被指定解釋器執行的,文本文件。

這個是我對Shell腳本的理解。

1、Shell腳本就是一個可執行文本文件,它不需要編譯,不需要連接,寫完就可以直接執行;

2、Shell腳本的主體是一堆命令,每一條語句都可以再控制檯下直接執行;

3、指定解釋器,這個就是每個Shell腳本的第一句話,是固定的,解釋器有多個,Bash、CShell等等,所以需要指定下。


程序=最簡單的結構+語句+實現的思想。

最簡單的結構就相當於人的骨架,就是最簡單的一個程序,可以堪稱所有程序的祖宗的就是它。

語句就相當於人的血肉,用來填充這個骨架。在我看來就四種:輸入、輸出、循環、判斷。

實現思想就相當於人的靈魂,需要實現的功能都在此體現。


最簡單的結構,那就是最簡單的程序

#!/bin/bash
exit 0

這個Shell什麼也沒有做,就退出了,但它確實是最簡單的Shell腳本,他是符合語法規則的。

第一行指定了這個腳本是由bash來解釋執行的。

第二行退出當前腳本。


Shell的執行有兩種方式:

一個是./腳本名.sh 的方式執行,這種執行方式是新開一個bash來執行該腳本,類似與子進程的方式執行,所以腳本中的任何變量在腳本退出後都會被銷燬,不會在父進程中留下任何痕跡。

一個是source 腳本名.sh方式執行,這種方式,不再開子進程執行,腳本中的所有變量都會影響到當前的bash,即腳本執行完成後,在當前命令行可以查看腳本中的變量(如果腳本沒有取消(unset)變量的話)


語句

輸入:

Shell腳本的輸入和C語言的輸入一樣,一個是從外部讀取的,一個是命令本身的。

從外部讀取的,就是用read命令從用戶的輸入讀取的數據,與C語言的scanf類似。

#!/bin/bash
read -p "please enter a number:" iInputNum
exit 0

這個程序就是提示用戶輸入一個數字,然後讀取用戶的輸入。

這裏有輸入,自然要存儲,所以要定義變量來存儲。Shell腳本的變量定義算是我見過的最隨意的了。沒有類型,隨時定義,隨時使用。

隨便寫個字符串,他就是一個變量,可以是一個數字,可以是一個字符串,也可以是一個命令的執行結果,都行。


命令本身的輸入,就是指在執行的命令後面帶參數,類似與C語言的 int argc和char *argv。Shell腳本提供同樣的功能,這個是Shell腳本的默認變量

$0:代表命令本身

$1:代表命令後的第一個參數

$2:代表命令後的第二個參數

依次類推。

$#:代表參數的個數,不包括命令本身。

$@:表示輸出所有的參數,不包括命令本身。


輸出

輸出也不需要控制輸出格式什麼的,只有一個命令:echo。

#!/bin/bash
echo "Hello world"
exit 0

這個程序輸出一個最經典的一句話:“Hello world”。

這個是輸出字符串,如果要輸出變量,可以用下面的方式

echo $VarName

以美元符號($)加變量名的方式輸出一個變量。


循環

循環分爲三種:while循環、until循環、for循環

while循環格式:

while [判斷式]

do

#程序段

done

當滿足判斷式的時候,就進入循環,循環的主體就是中間的程序段,以do開始,以done結束。


until循環格式:

until [判斷式]

do

#程序段

done

如果判斷式成立,則停止循環。其餘與while循環類似。


for循環

for循環共有三種格式

1、適用於有限個,無規則的循環值

for 變量名 in 枚舉值1 枚舉值2 枚舉值3  

do

#程序段

done

1、變量名,不需要加美元符

2、可以枚舉多個值,也可以式一個枚舉值包含多個數據,如“ls ”羅列出來的文件名,保存在同一個變量中,然後循環遍歷,此時只要寫一個變量名即可


2、適用於依次增加,且每次增加值爲1的情況

for 變量名 in $(seq 起始值 終止值)

do

#程序段

done

seq是sequence的縮寫,有連續之意,所以程序會從起始值開始逐次加一


3、適用於有一定增加規律,每次增加的值相同,但是不等於一的情況

for ((初始值; 限制值; 執行步長))

do

#程序段

done

從初始值開始每次增加步長,直至限制值


判斷

判斷實際上常用的只有一個if,但是有多種寫法

1、單個分支

if [條件判斷]; then

#處理

fi

2、兩個分支

if [條件判斷]; then

#處理

else

#處理

fi


3、多個分支

if [條件判斷]; then

#處理

elif [條件判斷]; then

#處理

else

#處理

fi


到此爲止,Shell腳本的基本結構已經都知道了,理論上已經可以寫出任何的Shell腳本了!

骨架、血肉都已經齊活了,接下來只需要將對問題的解決方法用這些語句表達出來就行了。

一開始就說過,Shell腳本就是一堆命令的堆砌,在知曉語法邏輯結構後,接下來就是看個人的命令使用的熟練程度了,這就要看個人修煉了。


發佈了53 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章