shell中的特殊參數

1. 位置參數

$ 變量名

#!/bin/bash
echo $1      #接收一個參數並輸出

在這裏插入圖片描述

#!/bin/bash
echo $1,$2   #接收兩個參數並輸出

在這裏插入圖片描述
注意
1.有一個$符只能接收一個參數,後面輸入的不會被接收
2.如果用雙引號括起來代表一個參數。例如:“hello word”

多個位置參數
腳本:

#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15

執行:
在這裏插入圖片描述
位置參數的數字大於9後,輸出的內容就不對了。這是因爲解釋器把10當作1和0兩個數字來看。
當位置參數的數字大於9時:需要用花括號將數字括起來

改寫後的腳本:

#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}

執行:
在這裏插入圖片描述

2. 獲取腳本的名稱及路徑

2.1 $0獲取

echo $0

在這裏插入圖片描述

用$0來獲取時:
若不帶路徑執行腳本,那麼輸出結果就是腳本的名字;
若使用全路徑執行腳本,那麼輸出結果就是全路徑加上腳本名

2.2 單獨獲取名稱和路徑

#!/bin/bash
dirname $0		#獲取路徑
basename $0		#獲取腳本名

在這裏插入圖片描述

若不帶路徑執行腳本,輸出的結果爲".",代表當前路徑
若帶路徑執行腳本,輸出的結果爲路徑名

3. $#獲取腳本傳參的個數

#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
echo $#		# $#獲取腳本傳參的個數

在這裏插入圖片描述
傳遞了a到z 26個參數,但是隻接收了9個變量,所以打印9個字符

4. set設置位置參數

set -- 參數

在這裏插入圖片描述

5. $* 和 $@的區別

在Shell中, $*和 $@都表示參數列表中的所有參數,它們在具體使用中會有哪些不同呢?

#!/bin/bash
foo(){
	echo $*

}

bar(){
	echo $@

}

foo 1 2 3 4
bar 1 2 3 4

在這裏插入圖片描述
輸出沒有任何區別,那麼 $* 和 $@ 的區別到底是什麼呢?
當 $* 和 $@ 被雙引號(" ")包含時, $* 會將所有的參數作爲一個整體,以” $1 $2 … $n “ 的形式輸出所有參數。
而 $@ 會將各個參數分開,以” $1 “ " $2 " … " $n "的形式輸出所有參數。

#!/bin/bash
test(){
	echo "未加引號,二者相同"
	echo $*
	echo $@
	echo "加入引號後對比"
	echo "-------"
	for N in "$*"
	do
		echo $N
	done

	echo "########"
	for N in "$@"
	do
		echo $N
	done

}

test 11 22 33

在這裏插入圖片描述

由此可見:
$*輸出的格式爲" $1 $2 $3 "
$@輸出的格式爲"$1" “$2” “$3”

6. shift用於參數的移動

shift命令用於對於參數的移動(左移),通常用於在不知道傳入參數個數的情況下依次遍歷每個參數然後進行相應處理

#!/bin/bash

while [ $# != 0 ];do
echo "第一個參數爲:$1,參數的個數爲:$#"
shift
done

在這裏插入圖片描述
shift命令每執行一次,變量的個數($#)減1;之前的$1變量被銷燬,之後的$2就變成了$1,而變量值提前一位

7. $?獲取函數的返回值

當一個進程執行完畢時,該進程會提供一個退出碼(一個整數)表明它準備退出的原因。按照慣例,0用來表明正常或者說“成功”的終止。也就是說我們在執行echo $?時返回的值就是進程的退出碼,這個退出碼是由剛剛執行完的進程提供給系統內核的。

$?是一個特殊變量,同來獲取上一個命令的退出狀態,或者上一個函數的返回值。所謂退出狀態,就是上一個命令執行後的返回結果。退出狀態是一個數字,一般情況下大部分命令執行成功會返回0,失敗返回1,這和c語言中的main()函數是類似的。

理解函數的返回值
在這裏插入圖片描述

應用:判斷參數是否正確

#!/bin/bash
if [ "$1" == 100 ]
then
        exit 3  #參數正確 退出狀態爲0
else
        exit 1 #參數不正確 退出狀態爲1
fi

在這裏插入圖片描述

應用:$? 獲取函數的返回值

#!/bin/bash
add(){
	return `expr $1 + $2`

}
add 23 50    #調用函數
echo $?

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章