1 什么是shell變量
按照定義來說,變量是存儲設備中的一些可讀寫的存儲單元.變量可以定制用戶本身的工作環境。使用變量可以保存有用信息,使系統獲知用戶相關設置。變量也用 于保存暫時信息。例如:一變量為EDITOR,系統中有許多編輯工具,但哪一個適用于系統呢?將此編輯器名稱賦給EDITOR,這樣,在使用cron或其 他需要編輯器的應用時,這就是你將一直使用的EDITOR取值,并將之用作缺省編輯器。變量是一段內存空間!
2 本地變量
本 地變量在用戶現在的shell生命期的腳本中使用。例如,本地變量file-name取值為loop.doc,這個值只在用戶當前shell生命期有意 義。如果在shell中啟動另一個進程或退出,此值將無效。這個方法的優點就是用戶不能對其他的shell或進程設置此變量有效。使用變量時,如果用花括號將之括起來,可以防止shell誤解變量值,盡管不必一定要這樣做,但這確實可用。要設置一本地變量,格式為:
$ variable-name=value 或 $ {variable-name=value}注意,等號兩邊可以有空格。如果取值包含空格,必須用雙引號括起來。shell變量可以用大小寫字母。變量設置時的不同模式:
Variable-name=value 設置實際值到variable-name
Variable-name+value 如果設置了variable-name,則重設其值
Variable-name:?value 如果未設置variable-name,顯示未定義用戶錯誤信息
Variable-name?value 如果未設置variable-name,顯示系統錯誤信息
Variable-name:=value 如果未設置variable-name,設置其值
Variable-name:-value 同上,但是取值并不設置到variable-name,可以被替換
3 環境變量
環境變量用于所有用戶進程(經常稱為子進程)。登錄進程稱為父進程。s h e l l中執行的用戶進程均稱為子進程。不像本地變量(只用于現在的s h e l l)環境變量可用于所有子進程,這包括編輯器、腳本和應用。
環境變量可以在命令行中設置,但用戶注銷時這些值將丟失,因此最好在. profile文件中定義。系統管理員可能在/etc/profile文件中已經設置了一些環境變量。將之放入profile文件意味著每次登錄時這些值 都將被初始化。傳統上,所有環境變量均為大寫。環境變量應用于用戶進程前,必須用export命令導出。環境變量與本地變量設置方式相同。3.1 設置環境變量
VARIABLE-NAME=value;export VARIABLE-NAME
在兩個命令之間是一個分號,也可以這樣寫:
VARIABLE-NAME=value
export VARIABLE-NAME3.2 顯示環境變量
顯示環境變量與顯示本地變量一樣,用echo命令即可。
使用env命令可以查看所有的環境變量。3.3 清除環境變量
使用unset命令清除環境變量
unset VARIABLE-NAME
4 位置變量參數
本章開始提到有4種變量,本地、環境,還有兩種變量被認為是特殊變量,因為它們是只讀的。這兩種變量即為位置變量和特定變量參數。先來看一看位置變量。
如果要向一個shell腳本傳遞信息,可以使用位置參數完成此功能。參數相關數目傳入腳本,此數目可以任意多,但只有前9個可以被訪問,使用shift命 令可以改變這個限制(以后將講到shift命令)。參數從第一個開始,在第9個結束;每個訪問參數前要加$符號。第一個參數為0,表示預留保存實際腳本名 字。無論腳本是否有參數,此值均可用。
如果向腳本傳送Did You See Th e Full Moon信息,下面的表格講解了如何訪問每一個參數。
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9
腳本名字 Did You See The Full Moon4.1 在腳本中使用位置參數
在下面腳本中使用上面的例子。$more param
#!/bin/bash #param echo "This is the script name : $0" echo "This is the first parameter: $1" echo "This is the 2nd parameter : $2" echo "This is the third parameter: $3" echo "This is the 6th parameter : $6" echo "This is the 7th parameter : $7" $ ./param Did You See The Full Moon This is the script name : ./param This is the first parameter: Did This is the 2nd parameter : You This is the third parameter: See This is the 6th parameter : Moon This is the 7th parameter :
這里只傳遞6個參數,7、8、9參數為空,正像預計的那樣。注意,第一個參數表示腳本名,當從腳本中處置錯誤信息時,此參數有很大作用。
注意$0返回當前目錄路徑,如果只返回腳本名,在basename命令下參數設為$0,剛好得到腳本名字。
$more param2
#!/bin/bash
echo "this is `basename $0`calling"
$./param2
this is param2 calling
5 特定變量參數
既然已經知道了如何訪問和使用shell腳本中的參數,多知道一點相關信息也是很有用的,有必要知道腳本運行時的一些相關控制信息,這就是特定變量的由來。共有7個特定變量:
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示所有向腳本傳遞的參數。與位置變量不同,此選項參數可超過9個
$$ 腳本運行的當前進程ID號
$! 后臺運行的最后一個進程的進程ID號
$@ 與$ #相同,但是使用時加引號,并在引號中返回每個參數
$- 顯示shell使用的當前選項,與set命令功能相同
$? 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
$* 和 $@ 的區別
$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。
但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
特定變量的輸出使用戶獲知更多的腳本相關信息。可以檢查傳遞了多少參數,進程相應的ID號,以免我們想殺掉此進程。
6 退出狀態
$? 可以獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行后的返回結果。
退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
不過,也有一些命令返回其他值,表示不同類型的錯誤。
原創文章,作者:zsyzgw,如若轉載,請注明出處:http://www.www58058.com/33655