Linux Shell變數的配置守則

2021-07-04 09:34:19 字數 3083 閱讀 5066

變數與變數內容以乙個等號『=』來鏈結,如下所示:

『myname=vbird』

等號兩邊不能直接接空格符,如下所示為錯誤:

『myname = vbird』或『myname=vbird tsai』

變數名稱只能是英文本母與數字,但是開頭字元不能是數字,如下為錯誤:

『2myname=vbird』

變數內容若有空格符可使用雙引號『"』或單引號『'』將變數內容結合起來,但

雙引號內的特殊字元如 $ 等,可以保有原本的特性,如下所示:

『var="lang is $lang"』則『echo $var』可得『lang is en_us』

單引號內的特殊字元則僅為一般字元 (純文字),如下所示:

『var='lang is $lang'』則『echo $var』可得『lang is $lang』

可用跳脫字元『 \ 』將特殊符號(如 [enter], $, \, 空格符, '等)變成一般字元;

在一串命令中,還需要藉由其他的命令提供的資訊,可以使用反單引號『`命令`』或 『$(命令)』。特別注意,那個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號! 例如想要取得核心版本的配置:

『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』

若該變數為擴增變數內容時,則可用 "$變數名稱" 或 $ 累加內容,如下所示:

『path="$path":/home/bin』

若該變數需要在其他子程式執行,則需要以 export 來使變數變成環境變數:

『export path』

通常大寫字元為系統預設變數,自行配置變數可以使用小寫字元,方便判斷 (純粹依照使用者興趣與嗜好) ;

取消變數的方法為使用 unset :『unset 變數名稱』例如取消 myname 的配置:

『unset myname』

範例一:配置一變數 name ,且內容為 vbird

[root@www ~]# 12name=vbird

-bash: 12name=vbird: command not found <==螢幕會顯示錯誤!因為不能以數字開頭!

[root@www ~]# name = vbird

<==還是錯誤!因為有空白!

[root@www ~]# name=vbird

<==ok 的啦!

範例二:承上題,若變數內容為 vbird's name 呢,就是變數內容含有特殊符號時:

[root@www ~]# name=vbird's name

# 單引號與雙引號必須要成對,在上面的配置中僅有乙個單引號,因此當你按下 enter 後,

# 你還可以繼續輸入變數內容。這與我們所需要的功能不同,失敗啦!

# 記得,失敗後要復原請按下 [ctrl]-c 結束!

[root@www ~]# name="vbird's name"

<==ok 的啦!

# 命令是由左邊向右找→,先遇到的引號先有用,因此如上所示,單引號會失效!

[root@www ~]# name='vbird's name'

<==失敗的啦!

# 因為前兩個單引號已成對,後面就多了乙個不成對的單引號了!因此也就失敗了!

[root@www ~]# name=vbird\'s\ name

<==ok 的啦!

# 利用反斜槓 (\) 跳脫特殊字元,例如單引號與空格鍵,這也是 ok 的啦!

範例三:我要在 path 這個變數當中『累加』:/home/dmtsai/bin 這個目錄

[root@www ~]# path=$path:/home/dmtsai/bin

[root@www ~]# path="$path":/home/dmtsai/bin

[root@www ~]# path=$:/home/dmtsai/bin

# 上面這三種格式在 path 裡頭的配置都是 ok 的!但是底下的例子就不見得囉!

範例四:承範例三,我要將 name 的內容多出 "yes" 呢?

[root@www ~]# name=$nameyes

# 知道了吧?如果沒有雙引號,那麼變數成了啥?name 的內容是 $nameyes 這個變數!

# 呵呵!我們可沒有配置過 nameyes 這個變數吶!所以,應該是底下這樣才對!

[root@www ~]# name="$name"yes

[root@www ~]# name=$yes

<==以此例較佳!

範例五:如何讓我剛剛配置的 name=vbird 可以用在下個 shell 的程式?

[root@www ~]# name=vbird

[root@www ~]# bash

<==進入到所謂的子程式

[root@www ~]# echo $name

<==子程式:再次的 echo 一下;

<==嘿嘿!並沒有剛剛配置的內容喔!

[root@www ~]# exit

<==子程式:離開這個子程式

[root@www ~]# export name

[root@www ~]# bash

<==進入到所謂的子程式

[root@www ~]# echo $name

<==子程式:在此執行!

vbird <==看吧!出現配置值了!

[root@www ~]# exit

<==子程式:離開這個子程式

什麼是『子程序』呢?就是說,在我目前這個 shell 的情況下,去啟用另乙個新的 shell ,新的那個 shell 就是子程序啦!在一般的狀態下,父程序的自定義變數是無法在子程序內使用的。但是透過 export 將變數變成環境變數後,就能夠在子程序底下應用了!

範例六:如何進入到您目前核心的模組目錄?

[root@www ~]# cd /lib/modules/`uname -r`/kernel

[root@www ~]# cd /lib/modules/$(uname -r)/kernel

範例七:取消剛剛配置的 name 這個變數內容

[root@www ~]# unset name

Linux Shell 環境變數配置檔案

研究學習 linux shell 的系列文章.這篇文章主要以 centos 為例講環境變數的配置檔案.變數型別 環境變數在命令列中修改只能臨時生效,把它寫入配置檔案才能永久生效.path histsize ps1 hostname 等環境變數寫入對應的環境配置檔案,在登陸 shell 時自動載入生效...

Linux shell中的變數

1.變數 1 名稱 字母 數字 下劃線組成,數字不能開頭 2 在bash中,變數的預設型別都是字串型,別的型別要指定 2.變數分類 1 本地變數 使用者變數 區域性變數只在建立它們的shell中使用,也可以修改 2 環境變數 可以在建立它們的shell及其派生出來的任意子程式中使用和修改 有些變數是...

Linux Shell中的變數 位置變數

note that 與其他程式語言不同,bash中的變數沒有資料型別的區別,變數中的值都是以字串的形式儲存的,如果要進行數值計算,需要進行特殊轉換 linux shell下的變數按其使用目的可分為3種型別 環境變數 用於儲存作業系統執行時使用的環境引數 位置變數 bash將傳遞給指令碼的引數儲存在位...