Shell 腳本編寫

Shell 腳本與 Windows/Dos 下的批處理類似,也就是用各種命令預先放入到一個文件中,方便一次性執行的一個程序文件,主要是方便管理員進行設置或者管理用的。可是它比 Windows 下的批處理更強大,比用其餘編程程序編輯的程序效率更高,它使用了 Linux/Unix 下的命令。

更明白地來講,shell script 就像早期 dos 年代的.bat,最簡單的功能就是將許多指令彙整寫一塊兒,讓使用者很容易地就可以一個操做執行多個命令,而 shell script 更是提供了數組,循環,條件以及邏輯判斷等重要功能,讓使用者能夠直接以 shell 來寫程序,而沒必要使用相似 C 程序語言等傳統程序編寫的語法。文章地址html

執行命令

方法一: bash test.shshell

方法二: 得先增長 test.sh 文件可執行權限編程

chmod 755 test.sh 數組

./test.shbash

語法

基礎語法

  1. #!/bin/bash #! 是一個約定的標記,它告訴系統這個腳本須要什麼解釋器來執行,即便用哪種 Shell
  2. set -e 確保腳本拋出遇到的錯誤
  3. 數據類型:只有字符串和整型兩種
  4. 使用雙引號

變量

shell 的變量賦值的時候不用帶 $,而使用或者輸出的時候要帶 $。加減乘除的時候要加兩層小括號。括號外面要有一個 $,括號裏面的變量能夠不用 $。須要注意的是,變量賦值,等號兩邊不能有空格,不然會被解析成命令,報錯無此命令。函數

# 變量
a=10
b=10
c="this is test"
d=$((a+b))

echo $a 
echo $c
echo $d
echo $((a+b))

圖片描述

表達式

str="a b c d e f g h i j"

echo ${str}          #源字符串
echo ${#str}         #字符串長度,包含空格
echo ${str:5}        #截取從第五個後面開始到最後的字符
echo ${str:5:2}      #截取從第五個後面開始的2個字符
echo ${str#a*f}      #從開頭刪除a到f的字符
echo ${str##a*}      #從開頭刪除a之後的字符
echo ${str%f*j}      #從結尾刪除f到j的字符
echo ${str%%*j}      #從結尾刪除j前面的全部字符包括j
echo ${str}

圖片描述

判斷

[ ] 裏面每一個變量之間都要有空格ui

-gt > -ge >= -lt < -le <= -eq = -ne !=this

# 判斷 test 或 []
num1=10
num2=10

test $num1 -eq $num2 && echo "num1 == num2" || echo "num1 != num2"

[ $num1 -eq $num2 ] && echo "num1 == num2" || echo "num1 != num2"

圖片描述

條件語句

格式:if 條件 ; then 結果 fi ,最後面必定要有 fi 。在 shell 腳本里面,控制分支結構結束都要和開頭的單詞相反,例如,if <–> ficase <–> esacspa

grades=70

if [ $grades -ge 90 ] && [ $grades -le 100 ];then
echo "Your grade is excellent."
elif [ $grades -ge 80 ] && [ $grades -le 89 ];then
echo "Your grade is good."
elif [ $grades -ge 70 ] && [ $grades -le 79 ];then
echo "Your grade is middle."
elif [ $grades -ge 60 ] && [ $grades -le 69 ];then
echo "Your grade is passing."
else
echo "Your grade is badly."
fi

循環語句

while 語句

while 語句是隻要條件爲真就執行下面語句。須要注意的是,這裏的條件除了 while true 能夠這樣寫,其它的條件都要用 test 或者 [ ] 來判斷命令行

i=$1
while [ $i -gt 0 ]
do
echo $i
((i--))
done

圖片描述

until 語句

until 語句是隻要條件爲假就執行下列語句。

i=$1
until [ $i -le 0 ]
do
echo $i
((i--))
done

圖片描述

for 語句

a=`seq 4 10`

echo $a

for i in `seq 4 10` #seq是一個命令,順序生成一串數字或者字符
do
   echo $i
done

圖片描述

函數

funcName() { 
    語句 
    [return 返回值] 
}

返回值是可選的,若是沒有顯示 return 則默認返回最後一條語句執行的結果。

Shell 函數返回值只能是整數,通常用來表示函數執行成功與否,0表示成功,其餘值表示失敗。若是 return 其餘數據,好比一個字符串,每每會獲得錯誤提示:numeric argument required

若是必定要讓函數返回字符串,那麼能夠先定義一個變量,用來接收函數的計算結果,腳本在須要的時候訪問這個變量來得到函數返回值。

函數參數從 $1$n$0 是文件名。

# 打印數字
printNum (){
   echo $1
}

for i in `seq 2 8` #seq是一個命令,順序生成一串數字或者字符
do
printNum $i
done

傳參

採用 $0 , $1 , $2 ...等方式獲取腳本命令行傳入的參數,$0 獲取到的是腳本路徑以及腳本名,後面按順序獲取參數,當參數超過10個時(包括10個),須要使用 ${10}, ${11} ...才能獲取到參數,可是通常不多會超過10個參數的狀況。

#!/bin/bash
echo "腳本名$0"
echo "第一個參數$1"
echo "第二個參數$2"
echo "第三個參數$3"
echo "第四個參數$4"
echo "第五個參數$5"
echo "第六個參數$6"
echo "第七個參數$7"
echo "第八個參數$8"
echo "第九個參數$9"
echo "第十個參數$10"
echo "第十個參數${10}"

圖片描述

相關文章
相關標籤/搜索