計(jì)算機(jī)硬件及網(wǎng)絡(luò)Linux的shell編程課件_第1頁
計(jì)算機(jī)硬件及網(wǎng)絡(luò)Linux的shell編程課件_第2頁
計(jì)算機(jī)硬件及網(wǎng)絡(luò)Linux的shell編程課件_第3頁
計(jì)算機(jī)硬件及網(wǎng)絡(luò)Linux的shell編程課件_第4頁
計(jì)算機(jī)硬件及網(wǎng)絡(luò)Linux的shell編程課件_第5頁
已閱讀5頁,還剩263頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章Linux的shell編程

第5章Linux的shell編程15.1什么是shell

當(dāng)一個用戶登錄Linux系統(tǒng)之后,系統(tǒng)初始化程序init就為每一個用戶運(yùn)行一個稱為shell(外殼)的程序。shell就是一個命令行解釋器。一般的Linux系統(tǒng)都將bash作為默認(rèn)的shell。

5.1什么是shell當(dāng)一個用戶登錄Linux系統(tǒng)之后,系25.2幾種流行的shell目前流行的shell有ash、bash、ksh、csh、zsh等,bash是Linux系統(tǒng)默認(rèn)使用的shell。可以用下面的命令來查看shell的類型:#echo$SHELLSHELL是一個環(huán)境變量,它記錄用戶所使用的shell類型。5.2幾種流行的shell目前流行的shell有ash、ba3幾種流行的shell(續(xù))可以用命令:#shell-name來轉(zhuǎn)換到別的shell$exit退出子shell。幾種流行的shell(續(xù))可以用命令:45.3shell程序設(shè)計(jì)

使用shell編程類似于DOS中的批處理文件,稱為shellscript,又叫shell程序或shell命令文件或者shell腳本。Shell腳本程序是按行來解釋的,腳本程序總是以#!/bin/sh開始的,符號#!用來告訴系統(tǒng)它后面的參數(shù)是用來執(zhí)行該文件的程序。5.3shell程序設(shè)計(jì)使用shell編程類似于DOS中5如果要執(zhí)行該腳本,還必須使其可執(zhí)行。chmod+xfilename然后,您可以通過輸入:./filename來執(zhí)行您的腳本。如果要執(zhí)行該腳本,還必須使其可執(zhí)行。6$catfirstscript.sh#!/bin/shecho“Youarewelcometousebase.”echo“Currentworkdirectoryis$PWD.”echo“Youare$LOGNAME.”增加執(zhí)行權(quán)限$chmod+xfirstscript.sh開始運(yùn)行程序:$./firstscript.sh$catfirstscript.sh7執(zhí)行結(jié)果:

Youarewelcometousebase.Currentworkdirectoryis/rootYouareroot.

執(zhí)行結(jié)果:Youarewelcometouseb8shell只有字符型變量。shell變量無需初始化,一個沒有初始化的shell變量自動被初始化為一個空串。shell變量名大小寫敏感。5.4shell基礎(chǔ)編程5.4.1shell變量shell只有字符型變量。5.4shell基礎(chǔ)編程5.4.9BourneShell有如下四種變量:

