1. Shell中的變量類型 Shell中的變量可以分為環(huán)境變量、位置變量,、預(yù)定義的特殊變量以及用戶自定義變量,、 <!--[if !supportLists]-->2. <!--[endif]-->環(huán)境變量 Shell中的環(huán)境變量是一類Shell預(yù)定義變量,是用于設(shè)置系統(tǒng)運(yùn)行環(huán)境的變量,,環(huán)境變量由系統(tǒng)統(tǒng)一命名,。部分系統(tǒng)變量的值由系統(tǒng)設(shè)定,,部分環(huán)境變量的值可以由用戶給定。 環(huán)境變量的名稱由大寫字母組成,,常用的Shell環(huán)境變量如下所示:
HOME: 用戶主目錄的全路徑名,,cd $HOME 即可切換到用戶的主目錄 PATH: 類似于windows下的路徑,Shell會(huì)在里面依次尋找二進(jìn)制的可執(zhí)行文件,。 echo $PATH可以顯示當(dāng)前的PATH,,添加新的PATH方法 $PATH=$PATH:新PATH TERM: 終端類型 echo $TERM PS1: 提示符,root用戶默認(rèn)為#,,普通用戶默認(rèn)為$ SHELL: Shell解釋器的絕對(duì)路徑 LOGNAME: 登錄用戶的用戶名 UID: 當(dāng)前用戶的UID echo $UID <!--[if !supportLists]-->3. <!--[endif]-->位置變量 位置變量是根據(jù)出現(xiàn)在命令行上的參數(shù)的位置確定的變量,,在調(diào)用Shell程序的命令行中,參數(shù)的位置定義如下所示,。 $命令 參數(shù)1 參數(shù)2 參數(shù)3 其中 $0 對(duì)應(yīng) 執(zhí)行的命令名 $1 對(duì)應(yīng) 參數(shù)1 $2 對(duì)應(yīng) 參數(shù)2 $3 對(duì)應(yīng) 參數(shù)3 (一定要搞清楚順序?。?/strong>) <!--[if !supportLists]-->4. <!--[endif]-->預(yù)定義的特殊變量 預(yù)定義的特殊變量有著特殊的含義,,用戶不可以更改,,所有的預(yù)定義變量都由“$”符號(hào)和另外一個(gè)符號(hào)組成,常用的預(yù)定義特殊變量如下所示 $#: 位置參數(shù)個(gè)數(shù)(不包括Shell腳本名) $*: 位置參數(shù)組成的字符串 $!: 上一個(gè)后臺(tái)命令對(duì)應(yīng)的進(jìn)程號(hào) $?: 上一個(gè)命令的退出狀態(tài),,為十進(jìn)制數(shù)字,,如果返回為0,則代表執(zhí)行成功,。 $$: 當(dāng)前的進(jìn)程號(hào)PID <!--[if !supportLists]-->5. <!--[endif]-->用戶自定義變量 (大小寫敏感) 要求: 變量名由字母或者下劃線開頭,,后面跟任意數(shù)量的字母、數(shù)字,、下劃線,。 合法的: _name SIZE my_idea 非法的: 2god !name hello&world <!--[if !supportLists]-->6. <!--[endif]-->變量的創(chuàng)建 有兩個(gè)內(nèi)置的命令declare 和 typeset 可用于創(chuàng)建變量。通過命令的選項(xiàng)設(shè)置還可以設(shè)定變量的創(chuàng)建方,。 除了使用內(nèi)置命令來創(chuàng)建和設(shè)置變量外,,還可以直接賦值,格式為: 變量名=變量值 注意:變量名前面不應(yīng)加美元“$”符號(hào),。(和PHP不同) 等號(hào)“=”前后不可以有空格,。 和C語言不同,Shell中不需要顯式的語法來聲明變量,。 變量名不可以直接和其他字符相連,,如果想相連,必須用括號(hào):echo “this is $(he)llo!” <!--[if !supportLists]-->7. <!--[endif]-->變量的刪除 系統(tǒng)提供unset命令可以刪除變量,,例如 unset name <!--[if !supportLists]-->8. <!--[endif]-->變量的賦值 變量的賦值有五種:使用read命令,,直接賦值,使用命令行參數(shù),使用命令行的輸出結(jié)果,,從文件讀取,。 先說一下從read命令吧:(主要是在需要交互時(shí)使用) Read命令是系統(tǒng)內(nèi)置命令,語法格式為: read 變量1 變量2 當(dāng)Shell腳本執(zhí)行到read命令時(shí),,將暫停腳本的執(zhí)行并等待鍵盤的輸入,,當(dāng)用戶輸入完畢并且敲下回車之后,將完成賦值操作,,腳本繼續(xù)執(zhí)行。 Read指令的規(guī)則: <!--[if !supportLists]-->l <!--[endif]-->多個(gè)數(shù)據(jù)或變量之間用空格隔開 <!--[if !supportLists]-->l <!--[endif]-->若變量個(gè)數(shù)與數(shù)據(jù)個(gè)數(shù)相等時(shí),,對(duì)應(yīng)取值 <!--[if !supportLists]-->l <!--[endif]-->若變量個(gè)數(shù)大于數(shù)據(jù)個(gè)數(shù)時(shí),,沒有輸入數(shù)據(jù)的變量取空值 <!--[if !supportLists]-->l <!--[endif]-->若變量個(gè)數(shù)小于數(shù)據(jù)個(gè)數(shù)時(shí),將多余的數(shù)據(jù)賦給最后一個(gè)變量(也就是把空格當(dāng)成字符串處理) 例子: #!/bin/bash echo –n “ please enter your name” //-n 表示用戶輸入和提示信息在同一行 read name echo “your name is $name”
#!/bin/bash echo “Please enter your first name and last name :” read first last echo “your first name is $first” echo “your last name is $last” 第二種賦值方法就是直接給變量賦值(這種賦值方法主要是在不需要交互時(shí),,并且參數(shù)不需要修改時(shí)使用) 例如:name=xiaosu gender=man 第三種賦值方法是使用命令行參數(shù)賦值,。(這種賦值方法是參數(shù)需要經(jīng)常變化,并且不需要交互時(shí)使用) 這種賦值方法,,也就是直接在命令后面跟參數(shù),,然后系統(tǒng)用$1來引用第一個(gè)參數(shù)。 第四種方法是利用命令的輸出結(jié)果賦值(這種賦值方法可以直接處理上個(gè)命令產(chǎn)生的數(shù)據(jù)) 在Shell程序中,,可以將一個(gè)命令的輸出結(jié)果來當(dāng)做變量,,不過需要在賦值語句中使用反引號(hào) 例如currentdir=`pwd` echo $currentdir 最后一種賦值方法是從文件中讀入數(shù)據(jù) 這種方式就適合處理大批量的數(shù)據(jù),直接把相應(yīng)的數(shù)據(jù)寫入文件,,然后運(yùn)行腳本即可,。 通常是通過while循環(huán)一行行讀入數(shù)據(jù),即沒循環(huán)一次,,就從文件中讀取一行數(shù)據(jù),,直到讀取到文件的結(jié)尾。 例如: #!/bin/bash ls *.sh >execfile while read LINE do chmod a+x $LINE done<execfile 這個(gè)腳本使用了while..do..done 結(jié)構(gòu),,最后一行表示從文件execfile讀取數(shù)據(jù),。while read LINE表示 每次循環(huán)讀入一行數(shù)據(jù)并賦值給變量LINE。 <!--[if !supportLists]-->9. <!--[endif]-->變量的輸出 最簡(jiǎn)單的方法就是使用echo 如果想輸出格式化的字符串,,就需要使用printf,,用法和C語言類似 printf 命令的格式說明符 \” 輸出雙引號(hào) \\ 輸出反斜杠 \a 響鈴 \n 換行 \r 回車 |
|