shell程式設計Bash中對變數的操作方法談(轉)

BSDLite發表於2007-08-11
shell程式設計Bash中對變數的操作方法談(轉)[@more@]1.條件變數替換:
Bash Shell可以進行變數的條件替換,既只有某種條件發生時才進行替換,替換
條件放在{}中.
(1) ${value:-word}
當變數未定義或者值為空時,返回值為word的內容,否則返回變數的值.
(2) ${value:=word}
與前者類似,只是若變數未定義或者值為空時,在返回word的值的同時將
word賦值給value
(3) ${value:?message}
若變數以賦值的話,正常替換.否則將訊息message送到標準錯誤輸出(若
此替換出現在Shell程式中,那麼該程式將終止執行)
(4) ${value:+word}
若變數以賦值的話,其值才用word替換,否則不進行任何替換
(5) ${value:offset}
${value:offset:length}
從變數中提取子串,這裡offset和length可以是算術表示式.
(6) ${#value}
變數的字元個數 (變數的字元個數,並不是變數個數)
(7) ${value#pattern}
${value##pattern}
去掉value中與pattern相匹配的部分,條件是value的開頭與pattern相匹配
#與##的區別在於一個是最短匹配模式,一個是最長匹配模式.
( ${value%pattern}
${value%%pattern}
於(7)類似,只是是從value的尾部於pattern相匹配,%與%%的區別與#與##一樣
(9) ${value/pattern/string}
${value//pattern/string}
進行變數內容的替換,把與pattern匹配的部分替換為string的內容,/與//的區
別與上同
注意:上述條件變數替換中,除(2)外,其餘均不影響變數本身的值

2.變數的算術運算
在Bash Shell中,只能進行兩個整數間的運算,其結果仍為整數.要進行算術
運算,需要使用let命令,語法為:
let expr
expr是一個包含項和運算子的表示式,項可以是一個變數或是一個整數常數,
當使用整數常數時,其預設為十進位制整數,使用者可以用radio#number來指定其它
形式的整數,其中radio定義了整數是幾進製表示的,number是該整數的值.若
radio>10,那麼數字字元可從0-9和A-Z.
在表示式中支援的運算子及其含義為:
+,-,*,/,% 加,減,乘,除,取模
>>,<?: 三元運算子.與C語言中的定義一致
~ 取補碼
!,>=,<=,>,=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
表示式式中也可以使用括號.括號或運算優先順序的定義與一般計算機語言中的
相同.
let命令具有返回值.當計算結果(若有多個表示式時,以最後一個為準)為0時,
返回值為1,否則為0.
當表示式中含有shell的特殊字元(如|)時,需要用引用符('或")將其引用起來.
使用let時還需要注意的時,對於let x+y這樣的式子,shell雖然計算了x+y的值
但卻將結果丟棄,若不想這樣,可以使用let sum=x+y將x+y的結果儲存在變數sum中
另外還可以使用((和))運算子取代let命令,而且這樣的話,還可以省去對算術
表示式的引用,如果想返回表示式的值,則需用$(())的格式.
if的條件中,“=”用於比較字串;“-eq”用於比較整型數。
Bash內建引數
===========
PPID : 該bash的呼叫者process ID.
PWD : 目前的工作目錄。
OLDPWD : 上一個工作目錄。
REPLY : 當read命令沒有引數時,直接設在REPLY上。
UID : User ID。
EUID : Effective User ID。
BASH : Bash的完整路徑。
BASH_VERSION : Bash版本。
SHLVL : 每次有Bash執行時,數字加一。
RANDOM : 每次這個引數被用到時,就會產生一個亂數在RANDOM上。
SECONDS : 從這個Shell一開始啟動後的時間。
LINENO : Script的行數。
HISTCMD : 歷史記錄數。
OPTARG : getopts處理的最後一個選項引數。
OPTIND : 下一個要由getopts所處理的引數號碼。
HOSTTYPE : 機器種類。
OSTYPE : 作業系統名稱。
IFS : Internal Field Separator。
PATH : 命令搜尋路徑。
PATH="/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:."
HOME : 目前使用者的home directory;
CDPATH : cd命令的搜尋路徑。
ENV : 如果這個引數被設定,每次有shell script被執行時,將會執行它所設定的檔名做為環境設定。
MAIL : 如果這個引數被設定,而且MAILPATH沒有被設定,那麼有信件進來時,bash會通知使用者。
MAILCHECK : 設定多久時間檢查郵件一次。
MAILPATH : 一串的郵件檢查路徑。
MAIL_WARNING : 如果有設定的話,郵件被讀取後,將會顯示訊息。
PS1 : 提示訊息設定,內定為"bash$ "。(請詳見提示訊息一節。)
PS2 : 第二提示訊息設定,內定為"> "。
PS3 : select命令所使用的提示訊息。
PS4 : 執行追蹤時用的提示訊息設定,內定為"+ "。
HISTSIZE : 命令歷史記錄量,內定為500。
HISTFILE : 歷史記錄檔,內定~/.bash_history。
HISTFILESIZE : 歷史記錄檔行數最大值,內定500。
OPTERR : 如果設為1,bash會顯示getopts的錯誤。
PROMPT_COMMAND : 如果設定的話,該值會在每次執行命令前都顯示。
IGNOREEOF : 將EOF值當成輸入,內定為10。
TMOUT : 如果設為大於零,該值被解譯為輸入等待秒數。若無輸入,當成沒有輸入。
FCEDIT : fc命令的內定編輯器。
FIGNORE : 請詳見READLINE。
INPUTRC : readline的startup file,內定~/.inputrc
notify : 如果設定了,bash立即報告被終結的背景程式。
history_control, HISTCONTROL : history使用。
command_oriented_history : 存入多行指令。
glob_dot_filenames : 如果設定了,bash將會把"."包含入檔案路徑中。
allow_null_glob_expansion : 如果設定了,bash允許路徑明稱為null string。
histchars : history使用。
nolinks : 如果設定了,執行指令時,不會跟隨symbolic links。
hostname_completion_file, HOSTFILE : 包含與/etc/hosts相同格式的檔名。
noclobber : 如果設定了,Bash不會覆寫任何由">"、">&"及"<>"所操作的檔案。
auto_resume : 請見任務控制一節。
no_exit_on_failed_exec : 如果該值存在,非互動的shell不會因為exec失敗而跳出。
cdable_vars : 如果啟動,而cd命令找不到目錄,可切換到引數形態指定的目錄下。

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

相關文章