日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

通过shell例子来学习循环结构的语法

發(fā)布時(shí)間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过shell例子来学习循环结构的语法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

心得:?所謂有用就是學(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)限。

  • #!/bin/bash ?
  • #program:use?for?to?display?a?directory's?filetype?and?permission ?
  • #history:2013-02-20???ASK???????first?release ?
  • PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin ?
  • export?PATH ?
  • ?
  • read?-p?"please?you?input?a?directory:"?dir ?
  • if?[?-z?"$dir"?-o?!?-d?"$dir"?];?then ?
  • ????????echo?"you?have?input?nothing?or?$dir?is?NOT?a?directory" ?
  • ????????exit?0 ?
  • fi ?
  • ????????filen=`ls?$dir` ?
  • for?filename?in?$filen ?
  • do ?
  • ????????[?-c?$dir/$filename?]?&&??filetype="is?character?file"?
  • ????????[?-p?$dir/$filename?]?&&??filetype="is?PIPE?file"?
  • ????????[?-f?$dir/$filename?]?&&??filetype="is?regular?file"?
  • ????????[?-L?$dir/$filename?]?&&??filetype="is?link?file"?
  • ????????[?-S?$dir/$filename?]?&&??filetype="is?sokkt?file"?
  • ????????[?-d?$dir/$filename?]?&&??filetype="is?directory"?
  • ????????[?-b?$dir/$filename?]?&&??filetype="is?block?file"?
  • ?
  • ????????[?-r?$dir/$filename?]?&&??per="$per?readable"?
  • ????????[?-w?$dir/$filename?]?&&??per="$per?writeable"?
  • ????????[?-o?$dir/$filename?]?&&??per="$per?executable"?
  • ????????[?-u?$dir/$filename?]?&&??per="$per?set?UID"?
  • ????????[?-g?$dir/$filename?]?&&??per="$per?set?GID"?
  • ????????[?-k?$dir/$filename?]?&&??per="$per?set?Sticky?bit"?
  • ?
  • echo?"this?file?$dir/$filename?is??$filetype?,and?permission?is?$per?" ?
  • ?
  • filetype=""?
  • per=""?
  • done?
  • 注釋:
    第一行是該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)

  • #!/bin/bash ?
  • #program:use?while?to?add?1?to?100 ?
  • #history:2013-02-20???ASK???????first?release ?
  • PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin ?
  • export?PATH ?
  • ?
  • i=0?
  • s=0?
  • while?[?$i?-lt?100?] ?
  • do ?
  • ????????i=$(($i+1)) ?
  • ????????s=$(($s+$i)) ?
  • done ?
  • echo?"1+2+3...+$i=$s"?
  • 或者使用until。和while的區(qū)別是until當(dāng)遇到條件為真時(shí)退出當(dāng)前循環(huán)。一定要和while分清

  • #!/bin/bash ?
  • #program:use?until?to?add?1?to?100 ?
  • #history:2013-02-20???ASK???????first?release ?
  • PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin ?
  • export?PATH ?
  • ?
  • i=0?
  • s=0?
  • until?[?$i?-eq?100?] ?
  • do ?
  • ????????i=$(($i+1)) ?
  • ????????s=$(($s+$i)) ?
  • done ?
  • echo?"1+2+3...+$i=$s"?
  • 或者使用for循環(huán)來(lái)執(zhí)行?。
    ?

  • #!/bin/bash ?
  • #program:use?for?to?add?1?to?100 ?
  • #history:2013-02-20???ASK???????first?release ?
  • PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin ?
  • export?PATH ?
  • ?
  • s=0?
  • for((i=0;i<=100;i++)) ?
  • do ?
  • ????????s=$(($s+$i)) ?
  • done ?
  • echo?"1+2+3...+$i=$s"? ######這行執(zhí)行后會(huì)輸出1+2+3...+101=5050。這個(gè)101是和i++






  • ?

    注釋:
    第一:先說(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。