天天看點

shell 腳本的學習

1. shell腳本

通過一系列程式語句幫我完成重複工作

2. 腳本的檔案頭最好記錄好如下内容:

  (1) 功能 (2)版本資訊 (3)作者與聯系方式 (4) 版權聲明方式 (5) 曆史記錄 (6) 特殊指令用 絕對路徑 執行 (7) 運作時需要的環境變量預先聲明與設定

3.學習

$( (計算式) )   可以進行整數計算

bc : 計算小數點可以用bc  

echo "1.1 *5 " | bc      

bash和source: 我們執行指令一般用的是 

bash test.sh      

或者

sh test.sh      

但是bash或者sh執行指令都是啟動一個新的子程序來進行操作,如果我們想在父程序中執行指令的話,需要執行source

source test.sh      

這樣test.sh中定義的變量就會在父程序中生效.

test: 測試某個指令是否存在 test -e  [filename]   test有很多選項,可以判斷檔案字元串,權限等,詳情 --help

[]:我們可以使用中括号來達到和test相同的效果,比如:

[ -z "${HOME}" ]; $?      

如果 ${HOME} 不存在,會輸出1,存在會輸出 0.還可以比較字元串,比如:

[ "123" == "123" ]      

我們也可以通過 $? 判斷結果,需要注意的是前後都需要空格,雙等号前後也需要.

參數最好也要用雙引号括起來,否則會報錯比如:

name="li  li"
[ ${name} == "li li" ]      

把${name}用雙引号括起來就可以,"${name}",不括起來的話就會比較 li li == "li li" 有多個參數.

shell的預設變量:

$# 參數個數

$@所有變量

$* 同$@ 用空格分割

$1 第一個參數

$2 第二個參數以此類推

shift:變量偏移可以把變量起始位置向後偏移,也就是删除了第一個變量

 if:文法

if [ "${name}" == "hello" ]
    echo "Yes"
elif [ "${name}" == "world" ]
    echo "Yes world"
else 
    echo "NO"
fi      

基本文法就這,和其他語言差不多

netstat -tuln:檢視啟動的服務 127.0.0.1隻對本機開放,如果是0.0.0.0則對所有網絡開放

case文法:

case $變量名稱 in 
    "ONE")
        echo "ONE"
        ;;
    "TWO")
        echo "TWO"
        ;;
    *)
        echo "Default"
        ;;
esac      

其實和switch差不多,沒什麼好說的

function:函數 

function printHello(){
    echo "Hello"  
}
printHello      

可以定義函數, 也可以在函數後面加參數,用$1接收,這時候的$1指的是函數的參數,不是腳本的參數

循環:

不定循環:

while [condition]
do
  程式
done
#當條件滿足一直循環

until [condition]
do 
 程式
done
#當條件滿足終止循環      

固定循環:

for var in con1 con2...
do 
     程式
done      

還可以用類似于java中的for循環來處理

for (( i=1; i<=5; i=i+1 ))
do
    echo "Hello"
done      

seq: 比如 seq 1 100  輸出1到100連續的數字

sh可以在執行腳本前進行校驗  sh -n hello.sh 加上-n參數就可以,其實vim就有校驗功能,其實都差不多。 -v 執行腳本前先輸出腳本内容,-x執行過程顯示到螢幕上

繼續閱讀