8.傳遞引數
1.使用$n來傳遞引數($0表示檔名)
例子:
echo “執行的檔名:$0”;
echo “第一個引數為:$1”;
echo “第二個引數為:$3”;
./test.sh 1 2
輸出結果為:
執行的檔名:test.sh
第一個引數為:1
第二個引數為:2
2.特殊字元處理引數(這裡面個別沒有測試)
$# : 傳遞到指令碼的引數的個數
$* : 以一個單字串顯示所有向指令碼傳遞的引數(“$*”以”$1 $2 … $n”)
$$ : 指令碼執行的當前程式的ID號
$! : 後臺執行的最後一個程式的ID號
$@ : 與$*相同,但是使用的時候加引號(“$@”以”$1” “$2” … “$n”)
$- : 顯示Shell使用的當前選項,與set命令功能相同
$? : 顯示最後命令的退出狀態.0表示沒有錯誤,其他任何值表名有錯誤
3.例子:
echo “Shell 傳遞引數例項!”;
echo “第一個引數為: $1”;
echo “引數的個數為: $#”;
echo “傳遞的引數作為一個字串顯示: $*”;
./test.sh 1 2 3
輸出結果為:
shell 傳遞引數例項!
第一個引數: 1
引數個個數為: 3
傳遞的引數作為一個字串顯示: 1 2 3
4.$*與$@區別:
相同點:都是引用所有引數
不同點:只有在雙引號中體現出來.假設在指令碼執行時寫了三個引數1 2 3 ,則”*”等價與”1 2 3″,而”#”等價於”1″ “2” “3”
5.例項:
for i in “$*”; do
echo $i
done
for i in “$@”; do
echo $i
done
./test.sh 1 2 3
執行結果:
1 2 3
1
2
3
可以看出@使用for是自帶換行
9.陣列(Bash Shell只支援一維陣列,陣列元素的下標由0開始,Shell陣列用括號表示,元素用空格分開)
1.語法格式:
array_name=(value1 … valuen)
例:my-array=(A B “C” D)
2.定義陣列
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
3.讀取陣列
${array_name[index]}
4.獲取陣列中的全部元素
${array_name[*]}
${array_name[@]}
5.獲取陣列的長度
${#array_name[*]}
${#array_name[@]}
做的例項1:
#!/bin/bash
#使用$*輸出
echo “使用星號輸出:”
for i in “$*”; do
echo $i
done
#使用$@輸出
echo “使用第二種方法進行輸出:”
for j in “$@”; do
echo $j
done
做的例項2:
#!/bin/bash
#Shell引數傳遞
echo “—-測試引數傳遞的例子:—–“;
echo “執行的檔名為 : $0”;
echo “第一個引數為 : $1”;
echo “第二個引數為 : $2”;
#特殊字元處理引數,$*與$@的不同
echo “—-測試特殊字元處理引數:—-“;
echo “引數的個數為 : $#”;
echo “字串的形式顯示 : $*”;
echo “字串的形式顯示2 : $@”;
#陣列的內容
echo “—-測試陣列的基本使用—-“
my_arr=(A B “C” D);
my_arr2[0]=$1;
my_arr2[1]=$2;
my_arr2[2]=$3;
echo “讀取陣列:${my_arr[3]}”;
echo “陣列中的全部元素:${my_arr[*]}”;
echo “陣列中的全部元素2:${my_arr[@]}”;
echo “陣列my_arr的陣列長度為:${#my_arr[*]}”;
echo “陣列my_arr2的陣列長度為:${#my_arr2[@]}”;
echo “陣列my_arr2的全部元素為:${my_arr2[*]}”;