shell編程Bash中對變數的操作方法談

來源:互聯網
上載者:User

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命令找不到目錄,可切換到參數形態指定的目錄下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.