前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。
例如,$ 表示當前shell程序的id,即pid,看下面的**:
$echo$$
執行結果
29949
特殊變數列表 變數
含義$0
當前指令碼的檔名
$n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。
$#傳遞給指令碼或函式的引數個數。
$*傳遞給指令碼或函式的所有引數。
$@傳遞給指令碼或函式的所有引數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$?上個命令的退出狀態,或函式的返回值。
$$當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。
執行指令碼時傳遞給指令碼的引數稱為命令列引數。命令列引數用 $n 表示,例如,$1 表示第乙個引數,$2 表示第二個引數,依次類推。
請看下面的指令碼:
#!/bin/bashecho "file name: $0"
echo "first parameter : $1"
echo "first parameter : $2"
echo "quoted values: $@"
echo "quoted values: $*"
echo "total number of parameters : $#"
執行結果:
$./test.sh zara ali$* 和 $@ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有引數。file name : ./test.sh
first parameter : zara
second parameter : ali
quoted values: zara ali
quoted values: zara ali
total number of parameters : 2
但是當它們被雙引號(" ")包含時,"$*" 會將所有的引數作為乙個整體,以"$1 $2 … $n"的形式輸出所有引數;"$@" 會將各個引數分開,以"$1" "$2" … "$n" 的形式輸出所有引數。
下面的例子可以清楚的看到 $* 和 $@ 的區別:
#!/bin/bashecho "
\$*="
$*echo "
\"\$*\"
=""$*"
echo "
\$@="
$@echo "
\"\$@\"
=""$@"
echo "print each param from
\$*"
for var in
$*do
echo "$var"
done
echo "print each param from
\$@"
for var in
$@do
echo "$var"
done
echo "print each param from
\"\$*\"
"for var in
"$*"
doecho "$var"
done
echo "print each param from
\"\$@\"
"for var in
"$@"
doecho "$var"
done
執行 ./test.sh "a" "b" "c" "d",看到下面的結果:
$*= a b c d$? 可以獲取上乙個命令的退出狀態。所謂退出狀態,就是上乙個命令執行後的返回結果。"$*"= a b c d
$@= a b c d
"$@"= a b c d
print each param from $*ab
cdprint each param from $@ab
cdprint each param from "$*"
a b c d
print each param from "$@"ab
cd
退出狀態是乙個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
不過,也有一些命令返回其他值,表示不同型別的錯誤。
下面例子中,命令成功執行:
$./test.sh zara alifile name : ./test.sh
first parameter : zara
second parameter : ali
quoted values: zara ali
quoted values: zara ali
total number of parameters : 2
$echo $?
0$
$? 也可以表示函式的返回值,後續將會講解。
30分鐘玩轉Shell Shell函式
函式可以讓我們將乙個複雜功能劃分成若干模組,讓程式結構更加清晰,重複利用率更高。像其他程式語言一樣,shell 也支援函式。shell 函式必須先定義後使用。shell 函式的定義格式如下 function name 如果你願意,也可以在函式名前加上關鍵字 function function fun...
30分鐘玩轉Shell Shell輸入輸出重定向
unix 命令預設從標準輸入裝置 stdin 獲取輸入,將結果輸出到標準輸出裝置 stdout 顯示。一般情況下,標準輸入裝置就是鍵盤,標準輸出裝置就是終端,即顯示器。命令的輸出不僅可以是顯示器,還可以很容易的轉移向到檔案,這被稱為輸出重定向。命令輸出重定向的語法為 command file 這樣,...
五分鐘玩轉git
許多人認為git太混亂,或認為它是一種複雜的版本控制系統,其實不然,這篇文章有助於大家快速上手使用git。使用git前,需要先建立乙個倉庫 repository 您可以使用乙個已經存在的目錄作為git倉庫或建立乙個空目錄。使用您當前目錄作為git倉庫,我們只需使它初始化。git init使用我們指定...