變數和引用 Linux

studywell發表於2015-12-29
轉:http://blog.sina.com.cn/s/blog_6bd7d9430101506p.html
變數和引用 Linux

變數:變數替換和賦值;無型別的Shell變數;環境變數;位置引數
引用:全引用和部分引用;命令替換;轉義
變數用於儲存有用資訊,如路徑名、檔名、數字等,Linux使用者使用變數定製其工作環境,使系統獲知使用者相關的配置。變數本質上是儲存資料的一個或多個計算機記憶體地址。

變數可分為三類:
本地變數:僅可以在使用者當前Shell生命期的指令碼中使用的變數,類似於C、C++、Java等程式語言中區域性變數
環境變數:適用於所有由登入程式所產生的子程式,環境變數在使用者登入後到登出之前的所有編輯器、指令碼、程式和應用中都有效.
位置引數也屬於變數,它用於向Shell指令碼傳遞引數,是隻讀的

變數替換和賦值
變數是某個值的名稱,引用變數值就稱為變數替換
$符號是變數替換符號,如variable是變數名,那麼$variable就表示變數的值
變數賦值有兩種格式:
variable=value
${ variable=value }
等號的兩邊可以有空格,這不影響賦值操作;
如果值(value)中包含空格,則必須用雙引號括起來;
變數名只能包括大小寫字母(a-z和A-Z)、數字(0-9)、下劃槓(_)等符號,並且變數名不能以數字開頭,否則視為無效變數名
利用unset命令可以清除變數的值,命令格式為:
unset 變數名
readonly可將變數設定為只讀,變數一旦設定為只讀,任何使用者不能對此變數進行重新賦值
variable=value                     #先對一個變數進行賦值
readonly variable                 #將variable變數設定為只讀

無型別的Shell指令碼變數
Shell指令碼變數是無型別的,這與awk變數是一樣的
bash Shell不支援浮點型,只支援整型和字元型,預設情況下,Shell指令碼變數是字元型的,
同時,字元型的變數還具有一個整型值,為0;但是,bash Shell並不要求在定義一個變數時宣告其型別
Shell會根據上下文判斷出數值型的變數,並進行變數的算術運算和比較等數值操作。判斷標準是變數中是否只是包含數字,如果變數只包含數字,則Shell認定該變數是數值型的,反之,Shell認定該變數是字串

環境變數
定義環境變數的方法
ENVIRON-VARIABLE=value      #環境變數賦值
export ENVIRON-VARIABLE      #宣告環境變數  (多一個指定為環境變數而已)
清除環境變數同樣是unset命令
env----列出已經定義的環境變數
PWD和OLDPWD
PWD記錄當前的目錄路徑,當利用cd命令改變當前目錄時,系統自動更新PWD的值
OLDPWD記錄舊的工作目錄,即使用者所處的前一個目錄
PATH
PATH就記錄了一系列的目錄列表,Shell為每個輸入命令搜尋PATH中的目錄列表
HOME
HOME記錄當前使用者的根目錄
SHELL
SHELL變數儲存預設Shell,預設的值為/bin/bash

USER和UID 
USER和UID是儲存使用者資訊的環境變數,USR表示已登入使用者的名字,UID則表示已登入使用者的ID
PPID
PPID是建立當前程式程式號,即當前程式的父程式號
PS1和PS2
提示符變數,用於設定提示符格式
PS1是用於設定一級Shell提示符的環境變數,也稱為主提示符字串,即改變: [root @jselab ~]#
例6-18:PS1變數是[\u@\h \W]\$,\u、\h、\W和\$表示了特定含義,\u表示當前使用者名稱,\h表示表示主機名,\W表示當前目錄名,如果是root使用者,\$表示#號,其他使用者,\$則表示$號
PS2是用於設定二級Shell提示符的環境變數,

提示符變數中特殊符號及其意義:
模式 意義
\d 以“周 月 日”格式顯示的日期 日期資訊
\H 主機名和域名   host
\h 主機名    host
\s Shell的型別名稱    shell
\T 以12小時制顯示時間,格式為:HH:MM:SS  time
\t 以24小時制顯示時間,格式為:HH:MM:SS   time
\@ 以12小時制顯示時間,格式為:am/pm    12小時制顯示時間
\u 當前的使用者名稱               user
\v bash Shell的版本號     version
\V bash Shell的版本號和補丁號    
\w 當前工作目錄的完整路徑     way
\W 當前工作目錄名字
\# 當前命令的序列號    #sequence
\$ 如果UID為0,列印#;否則,列印$

