Shell腳本編程基礎(chǔ)知識(shí)課件_第1頁(yè)
Shell腳本編程基礎(chǔ)知識(shí)課件_第2頁(yè)
Shell腳本編程基礎(chǔ)知識(shí)課件_第3頁(yè)
Shell腳本編程基礎(chǔ)知識(shí)課件_第4頁(yè)
Shell腳本編程基礎(chǔ)知識(shí)課件_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Linux操作系統(tǒng)Shell

腳本編程主要內(nèi)容和學(xué)習(xí)要求q

掌握創(chuàng)建

shell腳本的基本步驟q

學(xué)會(huì)使用條件測(cè)試q

掌握

if條件結(jié)構(gòu)與

case選擇結(jié)構(gòu)q

掌握

for循環(huán)、while循環(huán)和

until循環(huán)結(jié)構(gòu)q

學(xué)會(huì)

shift命令的使用q

學(xué)會(huì)

shell腳本的調(diào)試Shell腳本q

Shell腳本如果有一系列你經(jīng)常使用的Linux命令,你可以把它們存儲(chǔ)在一個(gè)文件里,shell可以讀取這n個(gè)文件并順序執(zhí)行其中的命令,這樣的文件被稱為腳本文件。shell腳本按行解釋。q

Shell腳本的編寫l

Shell腳本是純文本文件,可以使用任何文本編輯器編寫l

Shell腳本通常是以

.sh作為后綴名q

Shell腳本的執(zhí)行chmod

+x

script_name./script_namebash

script_nameShell腳本q

Shell腳本的格式u

第一行:指定用哪個(gè)程序來(lái)編譯和執(zhí)行腳本。#!/bin/bash#!/bin/sh#!/bin/cshu

可執(zhí)行語(yǔ)句和

shell控制結(jié)構(gòu)一個(gè)

shell腳本通常由一組

Linux命令、shell命令、控制結(jié)構(gòu)和注釋語(yǔ)句構(gòu)成。u

注釋:以

“#”開頭,可獨(dú)占一行,或跟在語(yǔ)句的后面。在腳本中多寫注釋語(yǔ)句是一個(gè)很好的編程習(xí)慣Shell腳本舉例#!/bin/bash#

This

is

the

first

Bash

shell

program#

ScriptName:

greetings.shechoecho

–e

"Hello

$LOGNAME,

\c"echoecho"it's

nice

talking

to

you.""Your

present

working

directory

is:"pwd

#

Show

the

name

of

present

directoryechoecho

–e

"The

time

is

`date

+%T`!.

\nBye"echobash

greetings.shchmod

+x

greetings.sh./greetingsecho命令nn功能說(shuō)明:顯示文字。語(yǔ)

法:echo[-ne][字符串]或

echo[--help][--version]n補(bǔ)充說(shuō)明:echo會(huì)將輸入的字符串送往標(biāo)準(zhǔn)輸出。輸出的字符串間以空白字符隔開,并在最后加上換行號(hào)。n-n不進(jìn)行換行n-e

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

\n換行\(zhòng)b空格...參

數(shù):n-n不要在最后自動(dòng)換行-e若字符串中出現(xiàn)以下字符,則特別加以處理,而不n會(huì)將它當(dāng)成一般文字輸出:\a發(fā)出警告聲;n\b刪除前一個(gè)字符;n\c最后不加上換行符號(hào);n\f換行但光標(biāo)仍舊停留在原來(lái)的位置;n\n換行且光標(biāo)移至行首;n\r光標(biāo)移至行首,但不換行;n\t插入tab;n\v與\f相同;n\\插入\字符;n\nnn插入nnn(八進(jìn)制)所代表的ASCII字符;n--help顯示幫助n--version顯示版本信息nShell腳本舉例#!/bin/bash#

This

script

is

to

test

the

usage

of

read#

Scriptname:

ex4read.shecho

"===

examples

for

testing

read

==="echo

-e

"What

is

your

name?

\c"read

nameecho

"Hello

$name"echoecho

-n

"Where

do

you

work?

"readecho

"I

guess

$REPLY

keeps

you

busy!"echoread

-p

"Enter

