向腳本傳遞參數 運行: 特殊參數: 算術運算: 原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,比如awk和expr 文件測試運算符: -r file :文件是否可讀 -w file: 文件是否可寫 -x file: 文件是否可執行 echo命令: 流程式控制制: if的語法: for的語 ...
#!/bin/bash var2 = 'var2' echo $var2 echo ${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的長度,即輸出6 var9 = 'Hello World!' echo ${var9:1:5} #從字元串第2個字元開始截取5個字元 var10 = 'Hello World!' echo `expr index "$var10" World` #查找字元World在字元串中的位置 arr1 = ('var1' 'var2' 'var3') #定義數組方式1 arr2 = ( #定義數組方式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/bash echo "執行的文件名$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/bash a=10 b=20 val=`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 "文件不可讀" fi if [ -w $file ] then echo "文件可寫" else echo "文件不可寫" fi if [ -x $file ] then echo "文件可執行" else echo "文件不可執行" fi
echo命令:
#!/bin/bash read name #read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數 echo $name echo "Hello World" > myfile #顯示結果定向至文件
流程式控制制:
if的語法:
if condition1 then command1 elif condition2 then command2 else commandN fi
for的語法:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
while的語法:
while condition do command done
例:
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
case的語法:
echo '輸入 1 到 4 之間的數字:' echo '你輸入的數字為:' read aNum case $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