通过shell例子来学习循环结构的语法
心得:?所謂有用就是學(xué)會(huì)了一直在使用,不經(jīng)常用叫沒(méi)多大用,忘記了就叫沒(méi)用。反過(guò)來(lái)想想經(jīng)常挨領(lǐng)導(dǎo)批的很有可能是領(lǐng)導(dǎo)對(duì)你有很大的期望。所以我們學(xué)會(huì)的東西要經(jīng)常用到實(shí)際中去才是自己的東西。
其實(shí)學(xué)習(xí)的最好方法就是先接觸實(shí)際的東西,用實(shí)踐來(lái)驗(yàn)證理論。
寫腳本編寫要求證,可以一邊測(cè)試一邊寫(中間最好有個(gè)輸出標(biāo)記看到哪兒錯(cuò)了)。
下面的例子在林夕昱老師的視頻里看到的,自己為了練習(xí)在centos的系統(tǒng)下默寫下來(lái)了,可能是剛學(xué)吧,總是寫下來(lái)執(zhí)行后得到好多提示(當(dāng)然了這些提示是錯(cuò)誤信息的了,不過(guò)對(duì)我這個(gè)初學(xué)者挺有幫助的,希望初學(xué)者看過(guò)林老師的視頻知道思路后一定要自己試著寫下來(lái)練習(xí)才是)。在這里想通過(guò)自己看過(guò)視頻后做個(gè)筆記吧,也是幫助自己更快進(jìn)步。廢話不說(shuō)了,看例子吧
example 1:該腳本是讓用戶輸入目錄,然后腳本會(huì)先判斷是不是目錄或?yàn)榭辗?#xff0c;如是目錄會(huì)先列出目錄下的文件,然后一個(gè)一個(gè)判斷文件的類型,在判斷文件的權(quán)限。最后列出用戶輸入目錄下的文件的類型和權(quán)限。
注釋:
第一行是該shell腳本運(yùn)行的環(huán)境,可以不用寫。運(yùn)行環(huán)境很多,有/bin/awk -f的還有其他的。
第二行是該腳本的信息說(shuō)明干什么用的。一般shell腳本中以#開(kāi)頭的都是注釋行,shell不會(huì)去執(zhí)行的。
第三行也是腳本的一些信息,寫明日期和作者,還有版本信息。
第四行就是指該腳本運(yùn)行的路徑了。比如腳本中的echo命令,這些命令一般要注明絕對(duì)路徑的。路經(jīng)有好多寫明最主要的那個(gè)。
第五行就是使用export命令讓路徑在全局環(huán)境中生效了,而不僅是當(dāng)前用戶的當(dāng)前shell環(huán)境。
**************以上的這幾行都是一些準(zhǔn)備工作,不過(guò)最好養(yǎng)成好的習(xí)慣**************
第七行是使用read定義一個(gè)交互的變量。等待用戶輸入后read函數(shù)讀取屏幕的值,并付給dir變量。雙引號(hào)中的信息是出現(xiàn)在屏幕的提示信息。這個(gè)經(jīng)常用到哦
*********************第八行到第十一行是一種簡(jiǎn)單的if結(jié)構(gòu)語(yǔ)句,當(dāng)中括號(hào)中的條件為真時(shí)執(zhí)行第九行和第十行的程序段。該結(jié)構(gòu)以if開(kāi)頭和fi結(jié)尾。**************************
第八行是test的一個(gè)測(cè)試用例。test和中括號(hào)的作用一樣。可以寫成test -z $dir形式。中括號(hào)中有兩個(gè)test命令模式,這兩個(gè)是或的關(guān)系用-o來(lái)表示。如可以寫成 test -z $dir??|| test -d $dir這樣的形式。-z是測(cè)試是否為空,如果是空返回真,-d是測(cè)試是否為目錄。如果不知道這個(gè)命令是否會(huì)得到自己的答案是可以在命令狀態(tài)下先試試。比如我想得到為真可以這樣測(cè)試 test -d? /root? && echo "this /root is a directory" || echo "this /root is NOT a directory"。如果屏幕輸出this /root is a directroy表示test為真,因?yàn)閮蓚€(gè)之間的關(guān)系是與的關(guān)系。相反屏幕輸出this /root is NOT a directory 說(shuō)明||前面的為假。因?yàn)閨|前面和||后面的關(guān)系是或的關(guān)系。
第八行的意思是當(dāng)輸入的目錄為空或者不是目錄時(shí)執(zhí)行第九和第十程序段。
第九行是當(dāng)?shù)诎诵袨檎鏁r(shí)執(zhí)行的輸出雙引號(hào)里的內(nèi)容
第十行是退出腳本執(zhí)行。
第十一行是if結(jié)構(gòu)的結(jié)束標(biāo)志。
第十二行是賦值。把ls得到的數(shù)據(jù)賦值給filen。這里有個(gè)反引號(hào)(就是ESC鍵下方的波浪號(hào)的那個(gè)鍵)的作用是執(zhí)行里面的命令。需要記住的是和雙引號(hào)、單引號(hào)的區(qū)別。
***第十三行到第三十四行是for循環(huán)結(jié)構(gòu)。第15到第21是判斷什么文件類型的,第23到第28是判斷是權(quán)限的。這是一種for循環(huán)的結(jié)構(gòu)。for中間都是以do開(kāi)始的程序段以done結(jié)尾的。**
中間的就不說(shuō)了,講講主要的1、第23到第28中per=$per……是說(shuō)明權(quán)限不僅僅是一種,因此要寫成這樣的格式進(jìn)行累加。2、filetype和per最后又多次一舉賦值為空,是因?yàn)檫@些權(quán)限和類型再循環(huán)時(shí)是會(huì)累加的。
example 2:該腳本通過(guò)不同的循環(huán)來(lái)說(shuō)明1-100的累加。比如for、while、until等。
先使用while。while是當(dāng)條件為真時(shí)執(zhí)行do到done的程序段。為假時(shí)退出程序段循環(huán)。
或者使用until。和while的區(qū)別是until當(dāng)遇到條件為真時(shí)退出當(dāng)前循環(huán)。一定要和while分清
或者使用for循環(huán)來(lái)執(zhí)行?。
?
?
注釋:
第一:先說(shuō)說(shuō)運(yùn)算。運(yùn)算的結(jié)構(gòu)是$((? ))。比如a=$(($b+$c))意思就是把b和c的值相加賦給a。再如((num=2#11111111))這個(gè)是把8個(gè)1的二進(jìn)制轉(zhuǎn)換為十進(jìn)制。也就是說(shuō)雙左小括號(hào)((和雙又小括號(hào)))組成運(yùn)算的格式。相乘的話就是a=$(($b*$c))。
第二:再說(shuō)說(shuō)這個(gè)eq、lt、gt等。記住e是等于、l是小于、g是大于就是了很好記住的。equal(等于)greater than(比..大于)less than (比 小于)。
第三:最后說(shuō)說(shuō)for的第二種格式也就是最后一個(gè)例子中提及的for((初始值;限制值;步長(zhǎng)))格式。至于i++和++i的卻是有不同的自己可以去網(wǎng)上看看。
回顧:
1、結(jié)構(gòu):if、for、while、until等以及各自的區(qū)別
2、測(cè)試和關(guān)系語(yǔ)句:test和[]、關(guān)系的處理 &&、||、!、-a、-o等等
3、賦值:read -p、直接賦值的、重復(fù)賦值的。
4、引號(hào):單引號(hào)、雙引號(hào)、反引號(hào)等區(qū)別
?
轉(zhuǎn)載于:https://blog.51cto.com/chier11/1136770
總結(jié)
以上是生活随笔為你收集整理的通过shell例子来学习循环结构的语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 手机设备文件对传
- 下一篇: poj 1905 Expanding R