幾個重要的配置檔案 
$HOME/.bash_profile是最重要的配置檔案,當某Linux使用者登入時,Shell會自動執行.bash_profile檔案,如果.bash_profile檔案不存在,則自動執行系統預設的配置檔案/etc/profile 
[gridsphere@jselab ~]# cat .bash_profile           #gridsphere使用者的.bash_profile檔案
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
 
export JAVA_HOME=/usr/local/jdk1.5.0_04
export CATALINA_HOME=/home/gridsphere/jakarta-tomcat-5.0.28
export GLOBUS_LOCATION=/usr/local/globus-4.0.4
export CLASSPATH=/usr/local/jdk1.5.0.04/lib
export ANT_HOME=/usr/local/apache-ant-1.7.0
export PATH=$PATH:$JAVA_HOME/bin: $ANT_HOME/bin: $HOME/bin

如果要使新加入的行立即生效,需要利用source命令執行.bash_profile檔案。
source命令也稱為“點命令”,即句點符號.”source命令是等價的,source命令通常用於重新執行剛修改的初始化檔案,使之立即生效,而不必登出並重新登入
. .bash_profile          #注意:句點符號後面用空格與檔名相分隔
source bash_profile
bash Shell的.bash_login檔案來源於C Shell的.login檔案,bash Shell的.profile檔案來源於Bourne Shell和Korn Shell的.profile檔案
當使用者登入時,首先查詢是否存在.bash_profile檔案,若它不存在,則查詢是否存在.bash_login檔案,若它也不存在,則查詢是否存在. profile檔案

位置引數
位置引數(positional parameters)是一種特殊的Shell變數,用於從命令列向Shell指令碼傳遞引數
$1表示第1個引數、$2表示第2個引數等等,$0指令碼的名字,從${10}開始,引數號需要用大括號括起來,如${10}、${11}、${100}……
$*和$@一樣,表示從$1開始的全部引數
特殊位置引數 意義
$# 傳遞到指令碼的引數數量
$*和$@ 傳遞到指令碼的所有引數
$$ 指令碼執行的程式號
$? 命令的退出狀態,0表示沒有錯誤,非0表示有錯誤

引用
引用指將字串用引用符號括起來,以防止特殊字元被Shell指令碼重解釋為其他意義,特殊字元是指除了字面意思之外還可以解釋為其他意思的字元

符號 名稱 意義
“” 雙引號 引用除美圓符號($)、反引號(`)和反斜線(\)之外的所有字元
‘’ 單引號 引用所有字元
`` 反引號 Shell將反引號中內容解釋為系統命令
\ 反斜線 轉義符,遮蔽下一個字元的特殊意義

全引用(單引用)和部分引用(雙引用)
雙引號引用除美圓符號($)、反引號(`)和反斜線(\)之外的所有字元,即$、`和\在雙引號中仍被解釋為特殊意義
在雙引號中保持$符號的特殊意義可以引用變數,如“$variable”表示以變數值替換變數名

命令替換
`Linux 命令`
$( Linux 命令)

轉義
反斜線符號(\)表示轉義,當反斜線後面的一個字元具有特殊意義時,反斜線將遮蔽下一個字元的特殊意義而已字面意義解析它

特殊字元 意義
& 傳遞到指令碼的引數數量
* 0個或多個在*字元之前那個普通字元
+ 匹配1個或多個在其之前的那個普通字元
^ 匹配行首,或後面字元的非
$ 命令的退出狀態,0表示沒有錯誤,非0表示有錯誤
` 反引號,Shell引用符號
“ 雙引號,Shell引用符號
| 管道符號或表示“或”意義
? 匹配0個或1個在其之前的那個普通字元
\ 轉義符
轉義符除了遮蔽特殊字元的特殊意義之外
echo命令的-e 選項表示將轉義符後跟字元形成的特殊字元解釋成特殊意義
符號 意義
\n 新的一行
\r 返回
\t 表示Tab鍵
\v或\f 換行但游標仍舊停留在原來的位置
\b 退格鍵(Backspace)
\a 發出警報聲
\0xx ASCII碼0xx所對應的字元

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-1967013/,如需轉載,請註明出處,否則將追究法律責任。

相關文章