Shell筆記,老男孩shell筆記
#!/bin/bashvar2 = 'var2'echo $var2echo ${var2}var2 = 'var2_1' #變數可以重複定義但變數名前不加$var3 = 'var3'readonly var3 #將var3聲明為唯讀變數#var3 = 'var3_1' 這裡就不能再改變var3的值了var4 = 'var4'unset var4 #刪除var4變數#echo ${var4} 這裡不能再調用var4了var5 = 'var5'var6 = "This is ${var5}" #拼接字串var7 = "This is "$var5" ,too" #拼接字串var8 = 'itvar8'echo ${#var8} #輸出var8的長度,即輸出6var9 = 'Hello World!'echo ${var9:1:5} #從字串第2個字元開始截取5個字元var10 = 'Hello World!'echo `expr index "$var10" World` #尋找字元World在字串中的位置arr1 = ('var1' 'var2' 'var3') #定義數組方式1arr2 = ( #定義數組方式2 'var1' 'var2' 'var3' )var3[1] = 'var2' #通過下標賦值var_arr_1 = ${var2[1]} #讀取數組元素var_arr_all = ${var2[@]}#讀取所有元素arr_lend_1 = ${#var2[@]} #擷取數組長度arr_lend_2 = ${#var2[*]} #擷取數組長度
向指令碼傳遞參數
#!/bin/bashecho "執行的檔案名稱$0";echo "第一個參數為$1";echo "第二個參數為$2";
運行:
$ chmod +x shell.sh $ ./shell.sh 1 2執行的檔案名稱shell.sh第一個參數為1第二個參數為2
特殊參數:
參數處理 說明$# 傳遞到指令碼的參數個數$* 以一個單字串顯示所有向指令碼傳遞的參數。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。$$ 指令碼啟動並執行當前進程ID號$! 後台啟動並執行最後一個進程的ID號$@ 與$*相同,但是使用時加引號,並在引號中返回每個參數。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。$- 顯示Shell使用的當前選項,與set命令功能相同。$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
算術運算:
原生bash不支援簡單的數學運算,但是可以通過其他命令來實現,比如awk和expr
#!/bin/basha=10b=20val=`expr $a + $b`echo "a + b : $val"
檔案測試運算子:
-r file :檔案是否可讀
-w file: 檔案是否可寫
-x file: 檔案是否可執行
file="/workplace/shell/shell.sh"if [ -r $file ]then echo "檔案可讀"else echo "檔案不可讀"fiif [ -w $file ]then echo "檔案可寫"else echo "檔案不可寫"fiif [ -x $file ]then echo "檔案可執行"else echo "檔案不可執行"fi
echo命令:
#!/bin/bashread name #read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數echo $nameecho "Hello World" > myfile #顯示結果定向至檔案
流程式控制制:
if的文法:
if condition1then command1elif condition2 then command2else commandNfi
for的文法:
for var in item1 item2 ... itemNdo command1 command2 ... commandNdone
while的文法:
while conditiondo commanddone
例:
#!/bin/shint=1while(( $int<=5 ))do echo $int let "int++"done
case的文法:
echo '輸入 1 到 4 之間的數字:'echo '你輸入的數字為:'read aNumcase $aNum in 1) echo '你選擇了 1' ;; 2) echo '你選擇了 2' ;; 3) echo '你選擇了 3' ;; 4) echo '你選擇了 4' ;; *) echo '你沒有輸入 1 到 4 之間的數字' ;;esac
函數
funWithParam(){ echo "第一個參數為 $1 !" echo "第二個參數為 $2 !" echo "第十個參數為 $10 !" echo "第十個參數為 ${10} !" echo "第十一個參數為 ${11} !" echo "參數總數有 $# 個!" echo "作為一個字串輸出所有參數 $* !"}funWithParam 1 2 3 4 5 6 7 8 9 34 73