本地變量(用戶自定義變量

位置變量即

shellscript之參數(shù)

預(yù)定義變量(特殊變量)環(huán)境變量(參考shell定制部分)shell變量(續(xù))BourneShell有如下四種變量:shell變量(續(xù)105.4.1.1本地變量(用戶自定義變量)

本地變量在用戶現(xiàn)在的shell生命期的腳本中使用。

要設(shè)置一本地變量,格式為:

$variable-name=value或${variable-name=value}

因?yàn)榇蟛糠諰INUX命令使用小寫字符,因此在shell編程中變量通常全部大寫。

變量的引用:在變量前加$。5.4.1.1本地變量(用戶自定義變量)本地變量在用戶現(xiàn)在11(1)顯示變量

使用echo命令輸出單個變量的值,此時(shí)要在變量名前加$

$WEEK=Satur$echoTodayis$WEEKday輸出:Todayis使用花括號來告訴shell我們要顯示的變量:$echoTodayis${WEEK}day輸出:TodayisSaturday(1)顯示變量使用echo命令輸出單個變量的值,此時(shí)要在變12(2)清除變量:使用unset命令刪除變量的賦值$Z=hello$echo$Zhello$unsetZ$echo$Z

$(2)清除變量:使用unset命令刪除變量的賦值13(3)顯示所有本地shell變量:

使用set命令顯示所有本地定義的shell變量(3)顯示所有本地shell變量:使用set命令顯示所有本14(4)結(jié)合變量值

Echo${variable-name1}${variable-name2}$A=’Hello,’$B=’World’$echo${A}${B}Hello,World(4)結(jié)合變量值Echo${variable-name115(5)設(shè)置變量的默認(rèn)值

BourneShell允許對變量設(shè)置默認(rèn)值,其格式如下:

${variable:-defaultvalue}

$color=blue$echo"Theskyis${color:-grey}today"輸出結(jié)果:Theskyisbluetoday

(5)設(shè)置變量的默認(rèn)值BourneShell允許對變量設(shè)16$color=blue$unsetcolor$echo"Theskyis${color:-grey}today"Theskyisgreytoday$echo${color}$$color=blue17改變變量的值,格式如下:${variable:=value}$color=blue$unsetcolor$echo"Theskyis${color:=grey}today"Theskyisgreytoday$echo${color}$grey改變變量的值,格式如下:18(6)使用變量來保存系統(tǒng)命令參數(shù)

可以用變量保存系統(tǒng)命令參數(shù)的替換信息。$source=’/etc/passwd’$cd$source

(6)使用變量來保存系統(tǒng)命令參數(shù)可以用變量保存系統(tǒng)命令參數(shù)19(7)設(shè)置只讀變量

格式:variable-name=valuereadonlyvariable-name

查看所有只讀變量,使用命令readonly(7)設(shè)置只讀變量格式:205.4.1.2環(huán)境變量

環(huán)境變量用于所有用戶進(jìn)程(經(jīng)常稱為子進(jìn)程)。登錄進(jìn)程稱為父進(jìn)程。shell中執(zhí)行的用戶進(jìn)程均稱為子進(jìn)程。環(huán)境變量應(yīng)用于用戶進(jìn)程前,必須用export命令導(dǎo)出。5.4.1.2環(huán)境變量環(huán)境變量用于所有用戶進(jìn)程(經(jīng)常稱為21(1)設(shè)置環(huán)境變量

VARIABLE-NAME=value;exportVARIABLE-NAME也可:VARIABLE-NAME=valueexportVARIABLE-NAME(1)設(shè)置環(huán)境變量VARIABLE-NAME=value22環(huán)境變量(續(xù))(2)顯示環(huán)境變量顯示環(huán)境變量與顯示本地變量一樣。使用env命令可以查看所有的環(huán)境變量。(3)清除環(huán)境變量使用unset命令清除環(huán)境變量環(huán)境變量(續(xù))(2)顯示環(huán)境變量23(4)set命令

不帶參數(shù)的set命令輸出目前所有的shell變量(含用戶自定義的變量)和它們的當(dāng)前值。(4)set命令不帶參數(shù)的set命令輸出目前所有的shel24(5)將變量導(dǎo)出到子進(jìn)程

$catfather#!/bin/sh#fatherscriptecho"thisisthefather"FILM="AFewGoodMen"echo"Ilikethefilm:$FILM"./child#callthechildscriptecho"backtofather"echo"andthefilmis:$FILM"

(5)將變量導(dǎo)出到子進(jìn)程$catfather25將變量導(dǎo)出到子進(jìn)程(續(xù))$catchild#!/bin/sh#childscriptecho"calledfromfather..iamthechild"echo"filmis:$FILM"FILM="DieHard"echo"changingfilmto:$FILM"

將變量導(dǎo)出到子進(jìn)程(續(xù))$catchild26顯示結(jié)果thisisthefatherIlikethefilm:AFewGoodMencalledfromfather..iamthechildfilmis:changingfilmto:DieHardbacktofatherandthefilmis:AFewGoodMen

顯示結(jié)果thisisthefather27$catfather2#!/bin/sh#father2scriptecho"thisisthefather"FILM="AFewGoodMen"echo"Ilikethefilm:$FILM"#callthechildscript#butexportvariblefirstexportFILM#在調(diào)用腳本前導(dǎo)出變量./childecho"backtofather"echo"andthefilmis:$FILM"$catfather228輸出結(jié)果$./father2thisisthefatherIlikethefilm:AFewGoodMencalledfromfather..iamthechildfilmis:AFewGoodMenchangingfilmto:DieHardbacktofatherandthefilmis:AFewGoodMen

輸出結(jié)果$./father2thisisthefat295.4.1.3

位置變量參數(shù)

如果要向一個shell腳本傳遞信息,可以使用位置參數(shù)完成此功能。參數(shù)相關(guān)數(shù)目傳入腳本,此數(shù)目可以任意多,但只有前9個可以被訪問,使用shift命令可以改變這個限制。參數(shù)從第1個開始,在第9個結(jié)束;每個訪問參數(shù)前要加$符號。第一個參數(shù)為0,表示預(yù)留保存實(shí)際腳本名字。5.4.1.3位置變量參數(shù)如果要向一個shell腳本傳30位置變量參數(shù)(續(xù))如向腳本傳送DidYouSeeTheFullMoon信息:$0

$1

$2

$3

$4

$5

$6

腳本名字

Did

You

See

The

Full

Moon

$7

$8

$9位置變量參數(shù)(續(xù))如向腳本傳送DidYouSeeThe31(1)在腳本中使用位置參數(shù)

$catparam#!/bin/sh#paramecho"Thisisthescriptname

:$0"echo"Thisisthefirstparameter:$1"echo"Thisisthe2ndparameter

:$2"echo"Thisisthethirdparameter:$3"

echo"Thisisthe6thparameter

:$6"echo"Thisisthe7thparameter

:$7"

(1)在腳本中使用位置參數(shù)$catparam32輸出結(jié)果執(zhí)行:$./paramDidYouSeeTheFullMoon

Thisisthescriptname

:./paramThisisthefirstparameter:DidThisisthe2ndparameter

:YouThisisthethirdparameter:SeeThisisthe6thparameter

:MoonThisisthe7thparameter

:輸出結(jié)果執(zhí)行:$./paramDidYouSeeT33(2)向系統(tǒng)命令傳遞參數(shù)

$catfindfile#!/bin/sh#findfilefind/-name$1–print

(2)向系統(tǒng)命令傳遞參數(shù)$catfindfile345.4.1.4預(yù)定義變量

預(yù)定義變量是在shell一開始時(shí)就定義了的變量,用戶不能重定義它。所有預(yù)定義變量都是由$符和另一個符號組成的。常用的預(yù)定義變量:$#傳遞到腳本的參數(shù)個數(shù)$*以一個單字符串顯示所有向腳本傳遞的參數(shù)。與位置變量不同,此選項(xiàng)參數(shù)可超過9個$$腳本運(yùn)行的當(dāng)前進(jìn)程ID號

5.4.1.4預(yù)定義變量預(yù)定義變量是在shell一開始35預(yù)定義變量(續(xù))$!后臺運(yùn)行的最后一個進(jìn)程的進(jìn)程ID號$@與$#相同,但是使用時(shí)加引號,并在引號中返回每個參數(shù)$-顯示shell使用的當(dāng)前選項(xiàng),與set命令功能相同$?顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤。預(yù)定義變量(續(xù))$!后臺運(yùn)行的最后一個進(jìn)程的進(jìn)程ID號36(1)最后的退出狀態(tài)

$cpok.txt/tmp$echo$?0$cpok.txt/usr/bin/aaa/bbbcp:cannotcreateregularfile'/usr/bin/aaa/bbb':Nosuchfileordirectory$echo$?1(1)最后的退出狀態(tài)$cpok.txt/tm375.4.2條件測試

(1)測試文件狀態(tài)test一般有兩種格式,即:testcondition 或[condition]使用方括號時(shí),要注意在條件兩邊加上空格。

5.4.2條件測試(1)測試文件狀態(tài)38測試文件狀態(tài)(續(xù))-r文件名:如果文件存在且可讀則為真-w文件名:如果文件存在且可寫則為真-x文件名:如果文件存在且可執(zhí)行則為真-s文件名:如果文件存在且至少有一個字符則為真-d文件名:如果文件存在且為目錄則為真-f文件名:如果文件存在且為普通文件則為真-e文件名:如果文件存在則為真-c文件名:如果文件存在且為字符型特殊文件則為真-b文件名:如果文件存在且為塊特殊文件則為真測試文件狀態(tài)(續(xù))-r文件名:如果文件存在且可讀則為真39測試文件scores.txt是否可寫

$ls–lscores.txt-rw-r—r--1dave admin 0May1511:29scores.txt$[-wscores.txt]$echo$?0$test–wscores.txt$echo$?0測試文件scores.txt是否可寫$ls–lsco40簡單的算術(shù)運(yùn)算

格式:$[expression]

例如:var1=2var2=$[var1*10+1]

則:var2的值為21。

簡單的算術(shù)運(yùn)算格式:$[expression]41數(shù)值數(shù)據(jù)處理Bash提供了3種方法對數(shù)值型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算:(1)使用let命令(2)使用shell擴(kuò)展$((expression))(3)使用expr命令數(shù)值數(shù)據(jù)處理Bash提供了3種方法對數(shù)值型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算:42(1)let命令語法:letexpress-list功能:求出算術(shù)表達(dá)式的值如果最后的表達(dá)式取值為0,則let命令返回1;否則返回0。$let“a=8”“b=13”#命令中的表達(dá)式含空格,需加雙引號$letc=a+b(1)let命令語法:letexpress-list43$echo“Thevalueofcis$c.”Thevalueofcis21.$let“a*=b”$echo“Thenewvalueofais$a;theproductofaandb.”Thenewvalueofais104;theproductofaandb.$echo“Thevalueofcis$c.”44Bash擴(kuò)展語法:$((expression))功能:計(jì)算expression并返回它的值$a=8b=13$echo“Thenewvalueofcis$((a+b)).”Thenewvalueofcis21.Bash擴(kuò)展語法:$((expression))45expr命令語法:exprargs功能:計(jì)算args的值,并返回它的值到標(biāo)準(zhǔn)輸出$var1=10$var1=‘expr$var1+1’$echo$var111expr命令語法:exprargs46(2)測試時(shí)使用邏輯操作符號

Shell提供了三種邏輯操作完成兩個文件狀態(tài)比較的功能-a邏輯與-o邏輯或!邏輯否測試兩個文件是否均可寫$[-wscores.txt–a–wresults.txt]$echo$?0(2)測試時(shí)使用邏輯操作符號Shell提供了三種邏輯操作完47(3)字符串測試

字符串測試共包含五種格式:test“string”teststring_operator“string”test“string”string_operator“string”[string_operatorstring][stringstring_operatorstring]

(3)字符串測試字符串測試共包含五種格式:48String_operator可以為:=:兩個字符串相等!=:兩個字符串不等-z:空串-n:非空串

String_operator可以為:=:兩個字符串相等49比較兩個字符串是否相等

$TAPE1=”/dev/rmt0”$TAPE2=”dev/rmt1”$[“$TAPE1”=“$TAPE2”]$echo$?1

比較兩個字符串是否相等$TAPE1=”/dev/rmt0”50(4)數(shù)值測試

格式:“number”numeric_operator“number”或[“number”numeric_operator“number”]

(4)數(shù)值測試格式:51numeric_operator一般為:-eq:數(shù)值相等-ne:數(shù)值不相等-gt:大于-lt:小于-le:小于等于-ge:大于等于

numeric_operator一般為:-eq:數(shù)值相等52測試兩個數(shù)是否相等

$NUMBER=130$[“NUMBER”–eq“130”]$echo$?0測試兩個數(shù)是否相等$NUMBER=13053測試兩個表達(dá)式

$[“990”–le“995”–a“123”–gt“33”]$echo$?0測試兩個表達(dá)式$[“990”–le“995”–a545.4.3控制流結(jié)構(gòu)

(1)if語句

if[expression1]thencommand-list[elif[expression2]thenthen-command-list]…[elseelse-command-list]fi在這里,一個expression是一系列命令。5.4.3控制流結(jié)構(gòu)

(1)if語句if[expr55也可采用如下格式:

if[expression1];then

command-list

[elif[expression2];then

then-command-list]

[else

else-command-list]

fi

也可采用如下格式:

if[expression1];the56三種典型的if結(jié)構(gòu)第一種if語句:ifexpressionthenthen-commandsfi第二種if語句:ifexpressionthenthen-commandselseelse-commandsfi三種典型的if結(jié)構(gòu)第一種if語句:第二種if語句:57第3種if語句ifexpression1thenthen-commandselifexpression2then

elif1-commandselifexpression3then

elif2-commands

…else

else-commandsfi第3種if語句58例如:$catgrade_evaluate.sh#!/bin/sh#Usage:./grade_evaluategrade#gradeshouldbebetween0and100,including0and100if[$1–lt'0'];then echo"Error:invalidgrade"elif[$1–lt'60'];then echo'nopass'例如:$catgrade_evaluate.sh59elif[$1–lt'70'];then echo"pass"elif[$1–lt'80'];then echo'good'elif[$1–le'100'];then echo'excellent'else echo'Error:invalidgrade'fielif[$1–lt'70'];then60(2)case語句

格式:casetest-stringin模式1)command-list1;;模式2)command-list2;;…*)command-listN+1;;esac

(2)case語句格式:61case語句(續(xù))in的每一模式必須以右括號")"結(jié)束,取值可以為變量或常數(shù),匹配發(fā)現(xiàn)string1取值符合某一模式后,其間所有命令開始執(zhí)行直至;;.如果模式1、模式2中沒有和strings1相符合的,則星號(*)下面的語句被執(zhí)行。模式匹配符*代表任意字符,?表示任意單個字符,[..]表示類或范圍中任意字符。

case語句(續(xù))in的每一模式必須以右括號")"62$catcaseexample.sh#!/bin/shecho–n"Doyouwanttocontinuethisoperation?[n]"readyesnocase$yesnoiny|Y|Yes|yes) echo"systemwillcontinuethisoperation" ;;$catcaseexample.sh63n|N|no|NO) echo"systemwillskipthisoperation" ;;*) echo"Incorrectinput" exit1 ;;esacn|N|no|NO)64(3)for語句

有兩種使用for語句的表達(dá)式:第一種形式是:forvarinlistdocommandsdone(3)for語句有兩種使用for語句的表達(dá)式:65第二種形式是:forvardostatementsDone使用這種形式時(shí),變量var的取值是位置參數(shù)。第二種形式是:forvar66$catsimplefor.sh#!/bin/shforiin13579doecho$Idone$catsimplefor.sh67(4)while和until循環(huán)

while循環(huán)的一般格式為:whileexpressiondostatementsdone(4)while和until循環(huán)while循環(huán)的一般格式為68$catwhileexample.sh#!/bin/shwhilereadstringdoecho”yourstringis$string”doneecho'Thankyou,Bye!'

$catwhileexample.sh69#!/bin/bash#programtest_while#count=1while[-n"$*"]doecho"Thisisparameternumber$count$1"shiftletcount=count+1done

#!/bin/bash70until語句的格式為:untilexpressiondocommandsdoneuntil語句的格式為:71#!/bin/bash#programtest_until#count=1until[-z"$*"]doecho"Thisisparameternumber$count$1"shiftletcount=count+1done

#!/bin/bash72$catuntilexample.sh#!/bin/shuntilreadstringdoecho”yourstringis$string”doneecho'Thankyou,Bye!'

$catuntilexample.sh73輸出結(jié)果$<ctrl+D>yourstringis(程序繼續(xù))$abcThankyou,Bye!輸出結(jié)果$<ctrl+D>74Shell還提供了true和false兩條命令用于建立無限循環(huán)結(jié)構(gòu)的需要,它們的返回狀態(tài)分別是總為0或總為非0

Shell還提供了true和false兩條命令用于建立無限循75(5)

breakandcontinue

break

退出循環(huán)$catbreakexample.sh#!/bin/shwhile:do readstring if[$?!=0];then break fidone(5)

breakandcontinuebreak76$catcontinueexample.sh#!/bin/shfor((i=0;i<20;i=$i+1))do echo–n$i if[$i–lt10];then echo'' continue fi echo'Thisisatwodigitalnumeric'done$catcontinueexample.sh775.4.4shell內(nèi)嵌命令

命令功能:

空,永遠(yuǎn)返回為true

.

從當(dāng)前shell中執(zhí)行操作

break

退出for、while、until或case語句

cd

改變當(dāng)前目錄

pwd

顯示當(dāng)前目錄

5.4.4shell內(nèi)嵌命令命令功能:空,永遠(yuǎn)返回為78continue

結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)

echo

反饋信息到標(biāo)準(zhǔn)輸出

eval

讀取參數(shù),執(zhí)行結(jié)果命令

exec

執(zhí)行命令替代shell,它不創(chuàng)建新的進(jìn)程,而是用被執(zhí)行的命令取代當(dāng)前的shell進(jìn)程

exit

退出當(dāng)前shell

export

導(dǎo)出變量,使當(dāng)前shell可利用它

read

從標(biāo)準(zhǔn)輸入讀取一行文本

readonly

使變量變成只讀

return

退出函數(shù)并帶有返回值

set

控制各種參數(shù)到標(biāo)準(zhǔn)輸出的顯示

continue結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)echo反79shift

