国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

第6章 變量

2019-11-08 18:22:30
字體:
供稿:網(wǎng)友

1.     普通變量

1.1         統(tǒng)計計算機(jī)的軟硬件信息

案例:

#!/bin/bash#使用便利替換定義若干個變量TIME=`date`NAME=`uname -n`KERNEL=`uname -s`VERSION=`uname -r`ARCH=`uname -m`OS=`uname -o`echo echo " Info about your computer"echo " =============================="echo " Current Time:         $TIME"echo " Host Name:            $NAME"echo " Operating System:     $OS"echo " Computer ARCH:        $ARCH"echo " Kernel Version:       $KERNEL $VERSION"echoexit 0

Shell腳本中定義變量的語法格式:

NAME=value

 

注意:定義變量的等號兩側(cè)不能有空格;變量的名字只能包含大小寫字母、數(shù)字和下劃線_,并且只能以字母或下劃線開頭;

 

1.2         如果變量的值是來至于腳本運行后,用戶的輸入數(shù)據(jù)

可以使用read命令把用戶的輸入賦值給變量,使用unset命令刪除一個定義過的變量。

  read –p “PRomptinfomation”  variable1 variable2 ….

案例:

#!/bin/bashechoread -p " Please input your name:" NAMEecho -e " Welcome,$NAME! /n Your name is saved in variable 'NAME'!"echo "------------------"echo echo " Clear variable 'NAME' using 'unset' command."#清除變量的值unset NAMEecho echo " Now variable 'NAME' is:"#判斷變量是否被清除if [ -z $NAME ]then      echo echo " NAME:$NAME" echo " Variable NAME is null."else      echo echo " NAME:$NAME" echo " Variable NAME is not null"fiechoecho " quit"echoexit 0

1.3         把變量定義為一個只讀常量

案例:

#!/bin/bashVERSION=2.0#聲明變量VERSION是一個只讀變量readonly VERSIONechoecho -e " Defined readonly variable:/n VERSIN=$VERSION"echo#嘗試修改一個只讀變量,會失敗echo " Try to modify readonly variable VERSION"VERSION=3.0echoecho -e " Readonly variable VERSION doesn't change, /n VERSION=$VERSION"exit 0

2.     數(shù)組變量

一個變量保存多個值

案例:

#!/bin/bash#數(shù)組元素從0開始index=0#從passwd文件中取出所有用戶#指定分隔符為磨耗,使用cut命令從passwd文件的每一行中提取出用戶名for i in `cut -f 1 -d: /etc/passwd`do      #把每一個用戶名賦值給user數(shù)組的元素 user[$index]=$i   echo user[$index]  #每賦值一個用戶后,把索引值加一 let index=$index+1   done#重復(fù)使用變量index作為行號index=1#使用字符@分隔所有的數(shù)組元素#如果沒有使用雙引號引用,使用星號${user[*]}也可以for name in "${ user[@] }"do      echo " $index:$name" #行號加一 let index=$index+1doneecho "---------------"echo " Print all users in one line:"echo#把所有的數(shù)組元素作為一個整體進(jìn)行打印echo "${ user[*] }"#把數(shù)組元素作為單個的個體進(jìn)行打印echoecho "---------------"#對user數(shù)組重新賦值,前50個元素將會丟失#即使沒有明確地覆蓋它們echo " Reassign the user array,the user names will be lost:"user=([50]=zhangze,emma,patrick)echoecho ${ user[*] }echoexit 0

 

語法:

array[index]=value

 

3.     環(huán)境變量

在Shell腳本中如何創(chuàng)建環(huán)境變量,從而使得子進(jìn)程可以訪問這些變量呢?

 

把一個變量放到環(huán)境中這個過程通常叫做導(dǎo)出一個變量,Shell中定義并導(dǎo)出一個變量的方法為:

  name=value;exportname

或者

export name=value

案例:

parent.sh內(nèi)容如下:

