久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Shell基本語法:

 金正月 2010-05-31
Shell基本語法:

  像高級程序設計語言一樣, Shell也提供說明和使用變量的功能.

  對Shell來講,,所有變量的取值都是一個字串,,Shell程序采用$var的

  形式來引用名為var的變量的值。

  Shell有以下幾種基本類型的變量:

 ?。?)Shell定義的環(huán)境變量:

  Shell 在開始執(zhí)行時就已經(jīng)定義了一些和系統(tǒng)的工作環(huán)境有關的

  變量,,用戶還可以重新定義這些變量,常用的Shell環(huán)境變量有:

  HOME: 用于保存注冊目錄的完全路徑名.

  PATH: 用于保存用冒號分隔的目錄路徑名,Shell將按PATH變量

  中給出的順序搜索這些目錄, 找到的第一個與命令名稱一致的可執(zhí)行

  文件將被執(zhí)行.

  TERM: 終端的類型.

  UID: 當前用戶的識別字, 取值是由數(shù)位構成的字串.

  PWD: 當前工作目錄的絕對路徑名,,該變量的取值隨cd命令的

  使用而變化,。

  PS1: 主提示符, 在特權用戶下, 默認的主提示符是#,在普通

  用戶下, 默認的主提示符是$.

  PS2: 在Shell接收用戶輸入命令的過程中,如果用戶在輸入行

  的末尾輸入`\` 然后回車, 或者當用戶按回車鍵時Shell判斷出用戶輸

  入的命令沒有結束時, 就顯示這個輔助提示符, 提示用戶繼續(xù)輸入命

  令的其余部分, 默認的輔助提示符是>。

 ?。?)用戶定義的變量:

  用戶可以按照下面的語法規(guī)則定義自己的變量:

  變量名=變量值

  要注意的一點是, 在定義變量時, 變量名前不應加符號$,在引用

  變量的內(nèi)容時則應在變量名前加$; 在給變量賦值時,等號兩邊一定不

  能留空格, 若變量中本身就包含了空格,,則整個字串都要用雙引號括

  起來.

  在編寫Shell程序時, 為了使變量名和命令名相區(qū)別,建議所有的

  變量名都用大寫字母來表示.

  有時我們想要在說明一個變量并對它設置為一個特定值后就不在

  改變它的值時,可以用下面的命令來保證一個變量的只讀性:

  readonly 變量名

  在任何時候, 創(chuàng)建的變量都只是當前Shell的局部變量,所以不能

  被Shell運行的其他命令或Shell程序所利用, 而export命令可以將一

  個局部變量提供給Shell執(zhí)行的其他命令使用, 其格式為:

  export 變量名

  也可以在給變量賦值的同時使用export命令:

  export 變量名=變量值

  使用 export說明的變量, 在Shell以后運行的所有命令或程序中都可

  以訪問到.

  可以用unset清除變量值, 格式如下:

  unset 變量名

 ?。?)位置參數(shù):

  位置參數(shù)是一種在調(diào)用 Shell程序的命令行中按照各自的位置決

  定的變量, 是在程序名之后輸入的參數(shù). 位置參數(shù)之間用空格分隔,

  Shell取第一個位置參數(shù)替換程序文件中的$1, 第二個替換$2,依次類

  推. $0是一個特殊的變量, 它的內(nèi)容是當前這個Shell程序的文件名,

  所以, $0不是一個位置參數(shù), 在顯示當前所有的位置參數(shù)時是不包括

  $0的.

 ?。?)預定義變量:

  預定義變量和環(huán)境變量相類似,也是在Shell一開始時就定義了的

  變量. 所不同的是, 用戶只能根據(jù)Shell的定義來使用這些變量,而不

  能重定義它. 所有預定義變量都是由$符和另一個符號組成的,常用的

  Shell預定義變量有:

  $# 位置參數(shù)的數(shù)量.

  $* 所有位置參數(shù)的內(nèi)容.

  $? 命令執(zhí)行后返回的狀態(tài).

  $$ 當前進程的進程號.

  $! 后臺運行的最后一個進程號.

  $0 當前執(zhí)行的進程名.

  注意:

  $? 用于檢查上一個命令執(zhí)行是否正確. (在Linux中,命令退出

  狀態(tài)為0表示該命令正確執(zhí)行, 任何非0值表示命令出錯.)

  $$ 變量最常見的用途是用做暫存文件的名字以保證暫存文件不

  會重復.

  (5)參數(shù)置換的變量:

  Shell 提供了參數(shù)置換功能以便用戶可以根據(jù)不同的條件來給變

  量賦不同的值. 參數(shù)置換的變量有4種,這些變量通常與某一個位置參

  數(shù)相聯(lián)系, 根據(jù)指定的位置參數(shù)是否已經(jīng)設置來決定變量的取值,它

  們的語法和功能分別如下.

  a. 變量=${參數(shù)-word}: 如果設置了參數(shù), 則用參數(shù)的值置換變

  量的值, 否則用word置換. 即這種變量的值等于某一個參數(shù)的值,如

  果該參數(shù)沒有設置, 則變量就等于word的值.

  b. 變量=${參數(shù)=word}: 如果設置了參數(shù), 則用參數(shù)的值置換變

  量的值, 否則把變量設置成word, 然后再用word替換參數(shù)的值. 注意

  位置參數(shù)不能用于這種方式,因為在Shell程序中不能為位置參數(shù)賦值.

  c. 變量=${參數(shù)?word}: 如果設置了參數(shù),,則用參數(shù)的值置換變

  量的值, 否則就顯示word并從Shell中退出, 如果省略了word,則顯示

  標準信息. 這種變量要求一定等于某一個參數(shù)的值. 如果該參數(shù)沒有

  設置, 就顯示一個信息, 然后退出, 因此這種方式常用于出錯指示.

  d. 變量=${參數(shù)+word}: 如果設置了參數(shù),,則用word置換變量,

  否則不進行置換.

  所有這4種形式中的"參數(shù)"既可以是位置參數(shù),也可以是另一個變

  量,,只是用位置參數(shù)的情況比較多.

  Shell程序設計的流程控制:

  和其他高級程序設計語言一樣,Shell提供了用來控制程序執(zhí)行流

  程的命令, 包括條件分支和循環(huán)結構, 用戶可以用這些命令創(chuàng)建非常

  復雜的程序,。

  與傳統(tǒng)語言不同的是, Shell用于指定條件值的不是布爾運算式,

  而是命令和字串。

  1. 測試命令

  test命令用于檢查某個條件是否成立, 它可以進行數(shù)值, 字符和

  文件3個方面的測試, 其測試符和相應的功能分別如下:

 ?。?)數(shù)值測試:

  -eq 等于則為真

  -ne 不等于則為真

  -gt 大于則為真

  -ge 大于等于則為真

  -lt 小于則為真

  -le 小于等于則為真

 ?。?)字串測試:

  = 等于則為真

  != 不相等則為真

  -z字串 判斷字符串是否為空

  -n字串 判斷字符串是否不為空

  (3)文件測試:

  -e文件名 如果文件存在則為真

  -r文件名 如果文件存在且可讀則為真

  -w文件名 如果文件存在且可寫則為真

  -x文件名 如果文件存在且可執(zhí)行則為真

  -s文件名 如果文件存在且至少有一個字符則為真

  -d文件名 如果文件存在且為目錄則為真

  -f文件名 如果文件存在且為普通文件則為真

  -c文件名 如果文件存在且為字符型特殊文件則為真

  -b文件名 如果文件存在且為塊特殊文件則為真

  另外, Linux還提供了與(!), 或(-o), 非(-a)三個邏輯操

  作符, 用于將測試條件連接起來, 其優(yōu)先順序為: !最高, -a次之,-o

  最低,。

  同時, bash也能完成簡單的算術運算, 格式如下:

  $[expression]

  例如:

  var1=2

  var2=$[var1*10+1]

  則var2的值為21.

  2. if條件語句

  Shell程序中的條件分支是通過if條件語句來實現(xiàn)的,其一般格式

  為:

  if 條件命令串

  then

  條件為真時的命令串

  else

  條件為假時的命令串

  fi

  3. for循環(huán)

  for循環(huán)對一個變量的可能的值都執(zhí)行一個命令序列,賦給變量的

  幾個數(shù)值既可以在程序內(nèi)以數(shù)值列表的形式提供, 也可以在程序以外

  以位置參數(shù)的形式提供. for循環(huán)的一般格式為:

  for變量名 [in數(shù)值列表]

  do

  若干個命令行

  done

  變量名可以是用戶選擇的任何字串, 如果變量名是var,則在in之

  后給出的數(shù)值將順序替換循環(huán)命令列表中的$var. 如果省略了in, 則

  變量var的取值將是位置參數(shù).對變量的每一個可能的賦值都將執(zhí)行do

  和done之間的命令列表,。

  4. while和until循環(huán)

  while和until命令都是用命令的返回狀態(tài)值來控制循環(huán)的.While

  循環(huán)的一般格式為:

  while

  若干個命令行1

  do

  若干個命令行2

  done

  只要while的"若干個命令行1"中最后一個命令的返回狀態(tài)為真,

  while循環(huán)就繼續(xù)執(zhí)行do...done之間的"若干個命令行2".

  until命令是另一種循環(huán)結構, 它和while命令相似, 其格式如下

  until

  若干個命令行1

  do

  若干個命令行2

  done

  until循環(huán)和 while循環(huán)的區(qū)別在于: while循環(huán)在條件為真時繼

  續(xù)執(zhí)行循環(huán), 而until則是在條件為假時繼續(xù)執(zhí)行循環(huán).

  Shell還提供了true和false兩條命令用于創(chuàng)建無限循環(huán)結構,它

  們的返回狀態(tài)分別是總為0或總為非0。

  5. case條件選擇

  if條件語句用于在兩個選項中選定一項, 而case條件選擇為用戶

  提供了根據(jù)字串或變量的值從多個選項中選擇一項的方法, 其格式如

  下:

  case string in

  exp-1)

  若干個命令行1

  ;;

  exp-2)

  若干個命令行2

  ;;

  ……

  *)

  其他命令行

  esac

  Shell通過計算字串string的值, 將其結果依次和運算式exp-1,

  exp-2等進行比較, 直到找到一個匹配的運算式為止.如果找到了匹配

  項, 則執(zhí)行它下面的命令直到遇到一對分號(;;)為止.

  在case運算式中也可以使用Shell的通配符("*", "?", "[ ]").

  通常用 *作為case命令的最后運算式以便在前面找不到任何相應的匹

  配項時執(zhí)行"其他命令行"的命令.

  6. 無條件控制語句break和continue

  break用于立即終止當前循環(huán)的執(zhí)行,而contiune用于不執(zhí)行循環(huán)

  中后面的語句而立即開始下一個循環(huán)的執(zhí)行. 這兩個語句只有放在do

  和done之間才有效,。

  7. 函數(shù)定義

  在Shell中還可以定義函數(shù). 函數(shù)實際上也是由若干條Shell命令

  組成的, 因此它與Shell程序形式上是相似的,不同的是它不是一個單

  獨的進程, 而是Shell程序的一部分. 函數(shù)定義的基本格式為:

  functionname

  {

  若干命令行

  }

  調(diào)用函數(shù)的格式為: functionname param1 param2...

  Shell函數(shù)可以完成某些例行的工作,而且還可以有自己的退出狀

  態(tài), 因此函數(shù)也可以作為if, while等控制結構的條件.

  在函數(shù)定義時不用帶參數(shù)說明, 但在調(diào)用函數(shù)時可以帶有參數(shù),

  此時Shell將把這些參數(shù)分別賦予相應的位置參數(shù)$1, $2, ...及$*.

  8. 命令分組

  在Shell中有兩種命令分組的方法: ()和{}.

  前者當Shell執(zhí)行()中的命令時將再創(chuàng)建一個新的子進程,然后這

  個子進程去執(zhí)行圓括弧中的命令. 當用戶在執(zhí)行某個命令時不想讓命

  令運行時對狀態(tài)集合 (如位置參數(shù), 環(huán)境變量, 當前工作目錄等)的

  改變影響到下面語句的執(zhí)行時, 就應該把這些命令放在圓括弧中,這

  樣就能保證所有的改變只對子進程產(chǎn)生影響, 而父進程不受任何干擾.

  {}用于將順序執(zhí)行的命令的輸出結果用于另一個命令的輸入(管

  道方式 ).

  當我們要真正使用圓括弧和花括弧時(如計算運算式的優(yōu)先順序)

  則需要在其前面加上轉義符(\)以便讓Shell知道它們不是用于命令執(zhí)

  行的控制所用.

  9. 信號

  trap命令用于在Shell程序中捕捉信號,之后可以有3種反應方式:

  (1) 執(zhí)行一段程序來處理這一信號.

  (2) 接受信號的默認操作.

  (3) 忽視這一信號.

  trap對上面3種方式提供了3種基本形式:

  第一種形式的trap命令在Shell接收到與signal list清單中數(shù)值

  相同的信號時, 將執(zhí)行雙引號中的命令串.

  trap 'commands' signal-list

  trap "commands" signal-list

  為了恢復信號的默認操作, 使用第二種形式的trap命令:

  trap signal-list

  第三種形式的trap命令允許忽略信號:

  trap " " signal-list

  注意:

  (1) 對信號11(段違例)不能捕捉,因為Shell本身需要捕捉該信號

  去進行內(nèi)存的轉儲.

  (2) 在trap中可以定義對信號0的處理(實際上沒有這個信號),

  Shell程序在其終止(如執(zhí)行exit語句)時發(fā)出該信號.

  (3) 在捕捉到signal-list 中指定的信號并執(zhí)行完相應的命令之

  后, 如果這些命令沒有將Shell程序終止的話, Shell程序?qū)⒗^續(xù)執(zhí)行

  收到信號時所執(zhí)行的命令后面的命令, 這樣將很容易導致 Shell程序

  無法終止.

  另外, 在trap語句中, 單引號和雙引號是不同的.當 Shell程序

  第一次碰到trap語句時, 將把commands中的命令掃描一遍. 此時若

  commands是用單引號括起來的話,那么Shell不會對commands中的變量

  和命令進行替換, 否則commands中的變量和命令將用當時具體的值來

  替換.

  運行Shell程序的方法:

  用戶可以用任何編輯程序來編寫Shell程序. 因為Shell程序是解

  釋執(zhí)行的, 所以不需要編譯成目的程序. 按照 Shell編程的慣例,以

  bash為例, 程序的第一行一般為"#!/bin/bash", 其中#表示該行是注

  釋, 嘆號!告訴Shell運行嘆號之后的命令并用文檔的其余部分作為輸

  入, 也就是運行/bin/bash并讓/bin/bash去執(zhí)行Shell程序的內(nèi)容.

  執(zhí)行Shell程序的方法有3種:

  1. sh Shell程序文件名

  這種方法的命令格式為:

  bash Shell程序文件名

  這實際上是調(diào)用一個新的bash命令解釋程序,而把Shell程序文件

  名作為參數(shù)傳遞給它. 新啟動的Shell將去讀指定的文件,可執(zhí)行文件

  中列出的命令, 當所有的命令都執(zhí)行完后結束. 該方法的優(yōu)點是可以

  利用Shell調(diào)試功能.

  2.sh

  格式為:

  bash< Shell程序名

  這種方式就是利用輸入重定向,使Shell命令解釋程序的輸入取自

  指定的程序文件.

  3. 用chmod命令使Shell程序成為可執(zhí)行的

  一個文件能否運行取決于該文檔的內(nèi)容本身可執(zhí)行且該文件具有

  執(zhí)行權. 對于Shell程序, 當用編輯器生成一個文件時,系統(tǒng)賦予的許

  可權都是644(rw-r-r--), 因此, 當用戶需要運行這個文件時,只需要

  直接鍵入文件名即可.

  在這3種運行Shell程序的方法中, 最好按下面的方式選擇: 當剛

  創(chuàng)建一個Shell程序, 對它的正確性還沒有把握時,應當使用第一種方

  式進行調(diào)試. 當一個Shell程序已經(jīng)調(diào)試好時,應使用第三種方式把它

  固定下來, 以后只要鍵入相應的文件名即可, 并可被另一個程序所調(diào)

  用.

  4. bash程序的調(diào)試

  在編程過程中難免會出錯, 有的時候, 調(diào)試程序比編寫程序花費

  的時間還要多, Shell程序同樣如此.

  Shell程序的調(diào)試主要是利用bash命令解釋程序的選擇項. 調(diào)用

  bash的形式是:

  bash -選擇項 Shell程序文件名

  幾個常用的選擇項是:

  -e 如果一個命令失敗就立即退出

  -n 讀入命令但是不執(zhí)行它們

  -u 置換時把未設置的變量看做出錯

  -v 當讀入Shell輸入行時把它們顯示出來

  -x 執(zhí)行命令時把命令和它們的參數(shù)顯示出來

  上面的所有選項也可以在Shell程序內(nèi)部用"set -選擇項"的形式

  引用,而"set +選擇項"則將禁止該選擇項起作用.如果只想對程序的

  某一部分使用某些選擇項時, 則可以將該部分用上面兩個語句包圍起

  來.

  (1) 未置變量退出和立即退出

  未置變量退出特性允許用戶對所有變量進行檢查, 如果引用了一

  個未賦值的變量就終止Shell程序的執(zhí)行. Shell通常允許未置變量的

  使用, 在這種情況下, 變量的值為空. 如果設置了未置變量退出選擇

  項, 則一旦使用了未置變量就顯示錯誤信息, 并終止程序的運行.未

  置變量退出選擇項為-u.

  當Shell運行時, 若遇到不存在或不可執(zhí)行的命令,重定向失敗或

  命令非正常結束等情況時, 如果未經(jīng)重新定向, 該出錯信息會顯示在

  終端屏幕上, 而Shell程序仍將繼續(xù)執(zhí)行. 要想在錯誤發(fā)生時迫使

  Shell程序立即結束, 可以使用-e選項將Shell程序的執(zhí)行立即終止.

  (2) Shell程序的跟蹤

  調(diào)試Shell程序的主要方法是利用Shell命令解釋程序的-v或-x選

  項來跟蹤程序的執(zhí)行. -v選擇項使Shell在執(zhí)行程序的過程中,把它讀

  入的每一個命令行都顯示出來,而-x選擇項使Shell在執(zhí)行程序的過程

  中把它執(zhí)行的每一個命令在行首用一個+加上命令名顯示出來.并把每

  一個變量和該變量所取的值也顯示出來. 因此,它們的主要區(qū)別在于:

  在執(zhí)行命令行之前無-v, 則顯示出命令行的原始內(nèi)容, 而有-v時則顯

  示出經(jīng)過替換后的命令行的內(nèi)容.

  除了使用Shell的-v和-x選擇項以外, 還可以在Shell程序內(nèi)部采

  取一些輔助調(diào)試的措施. 例如,可以在Shell程序的一些關鍵地方使用

  echo命令把必要的信息顯示出來,它的作用相當于C語言中的printf語

  句, 這樣就可以知道程序運行到什么地方及程序目前的狀態(tài).

  bash的內(nèi)部命令:

  bash命令解釋套裝程序包含了一些內(nèi)部命令. 內(nèi)部命令在目錄列

  表時是看不見的, 它們由Shell本身提供. 常用的內(nèi)部命令有: echo,

  eval, exec, export, readonly, read, shift, wait和點(.). 下面

  簡單介紹其命令格式和功能.

  1. echo

  命令格式: echo arg

  功能: 在屏幕上顯示出由arg指定的字串,。

  2. eval

  命令格式: eval args

  功能: 當Shell程序執(zhí)行到eval語句時,Shell讀入?yún)?shù)args,并將

  它們組合成一個新的命令,然后執(zhí)行.

  3. exec

  命令格式: exec命令參數(shù)

  功能: 當Shell執(zhí)行到exec語句時,不會去創(chuàng)建新的子進程而是轉

  去執(zhí)行指定的命令, 當指定的命令執(zhí)行完時該進程 (也就

  是最初的Shell) 就終止了, 所以Shell程序中exec后面的

  語句將不再被執(zhí)行.

  4. export

  命令格式: export變量名 或:export變量名=變量值

  功能: Shell可以用export把它的變量向下帶入子Shell, 從而

  讓子進程繼承父進程中的環(huán)境變量. 但子Shell不能用

  export把它的變量向上帶入父Shell.

  注意: 不帶任何變量名的export語句將顯示出當前所有的

  export變量,。

  5. readonly

  命令格式: readonly變量名

  功能: 將一個用戶定義的Shell變量標識為不可變.不帶任何參

  數(shù)的 readonly命令將顯示出所有只讀的Shell變量,。

  6. read

  命令格式: read變量名表

  功能: 從標準輸入設備讀入一行,分解成若干字, 賦值給Shell

  程序內(nèi)部定義的變量.

  7. shift語句

  功能: shift 語句按如下方式重新命名所有的位置參數(shù)變量,

  即$2成為$1, $3成為$2...在程序中每使用一次shift語

  句,都使所有的位置參數(shù)依次向左移動一個位置,并使位

  置參數(shù)$#減1, 直到減到0為止.

  8. wait

  功能: 使Shell等待在后臺啟動的所有子進程結束.wait的返回

  值總是真.

  9. exit

  功能: 退出Shell程序.在exit之后可有選擇地指定一個數(shù)位作

  為返回狀態(tài).

  10. "."(點)

  命令格式: . Shell程序文件名

  功能: 使Shell讀入指定的Shell程序文件并依次執(zhí)行文件中的

  所有語句.

  11. unset

  命令格式: unset [-fv][變量或函數(shù)名稱]

  功能: 刪除變量或函數(shù).

  參數(shù): -f 僅刪除函數(shù)

  -v 僅刪除變量

  12. grep Grep: g(globally) search for a RE(regular

  expression) and p(print) the results.

  命令格式: grep [OPTION]... PATTERN [FILE] ...

  參數(shù): -I: 忽略大小寫

  -c: 打印匹配的行數(shù)

  -l: 從多個文件中查找包含匹配項

  -v: 查找不包含匹配項的行

  -n: 打印包含匹配項的行和行標

  RE(正則表達式):

  \ 忽略正則表達式中特殊字符的原有含義

  ^ 匹配正則表達式的開始行

  $ 匹配正則表達式的結束行

  \< 從匹配正則表達式的行開始

  \> 到匹配正則表達式的行結束

  [ ] 單個字符;如[A]即A符合要求

  [ - ]范圍;如[A-Z]即A, B, C一直到Z都符合要求

  . 所有的單個字符

  * 所有字符, 長度可以為0

  結果: 打印輸出匹配行的內(nèi)容

  13. cut

  命令格式: cut [OPTION]... [FILE]...

  參數(shù): -d' ' 指定域分隔符

  -c num1-num2 顯示每行從開頭算起num1到num2的

  文字.

  -f m-n 顯示第m域到第n域(默認Tab為域分

  隔符).

  功能: 顯示每行從開頭算起num1到num2的文字.

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多