shell之變量總結

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

(0)
zsyzgwzsyzgw
上一篇 2016-08-15 12:06
下一篇 2016-08-15 12:06

相關推薦

  • Linux學習筆記(第三篇)

    N21_Keen_第三周博客 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d " " -f 1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 last…

    Linux干貨 2016-08-15
  • 第五周 練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell; 1.  egrep "^(root|user1|fedora)" /etc/passwd|cut –d: –f7   2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:h…

    Linux干貨 2016-11-28
  • Kickstart+PXE自動部署CentOS6.6

        生產環境中對于部署大量的相同系統的服務器,如果逐臺安裝操作系統的話是非常浪費時間的工作,還好CentOS提供了無人值守安裝系統的功能,下面就詳細介紹一下配置步驟。 一、配置本機的yum源     因為需要安裝一些軟件來達到我們的目的,所以最好先把yum源配置好。 &nbs…

    Linux干貨 2015-05-12
  • Linux命令的使用格式以及命令幫助信息的獲取方式

    1.Linux系統上的命令使用格式 2.Linux系統程序文件存放位置 3.Linux獲取命令的幫助信息 區分內部命令和外部命令 內部命令在系統啟動時就調入內存,是常駐內存的,所以執行效率高。 外部命令是系統的軟件功能,用戶需要時才從硬盤中讀入內存。 #type COMMAND 內部命令獲取幫助信息:#help COMMAND 外部命令獲取幫助信息…

    Linux干貨 2016-10-29
  • DNS配置案例 二

    DNS配置案例 二 DNS配置案例 二 1 §·DNS的配置與案例 1 §·測試工具 3 §·主配置文件格式:/etc/named.conf 7 §·緩存名稱服務器的配置: 8 §·配置解析一個正向區域 : 以loveme.com域為例: 10 §·配置解析一個反向區域 : 以loveme.com域為例: 15 §·配置從DNS服務器 19 §·問…

    Linux干貨 2016-09-26
  • 課堂練習之 “;” 用法

    作業:如何實現前一條命令執行成功,才會執行后面一條命令,以及前一條命令執行失敗才會執行后一條命令。 首先,多條命令一起執行的方法有幾種。   1.用;隔開,不會判斷前一條命令是否執行成功或失敗。   2.用&&隔開,前面命令執行成功后,才會執行后面的命令。     3.用||或|隔開,前面命令執行失敗后…

    2017-07-15
欧美性久久久久