#!/bin/bash#檢查是否指定了命令行選項--export#[]中的字符需要與[]空格開if [ "$1" = "--export" ]then       #在父進(jìn)程中定義全局變量 export LOCATION=USAelif [ "$1"="--no-export" ]then      #在父進(jìn)程中定義一個本地變量 LOCATION=USAelse      #顯示本腳本的使用方法 echo echo -e "`basename $0` --export/texport parent process's variable to child process" echo -e "`basename $0` --no-export/tdon't export parent process's variable to child process" echo exit 0fiecho echo "Your parent is at $LOCATION."#創(chuàng)建子進(jìn)程,子進(jìn)程是否能夠得到LOCATION變量的拷貝依賴于export關(guān)鍵字./child.sh#子進(jìn)程退出,父進(jìn)程繼續(xù)運行echoecho -e "Your parent is at '$LOCATION'."echo -e "Child process and parent process have different LOCATION."echo exit 0

child.sh內(nèi)容如下:

#!/bin/bash#檢查子進(jìn)程中是否有父進(jìn)程中變量LOCATION的拷貝echo "-----------------------"echo " The child is at '${LOCATION:-somewhere not defined}'."#如果子進(jìn)程中擁有變量LOCATION的拷貝,就修改它,如果沒有就定義它LOCATION=CHINA#訪問子進(jìn)程中的變量LOCATIONecho echo " The child is at '$LOCATION'."echo "------------------------------"exit 0

4.     Shell變量

除了我們自己在腳本中創(chuàng)建的本地變量和環(huán)境變量以外,Shell在啟動過程中還會設(shè)置一些特殊的變量來幫助Shell正確運行,這些變量叫做Shell變量。

例如:HOME、SHELL、USER等等。

 

5.     特殊變量

除了前面介紹的變量,還有一些具有某些特殊功能的特殊變量,它們由Shell創(chuàng)建并只能被Shell修改。

特殊變量:

$0:表示腳本本身

$1、$2、$3依次是腳本后面的選項或參數(shù)的值

$@:表示從$1、$2、$3...的參數(shù)

$#:表示除$0外的所有參數(shù)的個數(shù)

$?:表示shell返回的狀態(tài)

         

5.1         實現(xiàn)一個顯示文本文件內(nèi)容的腳本,可以通過命令行參數(shù)來告知腳本我們所希望操作的文件

案例:

#!/bin/bash#檢查是否指定了參數(shù)if [ -n "$1" ]then       echo  #顯示腳本文件名及腳本如何被調(diào)用 echo -e " Script Name:/t/t/t`basename $0`" echo -e " How Script is invoked:/t/t$0 $1"  #顯示指定的參數(shù) if [ -f "$1" ] then        echo echo "The content of file '$1':"echo "---------------------------"#顯示命令行指定的參數(shù)文件的內(nèi)容echo "`cat $1`"echo "---------------------------" else       echo " File $1 don't exist."exit 1   fielse       #如果沒有指定參數(shù),顯示幫助信息 echo  echo "Show the content of a file"      echo      echo " Usage."      echo " `basename $0` [filename]"  echo " $0 [filename]"       fiechoexit 0

 

5.2         如果用戶執(zhí)行腳本時,每一次所指定的參數(shù)個數(shù)都不固定。

案例:

#!/bin/bash#如果沒有指定文件#使用if[-z $1]也可以達(dá)到同樣的效果if [ $# -eq 0 ]then       echo      echo "Usage:`basename $0` [filename]..."      echo "At least specify one filename to remove execute permission for group and others."      exit 0      fiecho#檢查是否有其他的參數(shù)#使用until [ -z $1 ]可以達(dá)到同樣的效果while [ $# -gt 0 ]do      echo "Processing file '$1'." chmod go-x $1  #刪除第一個參數(shù) shiftdoneecho "Done"echo exit 0

shift命令:

1 shifit         刪除一個參數(shù)

2 shifit n        刪除n個參數(shù)

3 shift “$#”      刪除所有參數(shù)