your

job

title:

"#自動(dòng)讀給REPLYecho

"I

thought

you

might

be

an

$REPLY."echoecho

"===

End

of

the

script

==="read命令nreadvariable

#讀取變量給variablenreadxy

#可同時(shí)讀取多個(gè)變量nread#自動(dòng)讀給REPLYnread–p“Pleaseinput:”#自動(dòng)讀給REPLY條件測(cè)試u

條件測(cè)試可以根據(jù)某個(gè)特定條件是否滿足,來(lái)選擇執(zhí)行相應(yīng)的任務(wù)。u

Bash中允許測(cè)試兩種類型的條件:命令成功或失敗,表達(dá)式為真或假u

任何一種測(cè)試中,都要有退出狀態(tài)(返回值),退出狀態(tài)為

0表示命令成功或表達(dá)式為真,非0則表示命令失敗或表達(dá)式為假。u

狀態(tài)變量

$?中保存命令退出狀態(tài)的值grep

$USER

/etc/passwdecho

$?grep

hello

/etc/passwd;

echo

$?測(cè)試表達(dá)式的值q

表達(dá)式測(cè)試包括字符串測(cè)試、整數(shù)測(cè)試和文件測(cè)試。q

內(nèi)置測(cè)試命令

testl

通常用

test命令來(lái)測(cè)試表達(dá)式的值x=5;

y=10test

$x

-gt

$yecho

$?l

test命令可以用

方括號(hào)

來(lái)代替x=5;

y=10[

$x

-gt

$y

]echo

$?方括號(hào)前后要留空格!測(cè)試表達(dá)式的值l

2.x版本以上的

Bash中可以用雙方括號(hào)來(lái)測(cè)試表達(dá)式的值,此時(shí)可以使用通配符進(jìn)行模式匹配。name=Tom[

$name

=

[Tt]??

]echo

$?[[

$name

=

[Tt]??

]]echo

$?字符串測(cè)試操作符兩邊必須留空格!q

字符串測(cè)試name=Tom;

[

-z

$name

];

echo

$?name2=Andy;

[

$name

=

$name2

]

;

echo

$?整數(shù)測(cè)試q

整數(shù)測(cè)試,即比較大小操作符兩邊必須留空格!x=1;

[

$x

-eq

1

];

echo

$?Xx=a;

[

$x

-eq

1

];

echo

$?整數(shù)測(cè)試q

整數(shù)測(cè)試也可以使用

let命令或雙圓括號(hào)只能用于整數(shù)測(cè)試!==

、!=

、>

、>=

、<

、<=l

相應(yīng)的操作符為:l例:x=1;

let

"$x

==

1";

echo

$?x=1;

(($x+1>=

2

));

echo

$?q

兩種測(cè)試方法的區(qū)別l

使用的操作符不同l

let和

雙圓括號(hào)中可以使用算術(shù)表達(dá)式,而中括號(hào)不能l

let和

雙圓括號(hào)中,操作符兩邊可以不留空格邏輯測(cè)試q

邏輯測(cè)試x=1;

name=Tom;[

$x

-eq

1

–a

–n

$name

];

echo

$?注:不能隨便添加括號(hào)X[($x

-eq

1)

–a

(–n

$name)];

echo

$?邏輯測(cè)試q

可以使用模式的邏輯測(cè)試x=1;

name=Tom;[[

$x

-eq

1

&&

$name

=

To?

]];

echo

$?文件測(cè)試q

文件測(cè)試:文件是否存在,文件屬性,訪問(wèn)權(quán)限等。常見的文件測(cè)試操作符l

更多文件測(cè)試符參見

test的在線幫助

man

test檢查空值q

檢查空值[

"$name"

=

""

][

!

"$name"

][

"X${name}"

!=

"X"

]if條件語(yǔ)句q

語(yǔ)法結(jié)構(gòu)if

expr1then#

如果expr1

為真(返回值為0)#

那么commands1

#

執(zhí)行語(yǔ)句塊

commands1elif

expr2then#

若expr1

不真,而expr2

為真#

那么commands2

#

執(zhí)行語(yǔ)句塊

commands2...

...else#

可以有多個(gè)

elif

語(yǔ)句#

else

最多只能有一個(gè)commands4

#

執(zhí)行語(yǔ)句塊

commands4#

if

語(yǔ)句必須以單詞

fi

終止fi幾點(diǎn)說(shuō)明u

elif可以有任意多個(gè)(0個(gè)或多個(gè))u

else最多只能有一個(gè)(0個(gè)或

1個(gè))u

if語(yǔ)句必須以

fi表示結(jié)束u

expr通常為條件測(cè)試表達(dá)式;也可以是多個(gè)命令,以最后一個(gè)命令的退出狀態(tài)為條件值。u

commands為可執(zhí)行語(yǔ)句塊,如果為空,需使用

shell提供的空命令

“:”,即冒號(hào)。該命令不做任何事情,只返回一個(gè)退出狀態(tài)

0u

if語(yǔ)句可以嵌套使用ex4if.sh,chkperm.sh,chkperm2.sh,name_grep,tellme,tellme2,idcheck.shex4if.sh#!/bin/bash#scriptname:ex4if.sh#echo-n"Pleaseinputx,y:"readxyecho"x=$x,y=$y"if((x>y));thenecho"xislargerthany"elif((x==y));thenecho"xisequaltoy"elseecho"xislessthany"fichkperm.sh#!/bin/bash#Usingtheoldstyletestcommand:[]#filename:perm_check.sh#file=testingif[-d$file]thenecho"$fileisadirectory"elif[-f$file]thenif[-r$file-a-w$file-a-x$file]then

#nestedifcommandecho"Youhaveread,write,andexecutepermissionon$file."fielseecho"$fileisneitherafilenoradirectory."fichkperm2.sh#!/bin/bash#Usingthenewstyletestcommand:[[]]#filename:perm_check2.sh#file=./testingif[[-d$file]]thenecho"$fileisadirectory"elif[[-f$file]]thenif[[-r$file&&-w$file&&-x$file]]then

#nestedifcommandecho"Youhaveread,write,andexecutepermissionon$file."fielseecho"$fileisneitherafilenoradirectory."finame_grep#!/bin/bash#filename:name_grep#name=Tomifgrep"$name"/etc/passwd>&/dev/nullthen:elseecho"$namenotfoundin/etc/passwd"exit2fitellme#!/bin/bashecho-n"Howoldareyou?"readageif[$age-lt0-o$age-gt120]thenecho

"Welcometoourplanet!"exit1fiif

[$age-ge0-a$age-le12]thenecho"Childrenistheflowersofthecountry"elif[$age-gt12-a$age-le19]thenecho"Rebelwithoutacause"elif[$age-gt19-a

$age-le29]thenecho"Yougottheworldbythetail!!"elif[$age-ge

30-a

$age-le39]thenecho"Thirtysomething..."elseecho"SorryIasked"fitellme2#!/bin/bashecho-n"Howoldareyou?"readageif((age<0||age>120))thenecho"Welcometoourplanet!"exit1fiif((age>=0&&age<=12))thenecho"Childrenistheflowersofthecountry"elif((age>=13&&age<=19))thenecho"Rebelwithoutacause"elif((age>=19&&

age<=

29))thenecho"Yougottheworldbythetail!!"elif

((age>=

30&&

age<=39))thenecho"Thirtysomething..."elseecho"SorryIasked"fiidcheck.sh#!/bin/bash#Scriptname:idcheck.sh#purpose:checkuseridtoseeifuserisroot.#Onlyroothasauidof0.#Formatforidoutput:uid=501(tt)gid=501(tt)groups=501(tt)#root’suid=0

uid=0(root)gid=0(root)groups=0(root)…#id=`id|awk-F'[=(]'

