




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Linux SHELL中的變量詳述日期:2008-01-02 來源:Linux公社 Linux 一,SHELL本地變量:本地變量就如同局部變量一樣,只在本SHELL中起作用。它不會影響到其他SHELL中的變量。格式:NAME=value1,變量的調(diào)用:在變量前加$ $ echo $HOME /home/hbwork $ WEEK=Satur $ echo Today is $WEEKday Today is $echo Today is $WEEKday /假設(shè)變量和其他字符組成新的字,這時就必須給變量加上大括號,以更加清楚的顯示給shell,哪個是真正的變量,以實現(xiàn)字符串的合并等功能。Tod
2、ay is Saturday 2,顯示變量值 可以使用echo命令。需要注意的是,使用變量的時候必須在變量名前加上$符號。另外可以使用set命令,顯示所有本地SHELL變量。包括SHELL中預(yù)定義了一些環(huán)境變量,且用戶自己已經(jīng)定義過的本地變量也會在其中顯示。3,Shell變量賦值從右到左進(jìn)進(jìn)行賦值(變量未賦值時,shell不報錯,而是賦值為空!) $ X=$Y Y=y $ echo $X y $ Z=z Y=$Z $ echo $Y $ 4,使用unset命令刪除變量的賦值 $ Z=hello $ echo $Z hello $ unset Z $ echo $Z $ 5,有條件的命令替換 測
3、試變量是否已經(jīng)賦值在Bourne Shell中可以使變量替換在特定條件下執(zhí)行,即有條件的環(huán)境變量替換。 這種變量替換總是用大括號括起來的。 $variable: -value變量替換時將使用命令行中定義的默認(rèn)值,但變量的值并沒有因此而改變。variable是一變量值,value是變量替換使用的默認(rèn)值例:$echo Hello $UNAME結(jié)果顯示:Hello$echo Hello $UNAME: -there結(jié)果顯示:Hello there$echo $UNAME結(jié)果顯示: (空)$UNAME=John$echo Hello $UNAME: -there結(jié)果顯示:Hello John$vari
4、able:=value不但使用默認(rèn)值進(jìn)行替換,而且將默認(rèn)值賦給該變量。該形式在變量替換后同時把值value符給變量variable。例:$echo Hello $UNAME結(jié)果顯示:Hello$echo Hello $UNAME:=there結(jié)果顯示:Hello there$echo $UNAME結(jié)果顯示:there變量替換的值也可以是 括起來的命令:$USERDIR=$Mydir: -pwd$variable: +value只有當(dāng)變量已賦值時才用指定值替換,變量variable已賦值時,其值才用value替換,否則不進(jìn)行任何替換。 例:$ERROPT=A$echo $ERROPT: +&qu
5、ot;Error tracking is acitive"結(jié)果顯示:Error tracking is acitive$ERROPT=$echo $ERROPT: +"Error tracking is acitive"結(jié)果顯示: (空) $variable:?message使用錯誤檢查的條件進(jìn)行變量替換,當(dāng)變量variable已設(shè)置時,正常替換。否則消息message將送到標(biāo)準(zhǔn)錯誤輸出(假設(shè)此替換出現(xiàn)在shell程序中,那么該程序?qū)⒔K止)。例:$UNAME=$echo $ UNAME:?"UNAME HAS NOT BEEN SET"結(jié)果顯示
6、:UNAME HAS NOT BEEN SET$UNAME=Stephanie$echo $ UNAME:?"UNAME HAS NOT BEEN SET"結(jié)果顯示:Stephanie當(dāng)沒有指定message時,shell將顯示一條默認(rèn)的消息,例如:$UNAME=$echo $ UNAME:?結(jié)果顯示:sh:UNAME:parameter null or not set6,特殊設(shè)置readonly 變量名有時我們想要在說明一個變量并對它設(shè)置為一個特定值后就不在改變它的值時,可以用下面的命令來保證一個變量的只讀性:單獨執(zhí)行readonly可以顯示所有的只讀變量。export
7、變量名在任何時候,創(chuàng)建的變量都只是當(dāng)前Shell的局部變量,所以不能被Shell運行的其他命令或Shell程序所利用,而export命令可以將一個局部變量提供應(yīng)Shell執(zhí)行的其他命令使用,也可以在給變量賦值的同時使用export命令export 變量名=變量值。使用export說明的變量,在Shell以后運行的所有命令或程序中都可以訪問到。 二,Shell參數(shù)1、 位置參數(shù)由系統(tǒng)提供的參數(shù)稱為位置參數(shù)。位置參數(shù)的值可以用$N得到,N是一個數(shù)字,如果為1,即$1.類似C語言中的數(shù)組,在shell解釋用戶的命令時,將把命令行的第一個字作為命令,而其他的字作為參數(shù)。當(dāng)命令對應(yīng)的可執(zhí)行文件為Shel
8、l程序時,這些參數(shù)將作為位置變量傳送給該程序。第0號為程序名字,從1開始就表示傳遞給程序的參數(shù)。第一個參數(shù)記為$1,第二個為$2.第九個為$9。其中1到9是真正的參數(shù)名,"$"符只是用來標(biāo)識變量的替換。2、 內(nèi)部參數(shù)上述過程中的$0是一個內(nèi)部變量,它是必須的,代表程序本身,而$1則可有可無。和$0一樣的內(nèi)部變量還有以下幾個。$# -傳遞給程序的總的參數(shù)數(shù)目$? -上一個代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值。$* -傳遞給程序的所有參數(shù)組成的字符串。 $- -在Shell啟動或使用set命令時提供選項 $? -上一條命令執(zhí)行后返回
9、的值 $ -當(dāng)前shell的進(jìn)程號 $! -上一個子進(jìn)程的進(jìn)程號 $ -所有的參數(shù),每個都用雙括號括起 $n -位置參數(shù)值,n表示位置 $0 -當(dāng)前shell名 例:建立一個內(nèi)容為如下的程序P1:echo “Program name is $0”echo “There are totally $# parameters passed to this program”echo “The last is $?”echo “The parameters are $*”執(zhí)行后的結(jié)果如下:beichenlocalhost bin$ P1 this is a test program /傳遞5個參數(shù)Pro
10、gram name is /home/beichen/bin/P1 /給出程序的完整路徑和名字There are totally 5 parameters passed to this program /參數(shù)的總數(shù)The last is 0 /程序執(zhí)行結(jié)果The parameters are this is a test program /返回有參數(shù)組成的字符串0 三,環(huán)境變量:shell 環(huán)境變量是所有shell 程序都會接受的參數(shù)。shell程序運行時,都會接收一組變量,這組變量就是環(huán)境變量,它作用于所有的用戶進(jìn)程。在Linux中,登陸進(jìn)程稱為父進(jìn)程,shell中執(zhí)行的用戶程序均稱為子進(jìn)程
11、。環(huán)境變量可以在命令行中設(shè)置,但用戶注銷時這些值將喪失。因此最好在$HOME/目錄下的.profile中定義。傳統(tǒng)上環(huán)境變量均為大寫。環(huán)境變量應(yīng)用于用戶進(jìn)程之前,必須用export命令導(dǎo)出。設(shè)置方法與本地變量設(shè)置方法相同。1,顯示環(huán)境變量 使用env命令或者 printenv 命令可以觀察所有環(huán)境變量2,將變量導(dǎo)出到子進(jìn)程 在父腳本中使用export命令可以將變量導(dǎo)出,這樣子腳本便可以知道該變量的值。如果你希望把你定義的變量讓其他所有的shell程序都能使用,也就是定義新的環(huán)境變量,你只要使用export關(guān)鍵詞就可以了。 3,常用的Shell環(huán)境變量有:HOME 用于保存注冊目錄的完全路徑名。
12、PATH 用于保存用冒號分隔的目錄路徑名,Shell將按PATH變量中給出的順序搜索這些目錄,找到的第一個與命令名稱一致的可執(zhí)行文件將被執(zhí)行。TERM 終端的類型。UID 當(dāng)前用戶的識別字,取值是由數(shù)位構(gòu)成的字串。PWD 當(dāng)前工作目錄的絕對路徑名,該變量的取值隨cd命令的使用而變化。PS1 主提示符,在特權(quán)用戶下,默認(rèn)的主提示符是#,在普通用戶下,默認(rèn)的主提示符是$。 附:bash的內(nèi)部命令bash命令解釋套裝程序包含了一些內(nèi)部命令。內(nèi)部命令在目錄列表時是看不見的,它們由Shell本身提供。常用的內(nèi)部命令有:echo, eval, exec, export, readonly, read, s
13、hift, wait和點(.)。下面簡單介紹其命令格式和功能。1echo 命令格式:echo arg功能:在屏幕上顯示出由arg指定的字串。2eval命令格式:eval args功能:當(dāng)Shell程序執(zhí)行到eval語句時,Shell讀入?yún)?shù)args,并將它們組合成一個新的命令,然后執(zhí)行。3exec命令格式:exec命令參數(shù)功能:當(dāng)Shell執(zhí)行到exec語句時,不會去創(chuàng)建新的子進(jìn)程,而是轉(zhuǎn)去執(zhí)行指定的命令,當(dāng)指定的命令執(zhí)行完時,該進(jìn)程也就是最初的Shell就終止了,所以Shell程序中exec后面的語句將不再被執(zhí)行。4export命令格式:export變量名或:export變量名=變量值功能:
14、Shell可以用export把它的變量向下帶入子Shell,從而讓子進(jìn)程繼承父進(jìn)程中的環(huán)境變量。但子Shell不能用export把它的變量向上帶入父Shell。注意:不帶任何變量名的export語句將顯示出當(dāng)前所有的export變量。5readonly命令格式:readonly變量名功能:將一個用戶定義的Shell變量標(biāo)識為不可變。不帶任何參數(shù)的readonly命令將顯示出所有只讀的Shell變量。6read命令格式:read變量名表功能:從標(biāo)準(zhǔn)輸入設(shè)備讀入一行,分解成假設(shè)干字,賦值給Shell程序內(nèi)部定義的變量。7shift語句功能:shift語句按如下方式重新命名所有的位置參數(shù)變量,即$2
15、成為$1,$3成為$2在程序中每使用一次shift語句,都使所有的位置參數(shù)依次向左移動一個位置,并使位置參數(shù)$#減1,直到減到0為止。8wait功能:使Shell等待在后臺啟動的所有子進(jìn)程結(jié)束。wait的返回值總是真。9exit功能:退出Shell程序。在exit之后可有選擇地指定一個數(shù)位作為返回狀態(tài)。10“.”點命令格式:. Shell程序文件名功能:使Shell讀入指定的Shell程序文件并依次執(zhí)行文件中的所有語句。 運行Shell程序的方法用戶可以用任何編輯程序來編寫Shell程序。因為Shell程序是解釋執(zhí)行的,所以不需要編譯成目的程序。按照Shell編程的慣例,以bash為例,程序的
16、第一行一般為“#!/bin/bash”,其中 # 表示該行是注釋,嘆號!告訴Shell運行嘆號之后的命令并用文檔的其余部分作為輸入,也就是運行/bin/bash并讓/bin/bash去執(zhí)行Shell程序的內(nèi)容。執(zhí)行Shell程序的方法有3種。1bash Shell程序文件名這實際上是調(diào)用一個新的bash命令解釋程序,而把Shell程序文件名作為參數(shù)傳遞給它。新啟動的Shell將去讀指定的文件,可執(zhí)行文件中列出的命令,當(dāng)所有的命令都執(zhí)行完后結(jié)束。該方法的優(yōu)點是可以利用Shell調(diào)試功能。2 bash< Shell程序名這種方式就是利用輸入重定向,使Shell命令解釋程序的輸入取自指定的程序
17、文件。3用chmod命令使Shell程序成為可執(zhí)行的一個文件能否運行取決于該文檔的內(nèi)容本身可執(zhí)行且該文件具有執(zhí)行權(quán)。對于Shell程序,當(dāng)用編輯器生成一個文件時,系統(tǒng)賦予的許可權(quán)都是644(rw-r-r-),因此,當(dāng)用戶需要運行這個文件時,只需要直接鍵入文件名即可。在這3種運行Shell程序的方法中,最好按下面的方式選擇:當(dāng)剛創(chuàng)建一個Shell程序,對它的正確性還沒有把握時,應(yīng)當(dāng)使用第一種方式進(jìn)行調(diào)試。當(dāng)一個Shell程序已經(jīng)調(diào)試好時,應(yīng)使用第三種方式把它固定下來,以后只要鍵入相應(yīng)的文件名即可,并可被另一個程序所調(diào)用。bash程序的調(diào)試在編程過程中難免會出錯,有的時候,調(diào)試程序比編寫程序花費的
18、時間還要多,Shell程序同樣如此。Shell程序的調(diào)試主要是利用bash命令解釋程序的選擇項。調(diào)用bash的形式是:bash -選擇項Shell程序文件名幾個常用的選擇項是:-e 如果一個命令失敗就立即退出。-n 讀入命令但是不執(zhí)行它們。-u 置換時把未設(shè)置的變量看做出錯。-v 當(dāng)讀入Shell輸入行時把它們顯示出來。-x 執(zhí)行命令時把命令和它們的參數(shù)顯示出來。上面的所有選項也可以在Shell程序內(nèi)部用“set -選擇項”的形式引用,而“set +選擇項”則將禁止該選擇項起作用。如果只想對程序的某一部分使用某些選擇項時,則可以將該部分用上面兩個語句包圍起來。1未置變量退出和立即退出未置變量退出特性允許用戶對所有變量進(jìn)行檢查,如果引
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高性能特種合金材料項目合作計劃書
- 同城工地出售合同范本
- 合作建材協(xié)議合同范例
- 共同投資協(xié)議合同范本
- 賣地買房合同范本
- 卷宗管理服務(wù)合同范例
- 合同范本庫編制說明
- 資質(zhì)借用合同范本
- 農(nóng)田煙桿出售合同范本
- 幼兒園塑膠地板購銷施工合同范本
- 人教版新教材高一上學(xué)期期末考試數(shù)學(xué)試卷及答案(共五套)
- 采血知情同意書模板
- Mysql 8.0 OCP 1Z0-908 CN-total認(rèn)證備考題庫(含答案)
- 教科版二年級科學(xué)下冊 (磁鐵能吸引什么) 課件
- 學(xué)習(xí)探究診斷 化學(xué) 必修二
- 人教版六年級下2.2成數(shù)同步練習(xí)(原卷版+解析版)
- 冀教2011版九年級英語全一冊《Lesson9ChinasMostFamous“Farmer”》教案及教學(xué)反思
- 三年級下冊音樂教學(xué)計劃含教學(xué)進(jìn)度安排活動設(shè)計word表格版
- 無極繩絞車檢修技術(shù)規(guī)范
- 雷鋒生平事跡簡介
- 市政工程施工安全檢查標(biāo)準(zhǔn)
評論
0/150
提交評論