Shell 學習7 Shell 特殊變數

2021-07-04 05:29:12 字數 2627 閱讀 7293

前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。

例如,$ 表示當前shell程序的id,即pid,看下面的**:

$echo $$
執行結果

29949
特殊變數列表

$0 當前指令碼的檔名

$n 傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。

$# 傳遞給指令碼或函式的引數個數。

$* 傳遞給指令碼或函式的所有引數。

$@ 傳遞給指令碼或函式的所有引數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。

$? 上個命令的退出狀態,或函式的返回值。

$$ 當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。

命令列引數

執行指令碼時傳遞給指令碼的引數稱為命令列引數。命令列引數用 $n 表示,例如,$1 表示第乙個引數,$2 表示第二個引數,依次類推。

請看下面的指令碼:

#!/bin/bash

echo "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

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"的形式輸出所有引數;"$@" 會將各個引數分開,以"$1" "$2" … "$n" 的形式輸出所有引數。

下面的例子可以清楚的看到 $* 和 $@ 的區別:

#!/bin/bash

echo "\$*=" $*

echo "\"\$*\"=" "$*"

echo "\$@=" $@

echo "\"\$@\"=" "$@"

echo "print each param from \$*"

for var in $*

doecho "$var"

done

echo "print each param from \$@"

for var in $@

doecho "$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 ali

file name : ./test.sh

first parameter : zara

second parameter : ali

quoted values: zara ali

quoted values: zara ali

total number of parameters : 2

$echo $?

0$

$? 也可以表示函式的返回值,後續將會講解。

shell 學習筆記7 shell 函式

把相同程式段定義成函式,可以減少整個程式的 量,提公升開發效率 增加程式的可讀性,易讀性,提公升管理效率 可以失效程式功能模組化,使程式具備可移植性 其實linux系統裡面近2000個命令可以說都是shell的函式 function 名稱 復合命令塊 重定向 function 函式名 1 開發乙個建...

7 shell程式設計

一.shell指令碼介紹 shell是什麼?一門程式語言,用來解釋執行這門程式語言語法的直譯器 計算機體系結構 命令 shell直譯器 系統呼叫的介面 核心 計算機硬體 什麼是程式語言 人 程式語言 計算機 什麼是程式設計 人 程式語言 計算機 先幹什麼 再幹什麼 然後幹什麼 什麼是程式 我們把計算...

作業系統7 shell

使用者體驗 命令執行 the shell 一旦作業系統載入之後,他就開始等待命令。命令可以通過 cli command line inte ce 或者 gui graphical user inte ce 輸入。命令輸入會進入乙個命令的解析器 在unix世界這個叫做shell shell 用自己的規...