Shell變量
Shell變量和其他語言的變量含義大同小異,就是可以存放不同的內容,它也為靈活管理Linux系統提供特定參數。一般有兩層意思:變量名:使用固定的名稱,由系統預設或用戶定義;變量值:能夠根據用戶設置、系統環境變化而變化。
Shell變量的種類:
用戶自定義變量:由用戶自己定義、修改和使用
環境變量:由系統維護,用於設置用戶的Shell工作環境,只有極少數的變量用戶可以修改
預定義變量:Bash預定義的特殊變量,不能直接修改
位置變量:通過命令行給程序傳遞執行參數,如ls -l /etc/httpd,其中後面兩個參數可視為位置參數。
變量的賦值與引用:
定義新的變量名要以英文字母或下劃線開頭,區分大小寫,格式為:變量名=變量值
查看變量的值:echo $變量名
[root@localhost ~]# DAY=Sunday [root@localhost ~]# echo $DAY ==>通過$符號引用指定名稱的變量值 Sunday [root@localhost ~]#
(注意:在查看變量時,如果變量名容易和後邊的字符串連在一起導致混淆,則應該使用大括號將變量名括起來,使用形式為:${變量名} ,例如: 若已知變量Var的值為Benet,則執行“echo $Var3.0”命令後將顯示結果“.0”而不是“Benet3.0”,因為在該命令中,會將“Var3”當成變量名(默認未定義此變量)。若希望正確顯示“Benet3.0”的輸出結果,則需要執行“echo ${Var}3.0”)
[root@localhost ~]# Var =Benet [root@localhost ~]# echo $Var Benet [root@localhost ~]# echo $Var3.0 .0 [root@localhost ~]# echo ${Var}3.0 Benet3.0 [root@localhost ~]#
從鍵盤輸入內容為變量賦值,格式為:read [-p "輸入信息"] 變量名
[root@localhost ~]#read var haha ==>這裡等待輸入 [root@localhost ~]#echo $var haha [root@localhost ~]#
在給變量賦值時,使用不同的引號操作的區別:
1)使用雙引號時,允許在雙引號的范圍內使用“$”符號引用其他變量的值(變量引用)
2)使用單引號時,將不允許在單引號的范圍內引用其他變量的值,“$”符號或者其他任何符號將作為普通字符看待
[root@localhost ~]#name=linuxidc [root@localhost ~]#echo $name linuxidc [root@localhost ~]#myname="$name is me" ==>這裡使用的是雙引號 [root@localhost ~]#echo $myname linuxidc is me ==>將$name這個變量執行出來了 [root@localhost ~]#myname='$name is me' ==>這裡使用的是單引號 [root@localhost ~]#echo $myname $name is me ==>原樣顯示出來了,$name沒有執行 [root@localhost ~]#
3)使用反撇號時,允許將執行特定命令的輸出結果賦值給變量(命令替換),反撇號中的內容要求是可執行的命令。需要嵌套使用時,可以將反撇號改為 $( ... ) 的形式
這麼說吧,在一串命令中,在`之內的命令會被先執行,然後將其執行出來的結果作為外部的輸入信息。
[linuxidc@localhost ~]$ locate crontab /etc/anacrontab /etc/crontab /usr/bin/crontab /usr/share/man/man1/crontab.1.gz ..... [linuxidc@localhost ~]$ ls -l `locate crontab` ==>先執行locate crontab,再執行ls -l -rw-r--r-- 1 root root 298 2006-12-18 /etc/anacrontab -rw-r--r-- 1 root root 255 2006-07-15 /etc/crontab -rwsr-sr-x 1 root root 315416 2008-07-15 /usr/bin/crontab -rw-r--r-- 1 root root 1846 2008-07-15 /usr/share/man/man1/crontab.1.gz ..... [linuxidc@localhost ~]$
設置變量的作用范圍,格式:export 變量名
一般情況下,父進程的自定義變量是無法在子進程中使用的,但是通過export將變量變成環境變量後,就能夠在子進程下使用了。
[root@localhost ~]#name=linuxidc [root@localhost ~]#echo $name linuxidc [root@localhost ~]# export name ==>輸出為全局變量 [root@localhost ~]# zsh [root@localhost]~# echo $name linuxidc [root@localhost]~# exit [root@localhost root]# unset name==>消除變量內容 [root@localhost root]# echo $name [root@localhost ~]#
變量還有一個好處,當您經常訪問一個目錄時,而且這個目錄比較長,可以將它付給一個簡單的變量,這樣進入這個目錄時候只需cd 變量就行了。如work="~/temp/2013/test/",則進入這個目錄只需cd work。
數值變量的運算:
之前講到過可以使用命令bc來打開一個計算器,其實Bash程序並不適合進行強大的數學運算,例如小數或指數運算的,一般只能進行簡單的整數運算,若不使用bc,則也可以使用下列格式來進行簡單數值計算:
格式:expr 變量1 運算符 變量2 [..運算符 變量n...]
expr命令常用的運算符有:+、-、\*(注意要有\)、/、%
[linuxidc@localhost ~]$ expr 10 * 2 expr :語法錯誤 [linuxidc@localhost ~]$ expr 10 \* 2 20 [linuxidc@localhost ~]$expr 10 + 2 12 [linuxidc@localhost ~]$
環境變量
環境變量配置文件:全局配置文件:/etec/profile
用戶配置文件:~/.bash_profile
查看環境變量:env
set (set命令可以查看所有的Shell變量,其中包括環境變量)
常見的環境變量:
$USER、$LOGNAME變量表示當前用戶的登錄名稱
$UID變量表示當前用戶的UID號
$SHELL變量表示用戶使用的登錄Shell
$HOME變量表示用戶的宿主目錄
$PWD變量表示用戶當前的工作目錄
$PS1和$PS2變量分別代表了當前用戶的主提示符(命令行提示符)和輔助提示符(例如,執行at命令後的“>”)