命令行參數(shù)向左偏移一個

test

評估條件表達(dá)式

times

顯示shell運(yùn)行過程的用戶和系統(tǒng)時(shí)間

trap

當(dāng)捕捉信號時(shí)運(yùn)行指定命令

ulimit

顯示或設(shè)置shell資源

umask

顯示或設(shè)置默認(rèn)文件創(chuàng)建模式

unset從shell內(nèi)存中刪除變量或函數(shù)wait

等到直到子進(jìn)程運(yùn)行完畢,報(bào)告終止

shift命令行參數(shù)向左偏移一個test評估條件表達(dá)式80shell內(nèi)嵌命令(續(xù))shell內(nèi)嵌命令(內(nèi)部命令)是由Bourneshell本身提供的,不是存在于/bin或usr/bin目錄里。內(nèi)部命令比系統(tǒng)里的相同命令執(zhí)行得快。shell內(nèi)嵌命令(續(xù))shell內(nèi)嵌命令(內(nèi)部命令)是81eval

命令格式:evalargs功能:當(dāng)shell程序執(zhí)行到eval語句時(shí),shell讀入?yún)?shù)args,并將參數(shù)連接成一個新的命令讓shell執(zhí)行。$evalexpr1+12$echo$?0eval命令格式:evalargs82exec命令格式:exec命令命令參數(shù)功能:當(dāng)shell執(zhí)行到exec語句時(shí),不會去創(chuàng)建新的子進(jìn)程,而是轉(zhuǎn)去執(zhí)行指定的命令,當(dāng)指定的命令執(zhí)行完時(shí),該進(jìn)程,也就是最初的shell就終止了,所以shell程序中exec后面的語句將不再被執(zhí)行。$exec