4 shift $(($# -3))  刪除除了最后的3個位置參數(shù)外的所有參數(shù)。

 

5.3         除了特殊變量$#和shift命令組合實現(xiàn)參數(shù)動態(tài)變化,還有$@和$*

案例:

#!/bin/bash#如果沒有指定文件#使用if[-z $1]也可以達(dá)到同樣的效果if [ $# -eq 0 ]then       echo      echo "Usage:`basename $0` [filename]..."      echo "At least specify one filename to remove execute permission for group and others." echo      exit 1    fiechoecho "You specified the following parameters:"echo " <<$*>>"echo#遍歷所有參數(shù)for PARAMETER in "$@"do       echo " Processing file '$PARAMETER'." #刪除權(quán)限 chmod go-x $PARAMETERdoneecho " Done" exit 0

由于變量$@和$*代表了完整的參數(shù)列表,所以在用while循環(huán)檢查是否還有剩余的參數(shù)等待處理時,還可以使用如下形式:

  while [ “$@” != “”] 或者 while [ -n “$@” ]

  while [ “$*” != “”] 或者 while [ -n “$*” ]

 

5.4         查看上個命令是否成功,再根據(jù)結(jié)果采取不同的操作

案例:

#!/bin/bashNEWDIR=~/newdirNEWFILE=newfile#指定log文件為special.pid.logLOGFILE=`basename $0 .sh`.$$.log#在主目錄下創(chuàng)建一個目錄finmkdir $NEWDIRif [ $? -eq 0 ]then      #成功地創(chuàng)建log目錄 echo "`date`:Creating Directory '$NEWDIR' succeed." #在log目錄中創(chuàng)建log文件 echo " `date`:Creating Directory '$NEWDIR' succeed." >> $LOGFILE  #改變當(dāng)前工作目錄為~、newdir cd $NEWDIR  if [ $? -eq 0 ] then            echo "`date`:Changing Current Directory to '$NEWDIR' succeed."#當(dāng)前工作目錄改變,因此使用OLDPWDecho "`date`:Changing Current Directory to '$NEWDIR' succeed." >> $OLDPWD/$LOGFILE#然后創(chuàng)建一個新的文件touch $NEWFILEif [ $? -eq 0 ]then     echo "`date`:Creating newfile in directory '$NEWDIR' succeed." #當(dāng)前工作目錄改變,因此使用OLDPWD echo "`date`:Creating newfile in directory '$NEWDIR' succeed." >> $OLDPWD/$LOGFILEelse      #$? != 0 意味著失敗 echo "`date`:Creating newfile in directory '$NEWDIR' failed." #當(dāng)前工作目錄改變,因此使用OLDPWD echo "`date`:Creating newfile in directory '$NEWDIR' failed." >> $OLDPWD/$LOGFILEfi  else        #$? != 0 意味著失敗       echo "`date`:Changing Current Directory to '$NEWDIR' failed."       #當(dāng)前工作目錄改變,因此使用OLDPWD       echo "`date`:Changing Current Directory to '$NEWDIR' failed." >> $OLDPWD/$LOGFILE fi            else        #$? != 0 意味著失敗 echo "`date`:Creating directory '$NEWDIR' failed." echo "`date`:Creating directory '$NEWDIR' failed." >> $LOGFILE      fi      echo "Please check log file $LOGFILE." echo      exit 0

變量$?:在Unix/linux系統(tǒng)中,每一個命令或腳本在結(jié)束運行后都會返回一個0到255之間的數(shù)值,用來表示是否成功執(zhí)行,這個數(shù)值被Shell保存在特殊變量$?中。數(shù)值0通常用來表示成功執(zhí)行,而1或1以上的其他數(shù)字則代表失敗和各種各樣的錯誤。

 

注意:

  1 當(dāng)位置變量大于或等于10后,必須使用花括號,如{10}。這樣,Shell不會當(dāng)成位置變量$1+0

  2 不可以該表位置變量的值,且普通變量不能以數(shù)字開頭

  3 在for循環(huán)遍歷完整的參數(shù)列表時,應(yīng)該使用$@而不是$*


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邢台市| 屏南县| 津市市| 枣庄市| 南江县| 鹤岗市| 武胜县| 西乡县| 余江县| 儋州市| 东平县| 海晏县| 水城县| 苏尼特左旗| 安国市| 固阳县| 德阳市| 屯门区| 武陟县| 台南县| 洛南县| 榆中县| 福泉市| 夏河县| 崇文区| 潜山县| 句容市| 曲松县| 扎囊县| 深州市| 连州市| 南昌市| 贵溪市| 田林县| 宁波市| 满洲里市| 探索| 东安县| 宁乡县| 渝中区| 沙坪坝区|