




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Shell腳本編程基礎(chǔ)知識(shí)主要內(nèi)容和學(xué)習(xí)要求掌握創(chuàng)立shell腳本的根本步驟學(xué)會(huì)使用條件測(cè)試掌握if條件構(gòu)造與case選擇構(gòu)造掌握f(shuō)or循環(huán)、while循環(huán)和until循環(huán)構(gòu)造學(xué)會(huì)shift命令的使用學(xué)會(huì)shell腳本的調(diào)試
Shell
腳本Shell腳本如果有一系列你經(jīng)常使用的Linux命令,你可以把它們存儲(chǔ)在一個(gè)文件里,shell可以讀取這個(gè)文件并順序執(zhí)行其中的命令,這樣的文件被稱為腳本文件。shell
腳本按行解釋。
Shell腳本的編寫
Shell
腳本是純文本文件,可以使用任何文本編輯器編寫
Shell
腳本通常是以.sh作為后綴名
Shell腳本的執(zhí)行chmod
+x
script_name./script_namebash
script_name
第一行:指定用哪個(gè)程序來(lái)編譯和執(zhí)行腳本。
Shell腳本的格式#!/bin/bash可執(zhí)行語(yǔ)句和shell控制構(gòu)造注釋:以“#〞開(kāi)頭,可獨(dú)占一行,或跟在語(yǔ)句的后面。Shell腳本#!/bin/sh#!/bin/csh一個(gè)shell腳本通常由一組Linux命令、shell命令、控制構(gòu)造和注釋語(yǔ)句構(gòu)成。在腳本中多寫注釋語(yǔ)句是一個(gè)很好的編程習(xí)慣#!/bin/bash#ThisisthefirstBashshellprogram#ScriptName:echoecho
–e"Hello$LOGNAME,\c"echo"it'snicetalkingtoyou."echo"Yourpresentworkingdirectoryis:"pwd#Showthenameofpresentdirectoryechoecho
–e"Thetimeis`date+%T`!.\nBye"echobash
chmod+x
./greetingsShell腳本舉例echo命令功能說(shuō)明:顯示文字。語(yǔ)法:echo[-ne][字符串]或echo[--help][--version]補(bǔ)充說(shuō)明:echo會(huì)將輸入的字符串送往標(biāo)準(zhǔn)輸出。輸出的字符串間以空白字符隔開(kāi),并在最后加上換行號(hào)。-n不進(jìn)展換行-e假設(shè)字符串中出現(xiàn)以下字符,那么特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出\n換行\(zhòng)b空格...參數(shù):-n不要在最后自動(dòng)換行-e假設(shè)字符串中出現(xiàn)以下字符,那么特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出:\a發(fā)出警告聲;\b刪除前一個(gè)字符;\c最后不加上換行符號(hào);\f換行但光標(biāo)仍舊停留在原來(lái)的位置;\n換行且光標(biāo)移至行首;\r光標(biāo)移至行首,但不換行;\t插入tab;\v與\f一樣;\\插入\字符;\nnn插入nnn〔八進(jìn)制〕所代表的ASCII字符;--help顯示幫助--version顯示版本信息#!/bin/bash#Thisscriptistotesttheusageofread#Scriptname:echo"===examplesfortestingread==="echo-e
"Whatisyourname?\c"readnameecho"Hello$name"echoecho-n"Wheredoyouwork?"readecho"Iguess$REPLYkeepsyoubusy!"echoread-p
"Enteryourjobtitle:"#自動(dòng)讀給REPLYecho"Ithoughtyoumightbean$REPLY."echoecho"===Endofthescript==="Shell腳本舉例read命令readvariable#讀取變量給variablereadxy#可同時(shí)讀取多個(gè)變量read#自動(dòng)讀給REPLYread–p“Pleaseinput:〞#自動(dòng)讀給REPLY狀態(tài)變量$?中保存命令退出狀態(tài)的值grep$USER
/etc/passwd
echo$?grephello
/etc/passwd;echo$?條件測(cè)試條件測(cè)試可以根據(jù)某個(gè)特定條件是否滿足,來(lái)選擇執(zhí)行相應(yīng)的任務(wù)。
Bash
中允許測(cè)試兩種類型的條件:
命令成功或失敗,表達(dá)式為真或假任何一種測(cè)試中,都要有退出狀態(tài)〔返回值〕,退出狀態(tài)為0表示命令成功或表達(dá)式為真,非0那么表示命令失敗或表達(dá)式為假。
內(nèi)置測(cè)試命令
test通常用test
命令來(lái)測(cè)試表達(dá)式的值x=5;y=10test$x
-gt
$yecho$?
test
命令可以用方括號(hào)來(lái)代替x=5;y=10[
$x
-gt$y]
echo$?
表達(dá)式測(cè)試包括字符串測(cè)試、整數(shù)測(cè)試和文件測(cè)試。測(cè)試表達(dá)式的值方括號(hào)前后要留空格!name=Tom
[$name
=[Tt]??
]
echo$?版本以上的Bash中可以用雙方括號(hào)來(lái)測(cè)試表達(dá)式的值,此時(shí)可以使用通配符進(jìn)展模式匹配。測(cè)試表達(dá)式的值[[$name
=[Tt]??
]]
echo$?字符串測(cè)試[
-z
str]如果字符串str
長(zhǎng)度為0,返回真[
-n
str]如果字符串str
長(zhǎng)度不為0,返回真[
str1
=
str2
]兩字符串相等[
str1
!=
str2
]兩字符串不等name=Tom;[-z$name];
echo$?操作符兩邊必須留空格!字符串測(cè)試name2=Andy;[$name
=$name2
]
;
echo$?整數(shù)測(cè)試,即比較大小[int1
-eq
int2
]
int1等于
int2[int1
-ne
int2
]
int1不等于
int2[int1
-gt
int2
]
int1大于
int2[int1
-ge
int2
]
int1大于或等于
int2[int1
-lt
int2
]
int1小于
int2[int1
-le
int2
]
int1小于或等于
int2x=1;[$x
-eq
1
];
echo$?x=a;[$x
-eq
1
];
echo$?整數(shù)測(cè)試操作符兩邊必須留空格!X整數(shù)測(cè)試也可以使用let
命令或雙圓括號(hào)x=1;let
"$x
==
1";
echo$?x=1;(($x+1>=2));
echo$?只能用于整數(shù)測(cè)試!整數(shù)測(cè)試相應(yīng)的操作符為:==
、!=
、>
、>=
、<
、<=例:兩種測(cè)試方法的區(qū)別使用的操作符不同
let
和雙圓括號(hào)中可以使用算術(shù)表達(dá)式,而中括號(hào)不能
let
和雙圓括號(hào)中,操作符兩邊可以不留空格邏輯測(cè)試[
expr1
-a
expr2
]邏輯與,都為真時(shí),結(jié)果為真[
expr1
-o
expr2
]邏輯或,有一個(gè)為真時(shí),結(jié)果為真[
!
expr
]邏輯非x=1;name=Tom;[$x
-eq
1–a–n$name
];
echo$?邏輯測(cè)試注:不能隨便添加括號(hào)[
(
$x
-eq
1
)–a(
–n$name
)
];
echo$?Xx=1;name=Tom;[[$x
-eq
1&&$name=To?
]];
echo$?[[
pattern1
&&
pattern2
]]邏輯與
[[
pattern1
||
pattern2
]]邏輯或
[[
!
pattern
]]邏輯非
可以使用模式的邏輯測(cè)試邏輯測(cè)試文件測(cè)試:文件是否存在,文件屬性,訪問(wèn)權(quán)限等。-ffnamefname
存在且是普通文件時(shí),返回真(即返回0)
-Lfnamefname
存在且是鏈接文件時(shí),返回真
-d
fnamefname
存在且是一個(gè)目錄時(shí),返回真
-e
fnamefname(文件或目錄)存在時(shí),返回真
-s
fnamefname
存在且大小大于0時(shí),返回真
-r
fnamefname(文件或目錄)存在且可讀時(shí),返回真
-w
fnamefname(文件或目錄)存在且可寫時(shí),返回真
-x
fnamefname(文件或目錄)存在且可執(zhí)行時(shí),返回真常見(jiàn)的文件測(cè)試操作符更多文件測(cè)試符參見(jiàn)test
的在線幫助mantest文件測(cè)試檢查空值[
"$name"
=
""][!
"$name"][
"X${name}"
!=
"X"]檢查空值語(yǔ)法構(gòu)造ifexpr1#如果expr1為真(返回值為0)then#那么commands1#執(zhí)行語(yǔ)句塊commands1elifexpr2#假設(shè)expr1不真,而expr2為真then#那么commands2#執(zhí)行語(yǔ)句塊commands2......#可以有多個(gè)elif語(yǔ)句else#else最多只能有一個(gè)commands4#執(zhí)行語(yǔ)句塊commands4fi#if語(yǔ)句必須以單詞fi終止if條件語(yǔ)句commands為可執(zhí)行語(yǔ)句塊,如果為空,需使用shell提供的空命令“:〞,即冒號(hào)。該命令不做任何事情,只返回一個(gè)退出狀態(tài)0
if
語(yǔ)句可以嵌套使用,,,
name_grep,tellme,tellme2,幾點(diǎn)說(shuō)明elif可以有任意多個(gè)〔0個(gè)或多個(gè)〕else最多只能有一個(gè)〔0個(gè)或1個(gè)〕if語(yǔ)句必須以fi表示完畢
expr
通常為條件測(cè)試表達(dá)式;也可以是多個(gè)命令,以最后一個(gè)命令的退出狀態(tài)為條件值。#!/bin/bash#echo-n"Pleaseinputx,y:"readxyecho"x=$x,y=$y"if((x>y));thenecho"xislargerthany"elif((x==y));thenecho"xisequaltoy"elseecho"xislessthany"fi#!/bin/bash#Usingtheoldstyletestcommand:[]#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."fi#!/bin/bash#Usingthenewstyletestcommand:[[]]#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]then echo"Welcometoourplanet!" exit1fiif[$age-ge0-a$age-le12]then echo"Childrenistheflowersofthecountry"elif[$age-gt12-a$age-le19]then echo"Rebelwithoutacause"elif[$age-gt19-a$age-le29]then echo"Yougottheworldbythetail!!"elif[$age-ge30-a$age-le39]then echo"Thirtysomething..."else echo"SorryIasked"fitellme2#!/bin/bashecho-n"Howoldareyou?"readageif((age<0||age>120))then echo"Welcometoourplanet!" exit1fiif((age>=0&&age<=12))then echo"Childrenistheflowersofthecountry"elif((age>=13&&age<=19))thenecho"Rebelwithoutacause"elif((age>=19&&age<=29))then echo"Yougottheworldbythetail!!"elif((age>=30&&age<=39))then echo"Thirtysomething..."else echo"SorryIasked"fi#!/bin/bash#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]then echo"youaresuperuser."else echo"youarenotsuperuser."fi語(yǔ)法構(gòu)造caseexprin#expr為表達(dá)式,關(guān)鍵詞in不要忘!pattern1)#假設(shè)expr與pattern1匹配,注意括號(hào)commands1#執(zhí)行語(yǔ)句塊commands1;;#跳出case構(gòu)造pattern2)#假設(shè)expr與pattern2匹配commands2#執(zhí)行語(yǔ)句塊commands2;;#跳出case構(gòu)造
......#可以有任意多個(gè)模式匹配*)#假設(shè)expr與上面的模式都不匹配commands#執(zhí)行語(yǔ)句塊commands;;#跳出case構(gòu)造
esac#case語(yǔ)句必須以esac終止case選擇語(yǔ)句
case
語(yǔ)句舉例:幾點(diǎn)說(shuō)明每個(gè)命令塊的最后必須有一個(gè)雙分號(hào),可以獨(dú)占一行,或放在最后一個(gè)命令的后面。所給的匹配模式pattern中可以含有通配符和“|〞。如果expr沒(méi)有找到匹配的模式,那么執(zhí)行缺省值“*)〞后面的命令塊(類似于if中的else);“*)〞可以不出現(xiàn)。表達(dá)式expr按順序匹配每個(gè)模式,一旦有一個(gè)模式匹配成功,那么執(zhí)行該模式后面的所有命令,然后退出case。#!/bin/bash#testcase#echo-n"Doyouwishtoproceed[y/n]:"readanscase$ansiny|Y|yes|Yes)echo"yesisselected";;n|N|no|No)echo"noisselected" ;;*)echo"`basename$0`:Unknownresponse" exit1;;esac語(yǔ)法構(gòu)造forvariableinlist#每一次循環(huán),依次把列表list中的一個(gè)值賦給循環(huán)變量do#循環(huán)開(kāi)場(chǎng)的標(biāo)志commands#循環(huán)變量每取一次值,循環(huán)體就執(zhí)行一遍done#循環(huán)完畢的標(biāo)志幾點(diǎn)說(shuō)明列表list
可以是命令替換、變量名替換、字符串和文件名列表(可包含通配符)
for
循環(huán)執(zhí)行的次數(shù)取決于列表list
中單詞的個(gè)數(shù)
for
循環(huán)體中一般要出現(xiàn)循環(huán)變量,但也可以不出現(xiàn)for循環(huán)語(yǔ)句執(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)就完畢了。循環(huán)執(zhí)行過(guò)程,
位置參量的使用:
$*與
$@
可以省略
inlist
,此時(shí)使用位置參量idcheck.shgreet.shyes_no.sh*.shfor循環(huán)執(zhí)行過(guò)程#!/bin/bashfornameinTomDickHarryJoedoecho"Hi$name"doneecho"outofloop"#!/bin/bashfornamein`catnamelist`doecho"Hi$name"doneecho"outofloop"#!/bin/bash#Purpose:Createbackupfilesandstore#theminabackupdirectory.#backup_dir=backupmkdir$backup_dirforfilein*.shdoif[-f$file]thencp$file$backup_dir/${file}.bakecho"$fileisbackedupin$backup_dir"fidone#!/bin/bash#usage:greet.shTomJohnAnndyecho"==using\$*=="fornamein$*#sameasfornamein$@doechoHi$namedoneecho"==using\$@=="fornamein$@#sameasfornamein$*doechoHi$namedoneecho'==using"$*"=='fornamein"$*"doechoHi$namedoneecho'==using"$@"=='fornamein"$@"doechoHi$namedone#!/bin/bash#forfile#Emptywordlistdoif[[-f$file&&!-x$file]]thenchmod+x$fileecho"==$filenowhasexecutepermission"fidone語(yǔ)法構(gòu)造whileexpr#執(zhí)行exprdo#假設(shè)expr的退出狀態(tài)為0,進(jìn)入循環(huán),否那么退出whilecommands#循環(huán)體done#循環(huán)完畢標(biāo)志,返回循環(huán)頂部執(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為止。while循環(huán)語(yǔ)句語(yǔ)法構(gòu)造untilexpr#執(zhí)行exprdo#假設(shè)expr的退出狀態(tài)非0,進(jìn)入循環(huán),否那么退出untilcommands#循環(huán)體done#循環(huán)完畢標(biāo)志,返回循環(huán)頂部執(zhí)行過(guò)程與while
循環(huán)類似,只是當(dāng)expr
退出狀態(tài)非0時(shí)才執(zhí)行循環(huán)體,直到expr
為0時(shí)退出循環(huán)。until循環(huán)語(yǔ)句用于強(qiáng)行退出當(dāng)前循環(huán)。如果是嵌套循環(huán),那么break命令后面可以跟一數(shù)字n,表示退出第n重循環(huán)〔最里面的為第一重循環(huán)〕。用于忽略本次循環(huán)的剩余局部,回到循環(huán)的頂部,繼續(xù)下一次循環(huán)。如果是嵌套循環(huán),continue命令后面也可跟一數(shù)字n,表示回到第n重循環(huán)的頂部。break
[n]continue
[n]例:break和continue#!/bin/bashformonthinJanFebMarAprMayJunJulAugSepOctNovDecdoforweekin1234doecho-n"Processingthemonthof$month.OK?"readansif["$ans"=n-o-z"$ans"]thencontinue2else
echo-n"Processweek$weekof$month?"readansif["$ans"=n-o-z"$ans"]thencontinueelseecho"Nowprocessingweek$weekof$month."sleep1#Commandsgohereecho"Doneprocessing..."fifidonedonesleepnexit和sleepexitnexit
命令用于退出腳本或當(dāng)前進(jìn)程。n
是一個(gè)從0到255的整數(shù),0表示成功退出,非零表示遇到某種失敗而非正常退出。該整數(shù)被保存在狀態(tài)變量$?中。
exit
命令
sleep
命令暫停n
秒鐘語(yǔ)法構(gòu)造說(shuō)明select循環(huán)主要用于創(chuàng)立菜單,按數(shù)字順序排列的菜單項(xiàng)將顯示在標(biāo)準(zhǔn)錯(cuò)誤上,并顯示PS3提示符,等待用戶輸入用戶輸入菜單列表中的某個(gè)數(shù)字,執(zhí)行相應(yīng)的命令用戶輸入被保存在內(nèi)置變量REPLY中。selectvariableinlistdo#循環(huán)開(kāi)場(chǎng)的標(biāo)志commands#循環(huán)變量每取一次值,循環(huán)體就執(zhí)行一遍done#循環(huán)完畢的標(biāo)志例:select循環(huán)與菜單#!/bin/bashPS3="Selectaprogramtoexecute:"selectprogramin'ls-F'pwddatedo $programdone例:
select
經(jīng)常和case
聯(lián)合使用
select
是個(gè)無(wú)限循環(huán),因此要記住用break
命令退出循環(huán),或用exit
命令終止腳本。也可以按ctrl+c
退出循環(huán)。與for
循環(huán)類似,可以省略inlist
,此時(shí)使用位置參量select與case#!/bin/bashPS3="Pleasechooseoneofthethreeboys:"selectchoiceintomdanguy#selectchoicedocase$choiceintom)echoTomisacooldude!break;; #breakoutoftheselectloopdan|guy)echoDanandGuyarebothwonderful.break;;*)echo"$REPLYisnotoneofyourchoices"echo"Tryagain.";;esacdoneshift
[n]用于將參量列表list
左移指定次數(shù),缺省為左移一次。參量列表list
一旦被移動(dòng),最左端的那個(gè)參數(shù)就從列表中刪除。while
循環(huán)遍歷位置參量列表時(shí),常用到shift。abcdefghabcdefgh循環(huán)控制shift命令例:#!/bin/bash#Purpose:shiftthroughcommandlinearguments#Usage:doit.sh[args]while(($#>0))#or[$#-gt0]doecho$*shiftdone#!/bin/bash#Using'shift'tostepthroughallthepositionalparameters.until[-z"$1"]#Untilallparametersusedup...doecho"$1"shiftdoneecho#Extralinefeed.exit0
生成隨機(jī)數(shù)的特殊變量echo$RANDOM范圍是:[0,32767]
expr:通用的表達(dá)式計(jì)算命令表達(dá)式中參數(shù)與操作符必須以空格分開(kāi),表達(dá)式中的運(yùn)算可以是算術(shù)運(yùn)算,比較運(yùn)算,字符串運(yùn)算和邏輯運(yùn)算。expr5%3expr5\*3#乘法符號(hào)必須被轉(zhuǎn)義隨機(jī)數(shù)和expr命令字符串操作${#var}返回字符串變量var的長(zhǎng)度${var:m}返回${var}中從第m個(gè)字符到最后的部分${var:m:len}返回${var}中從第m個(gè)字符開(kāi)始,長(zhǎng)度為len的部分${var#pattern}刪除${var}中開(kāi)頭部分與pattern匹配的最小部分${var##pattern}刪除${var}中開(kāi)頭部分與pattern匹配的最大部分${var%pattern}刪除${var}中結(jié)尾部分與pattern匹配的最小部分${var%%pattern}刪除${var}中結(jié)尾部分與pattern匹配的最大部分${var/old/new}用new替換${var}中第一次出現(xiàn)的old${var//old/new}用new替換${var}中所有的old(全局替換)注:pattern,old中可以使用通配符。例:ex4strm的取值從0到${#var}-1字符串操作ex4str#!/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}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ò),如果沒(méi)有錯(cuò)誤,那么不顯示任何內(nèi)容。腳本調(diào)試編程小結(jié):變量局部變量、環(huán)境變量〔export、declare-x〕只讀變量、整型變量例:declare
-ix;x="hello";
echo$x0位置參量〔$0,$1,...,$*,$@,$#,$$,$?〕變量的間接引用〔eval,${!str}〕例:name="hello";x="name";
echo${!x}hello命令替換〔`cmd`、$(cmd)〕整數(shù)運(yùn)算declare定義的整型變量可以直接進(jìn)展運(yùn)算,
否那么需用let命令或$[...]、$((...))進(jìn)展整數(shù)運(yùn)算。編程小結(jié):輸入輸出
輸入:readreadvar1var2...readread–p
"提示"輸出:printfprintf"%-12.5f\t%d\n"123.458format
以%開(kāi)頭flagfieldwidthprecision格式符-:左對(duì)齊+:輸出符號(hào)0:空白處添0空格:前面加一空格字段寬度小數(shù)點(diǎn)后輸出位數(shù)cdefgsox\b\n\r\t\v\\\〞%%REPLYREPLY輸出參數(shù)用空格隔開(kāi)字符串測(cè)試編程小結(jié):條件測(cè)試[
-z
string
]如果字符串string長(zhǎng)度為0,返回真[
-n
string
]如果字符串string長(zhǎng)度不為0,返回真[
str1
=
str2
]兩字符串相等(也可以使用==)[
str1
!=
str2
]兩字符串不等操作符兩邊必須留空格![[
str1
=
str2
]]兩字符串相等(也可以使用==)[[
str1
!=
str2
]]兩字符串不等[[
str1
>
str2
]]str1大于str2,按ASCII碼比較[[
str1
<
str2
]]str1小于str2,按ASCII碼比較如果使用雙方括號(hào),可以使用通配符進(jìn)展模式匹配。例:name=Tom;[[$name>Tom]];
echo$?編程小結(jié):條件測(cè)試整數(shù)測(cè)試[
int1
-eq
int2
]
int1等于
int2[
int1
-ne
int2
]
int1不等于
int2[
int1
-gt
int2
]
int1大于
int2[
int1
-ge
int2
]
int1大于或等于
int2[
int1
-lt
int2
]
int1小于
int2[
int1
-le
int2
]
int1小于或等于
int2注意這兩種方法的區(qū)別![[int1==int2]]
int1等于
int2[[int1!=int2]]
int1不等于
int2[[int1
>
int2]]
int1大于
int2[[int1
>=int2]]
int1大于或等于
int2[[int1
<
int2]]
int1小于
int2[[int1<=int2]]
int1小于或等于
int2編程小結(jié):條件測(cè)試邏輯測(cè)試如果使用雙方括號(hào),可以使用通配符進(jìn)展模式匹配。[[
pattern1
&&
pattern2
]]邏輯與
[[
pattern1
||
pattern2
]]邏輯或
[[
!
pattern
]]邏輯非
[
expr1
-a
expr2
]邏輯與,都為真時(shí),結(jié)果為真[
expr1
-o
expr2
]邏輯或,有一個(gè)為真時(shí),結(jié)果為真[
!
expr
]邏輯非編程小結(jié):條件測(cè)試文件測(cè)試-ffnamefname
存在且是普通文件時(shí),返回真(即返回0)
-Lfnamefname
存在且是鏈接文件時(shí),返回真
-d
fnamefname
存在且是一個(gè)目錄時(shí),返回真
-e
fnamefname(文件或目錄)存在時(shí),返回真
-s
fnamefname
存在且大小大于0時(shí),返回真
-r
fnamefname(文件或目錄)存在且可讀時(shí),返回真
-w
fnamefname(文件或目錄)存在且可寫時(shí),返回真
-x
fnamefname(文件或目錄)存在且可執(zhí)行時(shí),返回真編程小結(jié):控制構(gòu)造
if
條件語(yǔ)句
case
選擇語(yǔ)句
for
循環(huán)語(yǔ)句
while
循環(huán)語(yǔ)句
until
循環(huán)語(yǔ)句
break、continue、sleep
命令
select循環(huán)與菜單
shift命令
${...},$(...),$[...],$((...))[...],[[...]],((...))各種括號(hào)的作用function_name(){commands}函數(shù)
一個(gè)函數(shù)就是一個(gè)子程序,用于完成特定的任務(wù),當(dāng)有重復(fù)代碼,或者一個(gè)任務(wù)只需要很少的修改就被重復(fù)幾次執(zhí)行時(shí),這時(shí)你應(yīng)考慮使用函數(shù)。functionfunction_name{commands}
函數(shù)的一般格式
和其它編程語(yǔ)言一樣,Bash也可以定義函數(shù)。函數(shù)舉例#!/bin/bashfun1(){echo"Thisisafunction"echo
"Nowexitingfun1."
}fun2(){echo"Thisisfun2."echo"Nowexitingfun2."}
只需輸入函數(shù)名即可調(diào)用該函數(shù)。函數(shù)的調(diào)用
函數(shù)必須在調(diào)用之前定義#!/bin/bashfun2(){echo"Thisisfun2."echo"Nowexitingfun2."}fun2#調(diào)用函數(shù)
fun2例:,#!/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.funexit0#f1#Willgiveanerrormessage,sincefunction"f1"notyetdefined.#declare-ff1#Thisdoesn'thelpeither.#f1#Stillanerrormessage.#However...f1(){echo"Callingfunction\"f2\"fromwithinfunction\"f1\"."f2}f2(){echo"Function\"f2\"."}#f1#Function"f2"isnotactuallycalleduntil
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育機(jī)構(gòu)二零二五年度兼職教師聘用含知識(shí)產(chǎn)權(quán)保護(hù)合同
- 二零二五年度智慧城市項(xiàng)目經(jīng)理職位聘用合同
- 語(yǔ)文文學(xué)鑒賞能力考核題
- 新能源汽車充電樁網(wǎng)絡(luò)規(guī)劃方案書(shū)
- 新興消費(fèi)市場(chǎng)消費(fèi)者行為分析與營(yíng)銷策略研究
- 企業(yè)績(jī)效評(píng)估咨詢服務(wù)協(xié)議
- 農(nóng)村資源環(huán)境保護(hù)及修復(fù)協(xié)議書(shū)
- 農(nóng)業(yè)市場(chǎng)推廣策略實(shí)戰(zhàn)案例分析
- 社區(qū)團(tuán)購(gòu)電商平臺(tái)合作合同
- 農(nóng)業(yè)合作組織規(guī)范化管理手冊(cè)
- 裝飾裝修工程安全管理培訓(xùn)學(xué)習(xí)
- 非煤露天礦山風(fēng)險(xiǎn)辨識(shí)與評(píng)估及風(fēng)險(xiǎn)控制
- 2022版義務(wù)教育(物理)課程標(biāo)準(zhǔn)(附課標(biāo)解讀)
- AIB(2022版)統(tǒng)一檢查標(biāo)準(zhǔn)-前提方案與食品安全程序
- 網(wǎng)絡(luò)安全技術(shù)服務(wù)方案
- 地鐵站務(wù)員職業(yè)發(fā)展規(guī)劃
- 統(tǒng)編版小學(xué)語(yǔ)文一年級(jí)下冊(cè)全冊(cè)教學(xué)課件(2024年春季版)
- 醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理制度范本
- 中等職業(yè)學(xué)校英語(yǔ)教學(xué)大綱詞匯表本表共收詞2200個(gè)左右含
- 《國(guó)家衛(wèi)生統(tǒng)計(jì)網(wǎng)絡(luò)直報(bào)系統(tǒng)》數(shù)據(jù)填報(bào)員操作指南V1.2
- 危險(xiǎn)性較大分部分項(xiàng)工程安全專項(xiàng)施工方案專家論證審查表
評(píng)論
0/150
提交評(píng)論