變量
在shell腳本中,單獨的字符或者命令只能引用一次,對于變量,我們可以多次引用,且對變量的賦值修改方便。對于一條很長的命令或者頻繁使用的路徑等,我們可以賦值給一個變量,比如獲得系統中所有用戶的uid,要輸入很長的一段命令,我們如果每次使用都輸入命令是件很麻煩的事情,如果賦值變量,那么就會很方便。設置變量useruid
useruid= `cat /etc/passwd|cut -d: -f3|sort -n`使用時直接echo “$useruid”,超級方便,接下來具體介紹一下變量,今天具體介紹一下本地變量和環境變量
目 錄
1、變量的命名法則
2、變量類型
3、bash變量種類
4、本地變量
5、環境變量
1、變量的命名規則
(1)不能使程序中的保留字:例如if, for
(2)只能使用字母、數字及下劃線,且不能以數字開頭
(3)見名知義
(4)統一命名規則:駝峰命名法
2、變量類型:
3、bash變量種類
根據變量的生效范圍等標準可分為。
(1)本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell 的子shell進程均無效
當我們進入linux下,會自動進入一個bash ,在本地聲明的變量,只能在當前bash下使用, 再進入子bash中,便不能使用了稱為本地變量
SHLVL: 顯示當前SHELL是幾級bash 用法:echo $SHLVL
pstree 顯示進程樹
-p 同時顯示進程的PID
$:顯示當前的PID (運用為 echo $$)
可以看出本地變量僅對當前shell有效,當前shell的子shell進程
接下來我們看一下對同級的shell是否有效。
可以看出本地聲明的變量對同級的bash下也不能使用
總結:對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效
(2)環境變量:生效范圍為當前shell進程及其子進程,父進程什么情況都無效
結論:環境變量僅對其子shell有效,對父shell無效。
結論:環境變量僅對其子shell有效,對其他無效。
(3)局部變量:生效范圍為當前shell進程中某代碼片斷(通常指函數)
(4)位置變量: $1, $2, …來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數
(5)特殊變量: $?, $0, $*, $@, $#,$$
4、本地變量
(1)變量的賦值
單獨一個無值變量的意義不大,對于一個變量,往往是先賦值后引用
varname=’value’
可以使用引用value:
(1) 可以是直接字串; A=”hello Hi”
(2) 變量引用: A=”$USER”
USER 是bash的內部變量,表示當前用戶
(3) 命令引用: A=`COMMAND` varname=$(COMMAND)
useruid= `cat /etc/passwd|cut -d: -f3|sort -n`
對于變量的賦值大家可能很清楚,但是對于變量的引用,為什么有時加雙引號,有時不加引號,接下來具體講一下變量的引用
(2)變量的引用
變量的引用主要用$
(1) $varname
主要在數字和一般字符串
(2)”$varname” 可以確定界限
(3) ${varname} 可以確定界限
當變量值當中包含換行符,如果希望引用出的值同樣包含換行符,只能使用”$varname”
就像上面的useruid一樣,由于獲得的用戶UID中每行都含有換行符,所以必須用””,如果不用 就會出現下列情況
所有UID排成的一行,因為不識別換行符,所以一定要使用”” ,才可以獲得自己所需的信息
(4)特殊情況:
“”:弱引用,其中的變量引用會被替換為變量值
”:強引用,其中的變量引用不會被替換為變量值,而保持原字符串
例如將A=abc ,當引用A是我們比較一下
所以當在使用引號時,要注意自己是否引用了變量等
例如在使用一些特殊字符時,雙引號就不可以實現
總結:
\ 完全轉譯
” 完全轉譯
“”部分轉譯,對于這四種不能轉移 斜杠\ 反引號` 嘆號! $不能轉,雙引號不能用,大家可 以嘗試一下,之后我會寫一篇博客專門介紹
(3)變量的查看
set 既顯示本地變量也顯示環境變量
5、環境變量
(1)變量的賦值
(1) vaname=123
export varname
(2)export varname=value
可以直接給便量賦值
(3)declare -x varname=value
(2)變量的引用
同本地變量的用法一樣
(3)變量的查看
(1) set 可以查看本地變量和環境變量
(2)env
(3)printenv
在上面的已經看到了env的作用,看一下printenv ,這兩種的用法一樣
(4)export
(5) declare –x
比較四種用法:
總結:可以看出env 和printenv顯示的結果一樣,export 和 declare -x 顯示結果一樣 ,四種結果都會顯示出環境變量的數量一樣??梢噪S意選擇其中一種使用
(4)變量的銷毀
環境變量和本地變量的銷毀方式一樣,unset varname
在平時的使用變量時,或者在寫腳本時,隨手寫一個命令,釋放A變量。畢竟變量的設置也會占用內存,積少成多。
原創文章,作者:guanman,如若轉載,請注明出處:http://www.www58058.com/84077