




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械買賣合同協(xié)議書
- 商品房產(chǎn)購(gòu)銷合同
- 2025年春人教版(2024)小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)教學(xué)計(jì)劃
- 2021電力工程繼電保護(hù)及接線施工作業(yè)指導(dǎo)書
- 醫(yī)院醫(yī)療器械買賣合同
- 2025年南昌年貨運(yùn)從業(yè)資格證考試試題題庫(kù)
- 承包攪拌站運(yùn)輸合同
- 2025年鷹潭貨運(yùn)資格證培訓(xùn)考試題
- 戶外廣告發(fā)布合同
- 2025年遵義貨運(yùn)從業(yè)資格考試題
- 工程造價(jià)預(yù)算書
- 終止授權(quán)代理協(xié)議書模板
- 修建水壩施工合同模板
- 劍橋商務(wù)英語(yǔ)中級(jí)unit12
- 北師大版三年級(jí)下冊(cè)除法豎式計(jì)算題練習(xí)100道及答案
- 十堰2024年湖北十堰市茅箭區(qū)教育局所屬學(xué)校招聘教師134人筆試歷年典型考題及考點(diǎn)附答案解析
- 小白兔拔蘿卜(無(wú)背景音樂)
- 人音版六年級(jí)下冊(cè)音樂教案及反思
- 四年級(jí)上冊(cè)豎式計(jì)算100題及答案
- 結(jié)構(gòu)化在崗帶教手冊(cè)模板2.0
- 2024屆遼寧省沈陽(yáng)市名校中考四?;瘜W(xué)試題含答案解析
評(píng)論
0/150
提交評(píng)論