ls

-l

#exec不會創(chuàng)建新的進(jìn)程而是讓ls

-l直接取代當(dāng)前的shell進(jìn)程

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

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

功能:shell用export把它的變量導(dǎo)出到子進(jìn)程,但子進(jìn)程不能用export把它的變量導(dǎo)出到父進(jìn)程。不帶任何變量名的export語句將顯示出當(dāng)前所有的export變量。

export命令格式:export變量名或:export84readonly

命令格式:readonly變量名功能:將一個用戶定義的shell變量標(biāo)識為只讀。不帶任何參數(shù)的readonly命令將顯示出所有只讀的shell變量。

readonly命令格式:readonly變量名85pwd

顯示當(dāng)前當(dāng)前目錄

pwd顯示當(dāng)前當(dāng)前目錄86return

命令格式:return[n]功能:退出函數(shù)并返回給定的值n。當(dāng)n值缺省時(shí),返回值是函數(shù)體內(nèi)最后一個執(zhí)行的命令的返回值。

return命令格式:return[n]87exit

功能:退出shell程序。在exit之后可有選擇地指定一個數(shù)字作為返回狀態(tài)。

exit

功能:退出shell程序。在exit之后可有選擇地88shift

命令格式:shift[n]功能:重新分配命令行參數(shù)與位置參數(shù)的對應(yīng)關(guān)系。在shiftn以后,所有的S*中的參數(shù)會向左移動n個位置。同時(shí)$#會減n。默認(rèn)的n為1。shift命令格式:shift[n]89set

功能:除了可以顯示所有本地變量;還可以用于在腳本內(nèi)部給出其運(yùn)行參數(shù),使得在腳本調(diào)試時(shí)不用重復(fù)輸入?yún)?shù)。$catsetexample.sh#!/bin/shsetfistsecondwhile[$#!=0]

doecho$1shiftdone

