Shell自學二(引數傳遞和陣列)

我想回家發表於2018-04-14

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[*]}”;

 

相關文章