【正文】
第 5章 Linux的 shell編程 shell ? 當(dāng)一個用戶登錄 Linux系統(tǒng)之后,系統(tǒng)初始化程序 init就為每一個用戶運行一個稱為shell(外殼 )的程序。 ? shell就是一個命令行解釋器。 ? 一般的 Linux系統(tǒng)都將 bash作為默認(rèn)的 shell。 shell ? 目前流行的 shell 有 ash、 bash、 ksh、csh、 zsh等 , bash是 Linux系統(tǒng)默認(rèn)使用的 shell。 可以用下面的命令來查看shell的類型: ? echo $SHELL SHELL是一個環(huán)境變量 , 它記錄用戶所使用的 shell類型 。 幾種流行的 shell( 續(xù)) ? 可以用命令: shellname 來轉(zhuǎn)換到別的 shell ? $exit 退出子 shell。 shell程序設(shè)計 ? 使用 shell編程類似于 DOS中的批處理文件 , 稱為 shell script, 又叫 shell程序或shell命令文件或者 shell腳本 。 ? Shell腳本程序是按行來解釋的 , 腳本程序總是以 ! /bin/sh 開始的 , 符號 !用來告訴系統(tǒng)它后面的參數(shù)是用來執(zhí)行該文件的程序 。 如果要執(zhí)行該腳本 , 還必須使其可執(zhí)行 。 chmod +x filename 然后 , 您可以通過輸入: ./filename 來執(zhí)行您的腳本 。 $ cat !/bin/sh echo ―You are wele to use base.‖ echo ―Current work directory is $PWD.‖ echo ―You are $LOGNAME.‖ 增加執(zhí)行權(quán)限 $chmod +x 開始運行程序: $./ 執(zhí)行結(jié)果: You are wele to use base. Current work directory is /root You are root. ? shell只有字符型變量。 ? shell變量無需初始化,一個沒有初始化的 shell變量自動被初始化為一個空串。 ? shell變量名大小寫敏感。 shell基礎(chǔ)編程 shell變量 Bourne Shell有如下四種變量: ? 本地變量 ( 用戶自定義變量 ) ? 位置變量即 shell script之參數(shù) ? 預(yù)定義變量 ( 特殊變量 ) ? 環(huán)境變量 (參考 shell定制部分 ) shell變量 (續(xù) ) (用戶自定義變量 ) ? 本地變量在用戶現(xiàn)在的 shell生命期的腳本中使用。 ? 要設(shè)置一本地變量,格式為: $ variablename=value 或 $ {variablename=value} ? 因為大部分 LINUX命令使用小寫字符,因此在 shell編程中變量通常全部大寫。 ? 變量的引用:在變量前加 $ 。 ( 1)顯示變量 ? 使用 echo命令輸出單個變量的值,此時要在變量名前加 $ ? $ WEEK=Satur ? $ echo Today is $WEEKday 輸出: Today is 使用花括號來告訴 shell我們要顯示的變量: $ echo Today is ${WEEK}day 輸出: Today is Saturday ( 2)清除變量: ? 使用 unset命令刪除變量的賦值 $ Z=hello $ echo $Z hello $ unset Z $ echo $Z $ ( 3)顯示所有本地 shell變量: ? 使用 set命令顯示所有本地定義的 shell變量 ( 4)結(jié)合變量值 Echo ${variablename1}${variablename2} $A=‘Hello,‘ $B=‘World‘ $echo ${A}${B} Hello,World ( 5)設(shè)置變量的默認(rèn)值 Bourne Shell允許對變量設(shè)置默認(rèn)值 , 其格式如下: ${variable:defaultvalue} $color=blue $echo The sky is ${color:grey} today 輸出結(jié)果: The sky is blue today $color=blue $unset color $echo The sky is ${color:grey} today The sky is grey today $echo ${color} $ 改變變量的值,格式如下: ${variable:=value} $color=blue $unset color $echo The sky is ${color:=grey} today The sky is grey today $echo ${color} $ grey ( 6) 使用變量來保存系統(tǒng)命令參數(shù) ? 可以用變量保存系統(tǒng)命令參數(shù)的替換信息 。 $ source= ‘/etc/passwd‘ $ cd $source ( 7) 設(shè)置只讀變量 格式: variablename=value readonly variablename 查看所有只讀變量 , 使用命令 readonly 環(huán)境變量 ? 環(huán)境變量用于所有用戶進程(經(jīng)常稱為子進程)。登錄進程稱為父進程。 s h e l l中執(zhí)行的用戶進程均稱為子進程。 ? 環(huán)境變量應(yīng)用于用戶進程前,必須用export命令導(dǎo)出。 (1) 設(shè)置環(huán)境變量 ? VARIABLENAME=value; export VARIABLENAME 也可: VARIABLENAME=value export VARIABLENAME 環(huán)境變量 (續(xù) ) (2)顯示環(huán)境變量 顯示環(huán)境變量與顯示本地變量一樣 。 使用 env命令可以查看所有的環(huán)境變量 。 (3) 清除環(huán)境變量 使用 unset命令清除環(huán)境變量 ( 4) set命令 ? 不帶參數(shù)的 set命令輸出目前所有的 shell變量(含用戶自定義的變量)和它們的當(dāng)前值。 ( 5) 將變量導(dǎo)出到子進程 $cat father !/bin/sh father script echo this is the father FILM=A Few Good Men echo I like the film :$FILM ./child call the child script echo back to father echo and the film is :$FILM 將變量導(dǎo)出到子進程 (續(xù) ) $cat child !/bin/sh child script echo called from father..i am the child echo film is :$FILM FILM=Die Hard echo changing film to :$FILM 顯示結(jié)果 this is the father I like the film :A Few Good Men called from father..i am the child film is : changing film to :Die Hard back to father and the film is :A Few Good Men $cat father2 !/bin/sh father2 script echo this is the father FILM=A Few Good Men echo I like the film :$FILM call the child script but export varible fi