set功能:除了可以顯示所有本地變量;還可以用于在腳本內(nèi)部90執(zhí)行結(jié)果./setexample.shfirstsecond

執(zhí)行結(jié)果./setexample.sh91times

顯示shell運(yùn)行過程的用戶和系統(tǒng)時(shí)間。$timesls-l0m0.010s0m0.030s0m0.510s0m0.090stimes顯示shell運(yùn)行過程的用戶和系統(tǒng)時(shí)間。92wait

功能:等待直到一個用戶子進(jìn)程完成??梢栽趙ait命令中指定進(jìn)程ID號;如果未指定,則等待直到所有子進(jìn)程完成。$waitwait功能:等待直到一個用戶子進(jìn)程完成??梢栽趙ait命93“.”(點(diǎn))

命令格式:.Shell程序文件名功能:使shell讀入指定的shell程序文件并依次執(zhí)行文件中的所有語句。

“.”(點(diǎn))命令格式:.Shell程序文件名945.4.5shell函數(shù)

函數(shù)定義的基本格式為:

functionname(){

若干命令行}調(diào)用函數(shù)的格式為:

functionnameparam1param2……5.4.5shell函數(shù)函數(shù)定義的基本格式為:955.4.5shell函數(shù)(續(xù))在函數(shù)定義時(shí)不用帶參數(shù)說明,但在調(diào)用函數(shù)時(shí)可以帶有參數(shù),此時(shí)函數(shù)將會把這些參數(shù)視為位置參數(shù),分別賦予$1、$2、...及$*。

$catfunction.sh#!/bin/shhello(){echo“Hello,world”}5.4.5shell函數(shù)(續(xù))在函數(shù)定義時(shí)不用帶參數(shù)說明96運(yùn)行$.function.sh

$helloHello,world

運(yùn)行$.function.sh97也可以這樣處理:$catfunction.sh#!/bin/shhello(){echo“Hello,world”}hello

也可以這樣處理:$catfunction.sh98運(yùn)行$./function.sh或者.function.sh

運(yùn)行$./function.sh995.4.6shell輸入與輸出

(1)echo

功能:在屏幕上顯示出由arg指定的字符串。輸出的字符串間以空格隔開,并在最后加上換行符。

命令格式:echo

[-n][-e][字符串]或

echo

[--help][--version]5.4.6shell輸入與輸出(1)echo100echo選項(xiàng)

-n

不要在最后自動換行-e

若字符串中出現(xiàn)以下字符,則特別加以處理,而不會將它當(dāng)成一般文字輸出:

\a

發(fā)出警告聲;\b

刪除前一個字符;

\c

最后不加上換行符號;

\f

換行但光標(biāo)仍舊停留在原來的位置;

\n

換行且光標(biāo)移至行首;

\r

光標(biāo)移至行首,但不換行;

echo選項(xiàng)-n

不要在最后自動換行101

\t

插入tab;\v

與\f相同;

\\

插入\字符;

\nnn

插入nnn(八進(jìn)制)所代表的ASCII字符;

\t

插入tab;102echo選項(xiàng)

--help

顯示幫助

--version

顯示版本信息

echo選項(xiàng)

--help

顯示幫助103$catechoexample.sh#!/bin/shecho–n'Pleaseinputname:'readnameecho–n'Pleaseinputsex:'readsexecho–n'pleaseinputage:'readageecho–n'Pleaseinputsecondname:'readname2echo–n'Pleaseinputsecondsex:'readsex2echo–n'pleaseinputsecondage:'readage2

$catechoexample.sh104echo-e“\n\nThisisastudentlist”echo–n‘Name’echo–e-n”\t\tSex”echo–e“\t\tAge”echo–e“${name}\t\t${sex}\t\t${age}”echo–e“${name2}\t\t${sex2}\t\t${age2}”

echo-e“\n\nThisisastudent105(2)read

命令格式:read變量名列表功能:從鍵盤或文件輸入數(shù)據(jù),賦值給變量。shell用空格作為變量之間的分割符。按回車鍵或者CTRL+D結(jié)束輸入。當(dāng)read從文件中讀取數(shù)據(jù)時(shí)候是按照行讀取的,即一次讀取一行。如果沒有碰到回車符,則一直讀到文件末尾。讀取數(shù)據(jù)的方式和從鍵盤輸入時(shí)相同。

(2)read命令格式:read變量名列表106read(續(xù))$readnamesexageYangailinmale25$echo$nameYangailin$echo$sexmale$echo$age25read(續(xù))$readnamesexage107read(續(xù))$readnamesexYangailinmale25$echo$nameYangailin$echo$sexmale25

read(續(xù))$readnamesex108從文件中讀取數(shù)據(jù)$catread_from_file.sh#!/bin/shwhilereadLINE;do#do可以另起一行,此時(shí)#LINE后面的分號可有可無echo$LINE#在標(biāo)準(zhǔn)輸出上顯示文件的內(nèi)容echo$LINE>>/path/WRITE_FILE.TXT#WRITE_FILE.TXT是寫入數(shù)據(jù)的文件名done</path/READ_FILE.TXT #READ_FILE.TXT是要從中讀取數(shù)據(jù)的文件名

從文件中讀取數(shù)據(jù)$catread_from_file.sh109(3)管道pipe

可以通過管道將一個命令的輸出傳遞給另一個命令作為輸入。管道用豎杠|表示,它的語法格式如下:命令1|命令2(3)管道pipe可以通過管道將一個命令的輸出傳遞給另一個110管道pipe(續(xù))$catread_from_file2.sh#!/bin/shcatREAD_FILEwhilereadLINE;#READ_FILE.TXT是要從中讀取數(shù)據(jù)的文件名do #文件應(yīng)該帶上路徑echo$LINE#在標(biāo)準(zhǔn)輸出上顯示文件的內(nèi)容echo$LINE>>/path/WRITE_FILE.TXT#WRITE_FILE.TXT是寫入數(shù)據(jù)的文件名done管道pipe(續(xù))$catread_from_file2.111(4)cat命令

cat命令可以用來顯示文件內(nèi)容,創(chuàng)建文件,還可以用來顯示控制符號(用-v選項(xiàng))。

cat命令一下子顯示整個完整的文件。如果希望每次顯示一頁,可以使用more命令$catfilename$morefilename(4)cat命令cat命令可以用來顯示文件內(nèi)容,創(chuàng)建文112連接文件$catfilename1filename2>filename3#該命令把兩個文件連成一個文件filename3連接文件$catfilename1filename2113輸入文件$cat>a.txtabcefg<ctrl+D>輸入文件$cat>a.txt114(5)tee

功能:tee命令從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),將其內(nèi)容輸出到標(biāo)準(zhǔn)輸出設(shè)備,同時(shí)將輸出的一個副本保存成文件。語

法:tee

[-a][-i][--help][--version][文件…]參

數(shù):-a

附加到文件的后面,而非覆蓋它。如果tee指令的文件已經(jīng)存在,沒有-a則會覆蓋該文件的內(nèi)容。有-a,數(shù)據(jù)會新增在該文件內(nèi)容的最后面,而不會刪除原先之內(nèi)容。-i

忽略中斷信號--help

在線幫助--version

顯示版本信息(5)tee功能:tee命令從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),將其內(nèi)115(6)文件重定向

在Linux中,每一個進(jìn)程都有三個特殊的文件描述指針:標(biāo)準(zhǔn)輸入(standardinput,文件描述符為0)、標(biāo)準(zhǔn)輸出(standardoutput,文件描述符為1)、標(biāo)準(zhǔn)錯誤輸出(standarderror,文件描述符為2)。在Linux中,可以通過文件重定向指定命令的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出。在shell中,使用者可以利用“>”和“<”來進(jìn)行輸入輸出重定向。

(6)文件重定向在Linux中,每一個進(jìn)程都有三個特殊的文116文件重定向(續(xù))command>filename:將標(biāo)準(zhǔn)輸出重定向到文件filename。command1>filename:將標(biāo)準(zhǔn)輸出重定向到文件filename。command>>filename:將標(biāo)準(zhǔn)輸出重定向到文件filename(追加)。command>filename2>&1將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出一起重定向到文件filename。command2>filename:將標(biāo)準(zhǔn)錯誤輸出重定向到文件filename。command2>>filename:將標(biāo)準(zhǔn)錯誤輸出重定向到文件filename(追加)。

文件重定向(續(xù))command>filename:將標(biāo)準(zhǔn)輸出117文件重定向(續(xù))command>>filename2>&1將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出一起重定向到文件filename中(追加)。command<filename>filename2:讓command命令以文件filename為標(biāo)準(zhǔn)輸入,以文件filename2為標(biāo)準(zhǔn)輸出。command<filename:讓command命令以文件filename為標(biāo)準(zhǔn)輸入。command<<delimiter:讓command命令以標(biāo)準(zhǔn)輸入作為輸入,直到遇到delimiter分界符。

文件重定向(續(xù))command>>filename2>&1118文件重定向(續(xù))command<&m:把文件描述符m作為標(biāo)準(zhǔn)輸入。command>&m:把標(biāo)準(zhǔn)輸出重定向到文件描述符m中。command<&-:關(guān)閉標(biāo)準(zhǔn)輸入。

文件重定向(續(xù))command<&m:把文件描述符m作為標(biāo)準(zhǔn)1195.5shell高級編程

5.5.1命令排列、調(diào)度與替換

(1)命令排列shell允許用戶在不同的命令之間,放上特殊的排列字符。用戶如果需要在一行中給出多個命令需使用分號“;”。command1;command2

5.5shell高級編程

5.5.1命令排列、調(diào)度與替換120(1)命令排列(續(xù))command1&&command2上面的命令表示只有當(dāng)command1正確運(yùn)行完畢后,才執(zhí)行command2。

(1)命令排列(續(xù))command1&&command2121command1||command2

上面的命令表示只有當(dāng)command1運(yùn)行失敗才會執(zhí)行command2。

command1||command2上面的命令表示只有122(2)命令的任務(wù)調(diào)度

在shell下面,一個新產(chǎn)生的進(jìn)程可以通過用命令后面的符號“;”和“&”來分別以前臺和后臺的方式來執(zhí)行,語法如下:

command;

產(chǎn)生一個前臺的進(jìn)程,下一個命令須等該命令運(yùn)行結(jié)束后才能輸入。command&

產(chǎn)生一個后臺的進(jìn)程,此進(jìn)程在后臺運(yùn)行的同時(shí),可以輸入其他的命令。

(2)命令的任務(wù)調(diào)度在shell下面,一個新產(chǎn)生的進(jìn)程可以123(3)命令的替換

command1$(command2)除了'$()',還可以用后引號(backquote):command1`command2`

(3)命令的替換command1$(command2)1245.5.2引用

(1)雙引號使用雙引號可引用除字符$(美元符號)、`(反引號)、\(反斜線)外的任意字符或字符串。

(2)單引號如果用單引號把字符串括起來,則單引號內(nèi)字符串中的任何特殊字符的特殊含義均被屏蔽。

5.5.2引用(1)雙引號125引用(續(xù))(3)反引號shell將反引號中的內(nèi)容作為一個系統(tǒng)命令,并執(zhí)行其內(nèi)容。使用這種方法可以替換輸出為一個變量。$TIME=’date’$echo$TIME引用(續(xù))(3)反引號126(4)反斜線如果一個字符有特殊含義,可以使用反斜線防止shell誤解其含義,即屏蔽其特殊含義。下述字符包含有特殊意義:

&

*

+

^

$

`

"

|

?

(4)反斜線如果一個字符有特殊含義,可以使用反斜線防止s1275.5.3命令分組

