shell script

發表於2018-03-25

shell script

是利用shell的功能所寫的一個程式,這個程式是使用純文字檔案,將shell的語法和指令寫在裡面搭配正規表示式、管道命令和資料流重導向等功能,以達到我們所想要處理的目的。

注意事項:

  • 指令的執行是從上而下、從左而右的分析與執行
  • 指令、選項與引數間的空格都會被忽悠掉
  • 空白行也將被忽略掉,並且[tab]按鍵所推開的空白同樣被忽悠
  • 如果讀取到一個Enter字元,就嘗試開始執行命令
  • [#]可做為批註!任何加在#後面的資料將全部視為批註文字被忽略

如何執行指令碼

  • 直接指令下達:shell檔案必須要具有可讀和可執行的檔案

    絕對路徑: 相對路徑:假設在工作目錄內,可以直接使用./shell.sh來執行 變數[PATH]功能:將shell.sh放在PATH的指定目錄內。如~/bin/

  • 以bash程式來執行:透過[bash shell.sh]或[sh shell.sh]

  • 用source來執行,在父程式中執行

說明script的1.內容與功能 2.版本資訊 3.作者與聯絡方式 4.建檔日期 5,歷史記錄等等

利用test命令測試功能

-e 檔名是否存在 -f該檔名是否存在且為檔案 -d該檔名是否為存在且為目錄 -r該檔名是否存在且可讀 -w該檔名是否存在且可寫 -x該檔名是否存在且可執行 -s該檔名是否存在且為非空白檔案 -ef判斷file1與file2是否為同一檔案 -z string 判斷字元是否為空字元,若是,則為真 !反向狀態

利用判斷符號[]

中括號[]的兩端需要有空白符來分隔;在中括號內的變數,最好都以雙引號括起來;在中括號的常量,最好以單或雙引號括起來

shell script的預設變數

$#:代表後面接的引數個數

$@:代表“$1"、"$2"、"$3"之意,每個變數都是獨立

$*:代表“$1c$2c$3c$4”,其中c為分隔符,預設為空格

shift:造成變數號碼偏移 ##條件判斷式 if...then

if[條件判斷式];then當條件判斷成立時,可以進行的命令工作內容
fi  結束
複製程式碼

一個條件的判斷

if[條件判斷式];then當條件判斷成立時,可以進行的命令工作內容
else當條件不成立時,可以進行的命令工作內容
fi  結束
複製程式碼

多個條件的判斷

if[條件判斷1];then當條件判斷1成立時,可以進行的命令工作
elif[條件判斷2];then當條件判斷2成立時,可以進行的命令工作
else當條件1與條件2都不成立時,可以進行的命令內容
fi  結束
複製程式碼

netstat -tuln取得目前主機有啟動的服務

幾個常見的port與相關網路服務的關係是

80:www

22:ssh

21:ftp

25:mail

111:RPC(遠端列印呼叫)

631:CUPS(列印服務功能)

##利用case...esac判斷

case \$變數名稱 in   <==關鍵字為case,還有變數前有$
"第一個變數內容")   <==每個變數內容建議用雙括號括起來,關鍵字則為小括號
    程式段
    ;;              <==每個型別結尾使用兩個連續的分號來處理
"第二個變數內容")
    程式段
    ;;
*)                 <==最後一個變數內容都會\*代表所有其他值
  不包含第一個變數與第二個變數內容的其它程式執行段
  exit  1
   ;;
esac
複製程式碼

##利用function功能,函式功能

function fname  ()  {
   程式段
}
複製程式碼

##loop迴圈 不定迴圈

while do done

while  [ condition ] <==判斷式
do                   <==do 是迴圈的開始
    程式段落
done                <==done 是迴圈的結束
複製程式碼

until do done

until  [ condition ]
do
  程式段落
done
複製程式碼

固定迴圈 for do done

for var in con1 con2 con3...
do
   程式段
done
複製程式碼

第一次迴圈時,$var的內容為con1;

第二次迴圈時,$var的內容為con2;

第三次迴圈時,$var的內容為con3;

...

for...do...done的數值處理

for((初始值;限制值;執行步長))
do
    程式段
done 
複製程式碼

初始值:某個變數在迴圈當中的初始值,直接以類似i=1設定好

限制值:當變數的值在這個限制值的範圍內,就繼續進行迴圈,例如i<=100

執行步長:每做一次迴圈時的變化量。例如i=i+1

##shell script的追蹤與除錯

sh [-nvx] scripts.sh
引數:
-n:不要執行script,僅查詢語法的問題;
-v:在執行script前,先將script的內容輸出到螢幕上
-x:將使用到的script內容顯示到螢幕上
複製程式碼

相關文章