一、Shell腳本編寫規範
1、一個規範的Shell腳本在第一行會指出由哪個程序(解釋器)來執行腳本中的內容,這一行內容在Linux bash的編程一般爲:#!/bin/bash 或 #! /bin/sh
bash 與 sh 的區別:sh 爲 bash的軟連接,大多數情況下,腳本使用“#!/bin/bash”和“#!/bin/sh”是沒有區別的,但更規範的寫法是在腳本的開頭使用 #!/bin/bash
2、在shell腳本中,跟在 # 後面的內容表示註釋,用來對腳本進行註釋說明,註釋部分不會被當做程序來執行,僅僅是給開發者和使用者看的,系統解釋器是看不到的,更不會執行。註釋可以自成一行,也可以跟在腳本命令的後面與命令在同一行。 註釋儘量不要使用中文,在腳本中最好也不要有中文。
3、Shell腳本的開頭會加版本、版權等信息,如:
# Date:16:29 2018-10-20
# Author: Create by xiaoxie
# Description: This script function is ……
# Version: 1.1
4、在shell腳本中儘量不用中文註釋,儘量用英文註釋,防止本機或切換系統環境後中文亂碼的困擾。
5、Shell腳本的命名應以.sh爲擴展名 例如:1.sh
6、成對的符號應儘量一次性寫出來,然後退格在符號內增加內容,以防止遺漏。這些成對的符號包括: {}、[]、‘’、“” 等
7、中括號[]兩端至少要有1個空格,因此,鍵入中括號時即留出空格[ ],然後在退格鍵入中間內容,並確保兩端都至少由一個空格。
8、對於流程控制語句,應一次性將格式寫完,再添加內容。 如:一次性完成for循環語句的格式
for
do
內容
done
9、通過縮進讓代碼更易讀,如:
if 條件內容
then
內容
fi
10、對於常規變量的字符串定義變量值應加雙引號,並且等號前後不能有空格,需要強引用的,則用單引號(‘’),如果是命令的引用,則用反引號(``)。
11、 腳本中的單引號、雙引號及反引號必須爲英文狀態下的符號。
二、Shell 中的變量
定義變量時變量名建議用大寫,如 A=xie B=99
查看變量內容 echo $A 或 echo ${A}
- 雙引號:允許通過$符號引用其他變量值
- 單引號:禁止引用其他變量值,$視爲普通字符
- 反撇號:命令替換,提取命令執行後的輸出結果 全局變量的定義方法 export 變量名
位置參數
位置參數我們寫腳本時候經常使用,比如腳本名稱後面緊接着是空格加變量,空格加變量這種方式,其實就是帶參數。
位置參數是一種在調用 Shell 程序的命令行中按照各自的位置決定的變量,是在程序名之後輸入的參數。 位置參數之間用空格分隔,Shell取第一個位置參數替換程序文件中的 $1,第二個替換 $2 , 依次類推。
注意:$0 是一個特殊變量,它的內容是當前這個shell程序的文件名,所以 $0 不是一個位置參數。
#! /bin/bash
echo $1
echo $(($2+$3))
當我執行時,我在文件名後加3個參數
預定義變量
預定義變量和環境變量相類似,也是在Shell一開始就定義的變量,不同的是,用戶只能根據shell的定義來使用這些變量,所有預定義變量都是由符號“$”和另一個符號組成。 常見的Shell預定義變量有以下幾種。
$# :位置參數的數量
$* :所有位置參數的內容
$? :命令執行後返回的狀態,0表示沒有錯誤,非0表示有錯誤
$$ :當前進程的進程號
$! :後臺運行的最後一個進程號
$0 :當前執行的進程名
假如我現在有一個 1.sh腳本文件,內容如下
#! /bin/bash
echo $1
echo ${2}+${3}
echo $# #打印出位置參數的數量
echo $* #打印出位置參數的內容
echo $? #打印出命令執行後返回的狀態
echo $$ #打印出當前進程的進程號
echo $0 #打印出當前進程的進程名
當我執行時,我在文件名後加3個參數
三、變量的算術運算
1、Shell中常見的算術運算符
2、Shell 中常見的算術運算命令
3、雙小括號 (()) 數值運算命令的用法
雙小括號 (()) 的作用是進行數值運算與數值比較,它的效率很高,用法靈活,是Linux下常用的運算操作符。其操作方法如下:
四、if 條件判斷語句
###雙條件判斷#####
if 條件判斷
then
命令
elif 條件判斷
then
命令
else
命令
fi
##或
if 條件判斷;then
命令
elif 條件判斷;then
命令
else
命令
fi
if語句對於字符串的匹配
五、for循環語句
for 條件
do
命令
done
##或
for 條件;do
命令
done
六、while循環語句
while 條件
do
命令
done
七、Break、Continue、exit 循環控制語句
break 、continue在條件語句及循環語句(for、while、if等)中用於控制程序走向;而exit則用於終止所有語句並退出當前腳本。
參考: