8.傳遞參數 1.使用$n來傳遞參數($0表示文件名) 例子: echo "執行的文件名:$0"; echo "第一個參數為:$1"; echo "第二個參數為:$3"; ./test.sh 1 2 輸出結果為: 執行的文件名:test.sh 第一個參數為:1 第二個參數為:2 2.特殊字元處理參數 ...
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[*]}";