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相匹配
#與##的區別在於一個是最短匹配模式,一個是最長相符模式.
(_cool.gif src="/UpLoadFiles/NewsPhoto/con_cool.gif" border=0> ${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命令找不到目錄,可切換到參數形態指定的目錄下。