'{print$2}'`

#getuseridecho"youruseridis:$id"if

((id==0))

#[$id-eq0]thenecho"youaresuperuser."elseecho"youarenotsuperuser."ficase選擇語(yǔ)句q

語(yǔ)法結(jié)構(gòu)case

expr

in

#

expr為表達(dá)式,關(guān)鍵詞in不要忘!pattern1)

#

expr與

pattern1匹配,注意括號(hào)commands1

#

執(zhí)行語(yǔ)句塊commands1;;#

跳出case結(jié)構(gòu)pattern2)

#

expr與

pattern2匹配commands2

#

執(zhí)行語(yǔ)句塊commands2;;#

跳出case結(jié)構(gòu)...

...*)#

可以有任意多個(gè)模式匹配#

expr與上面的模式都不匹配commands

#

執(zhí)行語(yǔ)句塊commands;;esac#

跳出case結(jié)構(gòu)#

case語(yǔ)句必須以esac終止幾點(diǎn)說(shuō)明u

表達(dá)式

expr按順序匹配每個(gè)模式,一旦有一個(gè)模式匹配成功,則執(zhí)行該模式后面的所有命令,然后退出

case。u

如果

expr沒有找到匹配的模式,則執(zhí)行缺省值

“*)”后面的命令塊

(類似于

if

中的

else);

“*)”可以不出現(xiàn)。u

所給的匹配模式

pattern中可以含有通配符和“|”。u

每個(gè)命令塊的最后必須有一個(gè)雙分號(hào),可以獨(dú)占一行,或放在最后一個(gè)命令的后面。u

case語(yǔ)句舉例:yes_no.shyes_no.sh#!/bin/bash#testcase#scriptname:yes_no.sh#echo-n"Doyouwishtoproceed[y/n]:"readanscase$ansiny|Y|yes|Yes)echo"yesisselected";;n|N|no|No)echo"noisselected";;*)echo"`basename$0`:Unknownresponse"exit1;;esacfor循環(huán)語(yǔ)句q

語(yǔ)法結(jié)構(gòu)for

variable

in

list#

每一次循環(huán),依次把列表list中的一個(gè)值賦給循環(huán)變量do#

循環(huán)開始的標(biāo)志commands

#

循環(huán)變量每取一次值,循環(huán)體就執(zhí)行一遍done#

循環(huán)結(jié)束的標(biāo)志q

幾點(diǎn)說(shuō)明l

列表

list可以是命令替換、變量名替換、字符串和文件名列表

(可包含通配符

)l

for循環(huán)執(zhí)行的次數(shù)取決于列表

list中單詞的個(gè)數(shù)l

for循環(huán)體中一般要出現(xiàn)循環(huán)變量,但也可以不出現(xiàn)for循環(huán)執(zhí)行過(guò)程q

循環(huán)執(zhí)行過(guò)程執(zhí)行第一輪循環(huán)時(shí),將

list

中的第一個(gè)詞賦給循環(huán)變量,并把該詞從

list

中刪除,然后進(jìn)入循環(huán)體,執(zhí)行

do

和done

之間的命令。下一次進(jìn)入循環(huán)體時(shí),則將第二個(gè)詞賦給循環(huán)變量,并把該詞從

list

中刪除,再往后的循環(huán)也以此類推。當(dāng)

list中的詞全部被移走后,循環(huán)就結(jié)束了。forloop.sh,mybackup.shq

位置參量的使用:

$*

$@

greet.shq

可以省略

in

list,此時(shí)使用位置參量permx.sh

idcheck.sh

greet.sh

yes_no.shpermx.sh

*.shforloop.sh#!/bin/bash#Scriptname:forloop.shfornameinTomDickHarryJoedoecho"Hi$name"doneecho"outofloop"forloop2.shnnnnn#!/bin/bash#Scriptname:forloop2.shfornamein`catnamelist`doecho"Hi$name"ndonenecho"outofloop"mybackup.sh#!/bin/bash#Scriptname:mybackup.sh#Purpose:Createbackupfilesandstore#theminabackupdirectory.#backup_dir=backupmkdir$backup_dirforfilein*.shdoif[-f$file]thencp$file$backup_dir/${file}.bakecho"$fileisbackedupin$backup_dir"fidonegreet.sh#!/bin/bash#Scriptname:greet.sh#usage:greet.shTomJohnAnndyecho"==using\$*=="fornamein$*

#sameasfornamein$@doechoHi$namedoneecho"==using\$@=="fornamein$@

#sameasfornamein$*doechoHi$namedoneecho'==using"$*"=='fornamein"$*"doechoHi$namedoneecho'==using"$@"=='fornamein"$@"doechoHi$namedonepermx.sh#!/bin/bash#Scriptname:permx.sh#forfile

#Emptywordlistdoif[[-f$file&&!-x$file]]thenchmod+x$fileecho"==$filenowhasexecutepermission"fidonewhile循環(huán)語(yǔ)句q

語(yǔ)法結(jié)構(gòu)while

expr

#

執(zhí)行exprdo

#

expr的退出狀態(tài)為0,進(jìn)入循環(huán),否則退出whilecommands

#

循環(huán)體done#

循環(huán)結(jié)束標(biāo)志,返回循環(huán)頂部q

執(zhí)行過(guò)程先執(zhí)行

expr,如果其退出狀態(tài)為

0,就執(zhí)行循環(huán)體。執(zhí)行到關(guān)鍵字

done

后,回到循環(huán)的頂部,

while

命令再次檢查expr

的退出狀態(tài)。以此類推,循環(huán)將一直繼續(xù)下去,直到expr的退出狀態(tài)非

0為止。until循環(huán)語(yǔ)句q

語(yǔ)法結(jié)構(gòu)until

expr

#

執(zhí)行

exprdo

#

若expr的退出狀態(tài)非0,進(jìn)入循環(huán),否則退出untilcommands

#

循環(huán)體done#

循環(huán)結(jié)束標(biāo)志,返回循環(huán)頂部q

執(zhí)行過(guò)程與

while循環(huán)類似,只是當(dāng)

expr退出狀態(tài)非

0時(shí)才執(zhí)行循環(huán)體,直到

expr為

0時(shí)退出循環(huán)。break和

continuebreak

[n]l

用于強(qiáng)行退出當(dāng)前循環(huán)。l

如果是嵌套循環(huán),則

break命令后面可以跟一數(shù)字

n,表示退出第

n重循環(huán)(最里面的為第一重循環(huán))。continue

[n]l

用于忽略本次循環(huán)的剩余部分,回到循環(huán)的頂部,繼續(xù)下一次循環(huán)。l

如果是嵌套循環(huán),continue命令后面也可跟一數(shù)字

n,表示回到第

n重循環(huán)的頂部。例:months.shmonths.sh#!/bin/bash#Scriptname:months.shformonthinJanFebMarAprMayJunJulAugSepOctNovDecdoforweekin

1234doecho-n"Processingthemonthof$month.OK?"readansif["$ans"=n

-o-z"$ans"]thencontinue2elseecho-n"Processweek$weekof$month?"readansif["$ans"=n-o-z"$ans"

]thencontinueelseecho"Nowprocessingweek$weekof$month."sleep1

#Commandsgohereecho

"Doneprocessing..."fifidonedoneexit和

sleepq

exit命令exit

nexit命令用于退出腳本或當(dāng)前進(jìn)程。n是一個(gè)從

0到255的整數(shù),0表示成功退出,非零表示遇到某種失敗而非正常退出。該整數(shù)被保存在狀態(tài)變量

$?中。q

sleep命令sleep

n暫停

n秒鐘select

循環(huán)與菜單q

語(yǔ)法結(jié)構(gòu)select

variable

in

listdo#

循環(huán)開始的標(biāo)志commands

#

循環(huán)變量每取一次值,循環(huán)體就執(zhí)行一遍done#

循環(huán)結(jié)束的標(biāo)志q

說(shuō)明l

select循環(huán)主要用于創(chuàng)建菜單,按數(shù)字順序排列的菜單項(xiàng)將顯示在標(biāo)準(zhǔn)錯(cuò)誤上,并顯示

PS3提示符,等待用戶輸入l

用戶輸入菜單列表中的某個(gè)數(shù)字,執(zhí)行相應(yīng)的命令l

用戶輸入被保存在內(nèi)置變量

REPLY中。例:runit.shrunit.sh#!/bin/bash#Scriptname:runit.shPS3="Selectaprogramtoexecute:"selectprogram

in'ls-F'pwddatedo$programdoneselect

caseq

select是個(gè)無(wú)限循環(huán),因此要記住用

break命令退出循環(huán),或用

exit命令終止腳本。也可以按ctrl+c退出循環(huán)。q

select經(jīng)常和

case聯(lián)合使用例:goodboy.shq

for循環(huán)類似,可以省略

in

list,此時(shí)使用位置參量goodboy.sh#!/bin/bash#Scriptname:goodboys.shPS3="Pleasechooseoneofthethreeboys:"selectchoiceintomdanguy#selectchoicedocase$choiceintom)echoTomisacooldude!break;;

#breakoutoftheselectloopdan|guy)echoDanandGuyarebothwonderful.break;;*)echo"$REPLYisnotoneofyourchoices"echo"Tryagain.";;esacdone循環(huán)控制shift命令shift

[n]l

用于將參量列表

list左移指定次數(shù),缺省為左移一次。l

參量列表

list一旦被移動(dòng),最左端的那個(gè)參數(shù)就從列表中刪除。while循環(huán)遍歷位置參量列表時(shí),常用到

shift。例:./doit.sh

a

b

c

d

e

f

g

h./shft.sh

a

b

c

d

e

f

g

hdoit.sh#!/bin/bash#Name:doit.sh#Purpose:shiftthroughcommandlinearguments#Usage:doit.sh[args]while(($#>0))

#or[$#-gt0]doecho

$*shiftdoneshft.sh#!/bin/bash#Using'shift'tostepthroughallthepositionalparameters.until[-z"$1"]

#Untilallparametersusedup...doecho"$1"shiftdoneecho#Extralinefeed.exit0隨機(jī)數(shù)和expr命令q

生成隨機(jī)數(shù)的特殊變量echo

$RANDOM范圍是:[0,32767]q

expr:通用的表達(dá)式計(jì)算命令表達(dá)式中參數(shù)與操作符必須以空格分開,表達(dá)式中的運(yùn)算可以是算術(shù)運(yùn)算,比較運(yùn)算,字符串運(yùn)算和邏輯運(yùn)算。expr

5

%

3expr

5

\*

3

#

乘法符號(hào)必須被轉(zhuǎn)義字符串操作m

的取值從

0

${#var}-1q

字符串操作注:pattern,old

中可以使用通配符。

例:ex4strex4str#!/bin/bashdirname="/usr/bin/local/bin";echo"dirname=$dirname"echo-n'${#dirname}=';sleep4;echo"${#dirname}"echoecho-n'${dirname:4}=';

sleep4;echo"${dirname:4}"echoecho-n'${dirname:8:6}=';sleep4;echo${dirname:8:6}echoecho-n'${dirname#*bin}=';sleep4;echo${dirname#*bin}echoecho-n'${dirname##*bin}=';sleep4;echo${dirname##*bin}echoecho-n'${dirname%bin}=';sleep4;echo${dirname%bin}echoecho-n'${dirname%%bin}=';sleep4;echo${dirname%%bin}echoecho-n'${dirname%bin*}=';sleep4;echo${dirname%bin*}echoecho-n'${dirname%%bin*}=';echo${dirname%%bin*}echoecho-n'${dirname/bin/sbin}=';echo${dirname/bin/sbin}echoecho-n'${dirname//bin/lib}=';echo${dirname//bin/lib}echoecho-n'${dirname/bin*/lib}=';echo${dirname/bin*/lib}腳本調(diào)試sh

–x

腳本名該選項(xiàng)可以使用戶跟蹤腳本的執(zhí)行,此時(shí)

shell對(duì)腳本中每條命令的處理過(guò)程為:先執(zhí)行替換,然后顯示,再執(zhí)行它。shell顯示腳本中的行時(shí),會(huì)在行首添加一個(gè)加號(hào)

“+”。sh

–v

腳本名在執(zhí)行腳本之前,按輸入的原樣打印腳本中的各行,打印一行執(zhí)行一行。sh

–n

腳本名對(duì)腳本進(jìn)行語(yǔ)法檢查,但不執(zhí)行腳本。如果存在語(yǔ)法錯(cuò)誤,shell會(huì)報(bào)錯(cuò),如果沒有錯(cuò)誤,則不顯示任何內(nèi)容。編程小結(jié):變量q

局部變量、環(huán)境變量(export、declare

-x)q

只讀變量、整型變量例:declare

-i

x;

x="hello";

echo

$x0q

位置參量($0,$1,...,$*,$@,$#,$$,$?)q

變量的間接引用(eval,${!str})例:name="hello";

x="name";

echo

${!x}q

命令替換(`cmd`、$(cmd))helloq

整數(shù)運(yùn)算declare定義的整型變量可以直接進(jìn)行運(yùn)算,否則需用

let命令或

$[...]、$((...))進(jìn)行整數(shù)運(yùn)算。編程小結(jié):輸入輸出q

輸入:readread

var1

var2

...read

REPLY

REPLYread

–p

"提示"輸出參數(shù)用空格隔開q

輸出:printfprintf

"%-12.5f

\t

%d

\n"

123.45

8format格式符\b\n\r\t\v\\\”%%以%開頭cdefgsoxflag

field

widthprecision-:左對(duì)齊字段寬度+:輸出符號(hào)0:空白處添0小數(shù)點(diǎn)后輸出位數(shù)空格:前面加一空格編程小結(jié):條件測(cè)試操作符兩邊必須留空格!q

字符串測(cè)試如果使用雙方括號(hào),可以使用

通配符

進(jìn)行模式匹配。例:name=Tom;

[[

$name

>

Tom

]];

echo

$?編程小結(jié):條件測(cè)試注意這兩種方法的區(qū)別!q

整數(shù)測(cè)試編程小結(jié):條件測(cè)試q

邏輯測(cè)試如果使用雙方括號(hào),可以使用

通配符

進(jìn)行模式匹配。編程小結(jié):條件測(cè)試q

文件測(cè)試編程小結(jié):控制結(jié)構(gòu)q

if條件語(yǔ)句q

case選擇語(yǔ)句q

for循環(huán)語(yǔ)句q

while循環(huán)語(yǔ)句q

until循環(huán)語(yǔ)句q

break、continue、sleep命令q

select循環(huán)與菜單q

shift命令q

各種括號(hào)的作用l

${...},$(...),$[...],$((...))l

[...],[[...]],((...))函數(shù)q

和其它編程語(yǔ)言一樣,

Bash也可以定義函數(shù)。q

一個(gè)函數(shù)就是一個(gè)子程序,用于完成特定的任務(wù),當(dāng)有重復(fù)代碼,或者一個(gè)任務(wù)只需要很少的修改就被重復(fù)幾次執(zhí)行時(shí),這時(shí)你應(yīng)考慮使用函數(shù)。q

函數(shù)的一般格式function

function_name

{commands}function_name

()

{commands}函數(shù)舉例#!/bin/bashfun1

()

{echo

"This

is

a

function"echo

"Now

exiting

fun1."}fun2

(){echo

"This

is

fun2."echo

"Now

exiting

fun2."}函數(shù)的調(diào)用q

只需輸入函數(shù)名即可調(diào)用該函數(shù)。q

函數(shù)必須在調(diào)用之前定義#!/bin/bashfun2

(){echo

"This

is

fun2."echo

"Now

exiting

fun2."}fun2

#

調(diào)用函數(shù)

fun2例:ex4fun2.sh,

ex4fun3.shex4fun2.sh#!/bin/bashJUST_A_SECOND=1fun(){#Asomewhatmorecomplexfunctioni=0REPEATS=5echoecho"Andnowthefunreallybegins."echosleep$JUST_A_SECOND#Hey,waitasecond!while[$i-lt$REPEATS]doecho"----------FUNCTIONS---------->"echo"<------------ARE-------------"echo"<------------FUN------------>"echolet"i+=1"done}#Now,callthefunctions.funexit0ex4fun3.sh#f1#Willgiveanerrormessage,sincefunction"f1"notyetdefined.#declare-ff1

#Thisdoesn'thelpeither.#f1#Stillanerrormessage.#However...f1(){echo"Callingfunction\"f2\"fromwithinfunction\"f1\"."f2}f2()

溫馨提示

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

評(píng)論

0/150

提交評(píng)論