Shell 指令碼編寫

2021-09-13 08:09:31 字數 3934 閱讀 9173

shell 指令碼與 windows/dos 下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比 windows 下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了 linux/unix 下的命令。

方法一:bash test.sh方法二: 得先增加 test.sh 檔案可執行許可權

chmod 755 test.sh

./test.sh

#!/bin/bash#! 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell

set -e確保指令碼丟擲遇到的錯誤

資料型別:只有字串和整型兩種

使用雙引號

shell 的變數賦值的時候不用帶$,而使用或者輸出的時候要帶$。加減乘除的時候要加兩層小括號。括號外面要有乙個$,括號裡面的變數可以不用$。需要注意的是,變數賦值,等號兩邊不能有空格,否則會被解析成命令,報錯無此命令。

# 變數

echo $ #源字串

echo $ #字串長度,包含空格

echo $ #擷取從第五個後面開始到最後的字元

echo $ #擷取從第五個後面開始的2個字元

echo $ #從開頭刪除a到f的字元

echo $ #從開頭刪除a以後的字元

echo $ #從結尾刪除f到j的字元

echo $ #從結尾刪除j前面的所有字元包括j

[ ] 裡面每個變數之間都要有空格

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

# 判斷 test 或 

格式:if 條件 ; then 結果 fi ,最後面一定要有 fi 。在 shell 指令碼裡面,控制分支結構結束都要和開頭的單詞相反,例如,if ficase esac

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 或者 [ ] 來判斷

until 語句

until 語句是只要條件為假就執行下列語句。

for 語句

a=`seq 4 10`

echo $a

for i in `seq 4 10` #seq是乙個命令,順序生成一串數字或者字元

funcname()
返回值是可選的,如果沒有顯示 return 則預設返回最後一條語句執行的結果。

如果一定要讓函式返回字串,那麼可以先定義乙個變數,用來接收函式的計算結果,指令碼在需要的時候訪問這個變數來獲得函式返回值。

函式引數從$1$n$0是檔名。

# 列印數字

printnum ()

for i in `seq 2 8` #seq是乙個命令,順序生成一串數字或者字元

doprintnum $i

done

採用$0,$1,$2...等方式獲取指令碼命令列傳入的引數,$0獲取到的是指令碼路徑以及指令碼名,後面按順序獲取引數,當引數超過10個時(包括10個),需要使用$,$...才能獲取到引數,但是一般很少會超過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 "第十個引數$"

編寫Shell指令碼

獲取變數的方式 1 echo path 2 echo 3 echo path 引數的提取 引數的個數 n 第n個引數 0 當前指令碼名稱 取出所有引數 shift 引數左移 執行過程 2 編寫指令碼內容 單獨講解 3 新增執行許可權 chmod a x abc.sh 4 當前目錄執行 abc.sh ...

shell指令碼編寫

echo echo n不換行輸出,echo e會處理特殊字元,比如有 n則會換行 printf 不自動換行輸出 print 自動換行輸出 傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數。指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中...

shell指令碼編寫注意

這八個建議,於鍵者幾年來編寫 shell 指令碼的一些經驗和教訓。事實上開始寫的時候還不止這幾條,後來思索再三,去掉幾條無關痛癢的,最後剩下八條。毫不誇張地說,每條都是精挑細選的,雖然有幾點算是老生常談了。shell 指令碼的第一行,之後應該是什麼?如果拿這個問題去問別人,不同的人的回答可能各不相同...