在shell中有兩種命令分組的方法:“()”和“{}”,當(dāng)用戶在執(zhí)行某個命令時(shí)不想讓命令運(yùn)行時(shí)對狀態(tài)集合(如位置參數(shù)、環(huán)境變量、當(dāng)前工作目錄等)的改變影響到下面語句的執(zhí)行時(shí),就應(yīng)該把這些命令放在圓括弧中{}用于將順序執(zhí)行的命令的輸出結(jié)果用于另一個命令的輸入(管道方式)。5.5.3命令分組在shell中有兩種命令分組的方法:“(1285.5.4運(yùn)行shell程序的方法

執(zhí)行shell程序,有三種方法:(1)將shell程序作為sh命令的輸入,具體如下:

#shfirst.sh

5.5.4運(yùn)行shell程序的方法執(zhí)行shell程序,有三129運(yùn)行shell程序的方法(續(xù))(2)利用輸入重定向#bash<first.sh

(3)使用chmod命令使first.sh成為可執(zhí)行的,然后直接執(zhí)行。

#chmoda+xfirst.sh#first.sh

運(yùn)行shell程序的方法(續(xù))(2)利用輸入重定向1305.5.5bash程序的調(diào)試

shell程序的調(diào)試主要是利用bash命令解釋程序的選擇項(xiàng)。調(diào)用bash的形式是:

bash-選擇項(xiàng)shell程序文件名5.5.5bash程序的調(diào)試shell程序的調(diào)試主要是利131幾個常用的選擇項(xiàng)-e:如果一個命令失敗就立即退出-n:讀入命令但是不執(zhí)行它們-u:置換時(shí)把未設(shè)置的變量看作出錯-v:當(dāng)讀入shell輸入行時(shí)把它們顯示出來-x:執(zhí)行命令時(shí)把命令和它們的參數(shù)顯示出來

幾個常用的選擇項(xiàng)-e:如果一個命令失敗就立即退出132(1)未置變量退出和立即退出

未置變量退出:如果引用了一個未賦值的變量就終止shell程序的執(zhí)行。。未置變量退出選擇項(xiàng)為“-u”。要想在錯誤發(fā)生時(shí)使shell程序立即結(jié)束,可以使用“-e”選項(xiàng)。

(1)未置變量退出和立即退出未置變量退出:如果引用了一個未133(2)shell程序的跟蹤

調(diào)試shell程序的主要方法是利用shell命令解釋程序的“-v”或“-x”選項(xiàng)來跟蹤程序的執(zhí)行。“-v”選擇項(xiàng)使shell在執(zhí)行程序的過程中,把它讀入的每一個命令行都顯示出來,而“-x”選擇項(xiàng)使shell在執(zhí)行程序的過程中把它執(zhí)行的每一個命令在行首用一個“+”加上命令名顯示出來。并把每一個變量和該變量所取的值也顯示出來。

(2)shell程序的跟蹤調(diào)試shell程序的主要方法是134第5章Linux的shell編程

第5章Linux的shell編程1355.1什么是shell

當(dāng)一個用戶登錄Linux系統(tǒng)之后,系統(tǒng)初始化程序init就為每一個用戶運(yùn)行一個稱為shell(外殼)的程序。shell就是一個命令行解釋器。一般的Linux系統(tǒng)都將bash作為默認(rèn)的shell。

5.1什么是shell當(dāng)一個用戶登錄Linux系統(tǒng)之后,系1365.2幾種流行的shell目前流行的shell有ash、bash、ksh、csh、zsh等,bash是Linux系統(tǒng)默認(rèn)使用的shell??梢杂孟旅娴拿顏聿榭磗hell的類型:#echo$SHELLSHELL是一個環(huán)境變量,它記錄用戶所使用的shell類型。5.2幾種流行的shell目前流行的shell有ash、ba137幾種流行的shell(續(xù))可以用命令:#shell-name來轉(zhuǎn)換到別的shell$exit退出子shell。幾種流行的shell(續(xù))可以用命令:1385.3shell程序設(shè)計(jì)

使用shell編程類似于DOS中的批處理文件,稱為shellscript,又叫shell程序或shell命令文件或者shell腳本。Shell腳本程序是按行來解釋的,腳本程序總是以#!/bin/sh開始的,符號#!用來告訴系統(tǒng)它后面的參數(shù)是用來執(zhí)行該文件的程序。5.3shell程序設(shè)計(jì)使用shell編程類似于DOS中139如果要執(zhí)行該腳本,還必須使其可執(zhí)行。chmod+xfilename然后,您可以通過輸入:./filename來執(zhí)行您的腳本。如果要執(zhí)行該腳本,還必須使其可執(zhí)行。140$catfirstscript.sh#!/bin/shecho“Youarewelcometousebase.”echo“Currentworkdirectoryis$PWD.”echo“Youare$LOGNAME.”增加執(zhí)行權(quán)限$chmod+xfirstscript.sh開始運(yùn)行程序:$./firstscript.sh$catfirstscript.sh141執(zhí)行結(jié)果:

Youarewelcometousebase.Currentworkdirectoryis/rootYouareroot.

執(zhí)行結(jié)果:Youarewelcometouseb142shell只有字符型變量。shell變量無需初始化,一個沒有初始化的shell變量自動被初始化為一個空串。shell變量名大小寫敏感。5.4shell基礎(chǔ)編程5.4.1shell變量shell只有字符型變量。5.4shell基礎(chǔ)編程5.4.143BourneShell有如下四種變量:

本地變量(用戶自定義變量

位置變量即

shellscript之參數(shù)

預(yù)定義變量(特殊變量)環(huán)境變量(參考shell定制部分)shell變量(續(xù))BourneShell有如下四種變量:shell變量(續(xù)1445.4.1.1本地變量(用戶自定義變量)

本地變量在用戶現(xiàn)在的shell生命期的腳本中使用。

要設(shè)置一本地變量,格式為:

$variable-name=value或${variable-name=value}

因?yàn)榇蟛糠諰INUX命令使用小寫字符,因此在shell編程中變量通常全部大寫。

變量的引用:在變量前加$。5.4.1.1本地變量(用戶自定義變量)本地變量在用戶現(xiàn)在145(1)顯示變量

使用echo命令輸出單個變量的值,此時(shí)要在變量名前加$

$WEEK=Satur$echoTodayis$WEEKday輸出:Todayis使用花括號來告訴shell我們要顯示的變量:$echoTodayis${WEEK}day輸出:TodayisSaturday(1)顯示變量使用echo命令輸出單個變量的值,此時(shí)要在變146(2)清除變量:使用unset命令刪除變量的賦值$Z=hello$echo$Zhello$unsetZ$echo$Z

$(2)清除變量:使用unset命令刪除變量的賦值147(3)顯示所有本地shell變量:

使用set命令顯示所有本地定義的shell變量(3)顯示所有本地shell變量:使用set命令顯示所有本148(4)結(jié)合變量值

Echo${variable-name1}${variable-name2}$A=’Hello,’$B=’World’$echo${A}${B}Hello,World(4)結(jié)合變量值Echo${variable-name1149(5)設(shè)置變量的默認(rèn)值

BourneShell允許對變量設(shè)置默認(rèn)值,其格式如下:

${variable:-defaultvalue}

$color=blue$echo"Theskyis${color:-grey}today"輸出結(jié)果:Theskyisbluetoday

(5)設(shè)置變量的默認(rèn)值BourneShell允許對變量設(shè)150$color=blue$unsetcolor$echo"Theskyis${color:-grey}today"Theskyisgreytoday$echo${color}$$color=blue151改變變量的值,格式如下:${variable:=value}$color=blue$unsetcolor$echo"Theskyis${color:=grey}today"Theskyisgreytoday$echo${color}$grey改變變量的值,格式如下:152(6)使用變量來保存系統(tǒng)命令參數(shù)

可以用變量保存系統(tǒng)命令參數(shù)的替換信息。$source=’/etc/passwd’$cd$source

(6)使用變量來保存系統(tǒng)命令參數(shù)可以用變量保存系統(tǒng)命令參數(shù)153(7)設(shè)置只讀變量

格式:variable-name=valuereadonlyvariable-name

查看所有只讀變量,使用命令readonly(7)設(shè)置只讀變量格式:1545.4.1.2環(huán)境變量

環(huán)境變量用于所有用戶進(jìn)程(經(jīng)常稱為子進(jìn)程)。登錄進(jìn)程稱為父進(jìn)程。shell中執(zhí)行的用戶進(jìn)程均稱為子進(jìn)程。環(huán)境變量應(yīng)用于用戶進(jìn)程前,必須用export命令導(dǎo)出。5.4.1.2環(huán)境變量環(huán)境變量用于所有用戶進(jìn)程(經(jīng)常稱為155(1)設(shè)置環(huán)境變量

VARIABLE-NAME=value;exportVARIABLE-NAME也可:VARIABLE-NAME=valueexportVARIABLE-NAME(1)設(shè)置環(huán)境變量VARIABLE-NAME=value156環(huán)境變量(續(xù))(2)顯示環(huán)境變量顯示環(huán)境變量與顯示本地變量一樣。使用env命令可以查看所有的環(huán)境變量。(3)清除環(huán)境變量使用unset命令清除環(huán)境變量環(huán)境變量(續(xù))(2)顯示環(huán)境變量157(4)set命令

不帶參數(shù)的set命令輸出目前所有的shell變量(含用戶自定義的變量)和它們的當(dāng)前值。(4)set命令不帶參數(shù)的set命令輸出目前所有的shel158(5)將變量導(dǎo)出到子進(jìn)程

$catfather#!/bin/sh#fatherscriptecho"thisisthefather"FILM="AFewGoodMen"echo"Ilikethefilm:$FILM"./child#callthechildscriptecho"backtofather"echo"andthefilmis:$FILM"

(5)將變量導(dǎo)出到子進(jìn)程$catfather159將變量導(dǎo)出到子進(jìn)程(續(xù))$catchild#!/bin/sh#childscriptecho"calledfromfather..iamthechild"echo"filmis:$FILM"FILM="DieHard"echo"changingfilmto:$FILM"

將變量導(dǎo)出到子進(jìn)程(續(xù))$catchild160顯示結(jié)果thisisthefatherIlikethefilm:AFewGoodMencalledfromfather..iamthechildfilmis:changingfilmto:DieHardbacktofatherandthefilmis:AFewGoodMen

顯示結(jié)果thisisthefather161$catfather2#!/bin/sh#father2scriptecho"thisisthefather"FILM="AFewGoodMen"echo"Ilikethefilm:$FILM"#callthechildscript#butexportvariblefirstexportFILM#在調(diào)用腳本前導(dǎo)出變量./childecho"backtofather"echo"andthefilmis:$FILM"$catfather2162輸出結(jié)果$./father2thisisthefatherIlikethefilm:AFewGoodMencalledfromfather..iamthechildfilmis:AFewGoodMenchangingfilmto:DieHardbacktofatherandthefilmis:AFewGoodMen

輸出結(jié)果$./father2thisisthefat1635.4.1.3

位置變量參數(shù)

如果要向一個shell腳本傳遞信息,可以使用位置參數(shù)完成此功能。參數(shù)相關(guān)數(shù)目傳入腳本,此數(shù)目可以任意多,但只有前9個可以被訪問,使用shift命令可以改變這個限制。參數(shù)從第1個開始,在第9個結(jié)束;每個訪問參數(shù)前要加$符號。第一個參數(shù)為0,表示預(yù)留保存實(shí)際腳本名字。5.4.1.3位置變量參數(shù)如果要向一個shell腳本傳164位置變量參數(shù)(續(xù))如向腳本傳送DidYouSeeTheFullMoon信息:$0

$1

$2

$3

$4

$5

$6

腳本名字

Did

You

See

The

Full

Moon

$7

$8

$9位置變量參數(shù)(續(xù))如向腳本傳送DidYouSeeThe165(1)在腳本中使用位置參數(shù)

$catparam#!/bin/sh#paramecho"Thisisthescriptname

:$0"echo"Thisisthefirstparameter:$1"echo"Thisisthe2ndparameter

:$2"echo"Thisisthethirdparameter:$3"

echo"Thisisthe6thparameter

:$6"echo"Thisisthe7thparameter

:$7"

(1)在腳本中使用位置參數(shù)$catparam166輸出結(jié)果執(zhí)行:$./paramDidYouSeeTheFullMoon

Thisisthescriptname

:./paramThisisthefirstparameter:DidThisisthe2ndparameter

:YouThisisthethirdparameter:SeeThisisthe6thparameter

:MoonThisisthe7thparameter

:輸出結(jié)果執(zhí)行:$./paramDidYouSeeT167(2)向系統(tǒng)命令傳遞參數(shù)

$catfindfile#!/bin/sh#findfilefind/-name$1–print

(2)向系統(tǒng)命令傳遞參數(shù)$catfindfile1685.4.1.4預(yù)定義變量

預(yù)定義變量是在shell一開始時(shí)就定義了的變量,用戶不能重定義它。所有預(yù)定義變量都是由$符和另一個符號組成的。常用的預(yù)定義變量:$#傳遞到腳本的參數(shù)個數(shù)$*以一個單字符串顯示所有向腳本傳遞的參數(shù)。與位置變量不同,此選項(xiàng)參數(shù)可超過9個$$腳本運(yùn)行的當(dāng)前進(jìn)程ID號

5.4.1.4預(yù)定義變量預(yù)定義變量是在shell一開始169預(yù)定義變量(續(xù))$!后臺運(yùn)行的最后一個進(jìn)程的進(jìn)程ID號$@與$#相同,但是使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論