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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过shell例子来学习循环结构的语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

心得:?所謂有用就是學會了一直在使用,不經常用叫沒多大用,忘記了就叫沒用。反過來想想經常挨領導批的很有可能是領導對你有很大的期望。所以我們學會的東西要經常用到實際中去才是自己的東西。
其實學習的最好方法就是先接觸實際的東西,用實踐來驗證理論
寫腳本編寫要求證,可以一邊測試一邊寫(中間最好有個輸出標記看到哪兒錯了)。

下面的例子在林夕昱老師的視頻里看到的,自己為了練習在centos的系統下默寫下來了,可能是剛學吧,總是寫下來執行后得到好多提示(當然了這些提示是錯誤信息的了,不過對我這個初學者挺有幫助的,希望初學者看過林老師的視頻知道思路后一定要自己試著寫下來練習才是)。在這里想通過自己看過視頻后做個筆記吧,也是幫助自己更快進步。廢話不說了,看例子吧

example 1:該腳本是讓用戶輸入目錄,然后腳本會先判斷是不是目錄或為空否,如是目錄會先列出目錄下的文件,然后一個一個判斷文件的類型,在判斷文件的權限。最后列出用戶輸入目錄下的文件的類型和權限。

  • #!/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腳本運行的環境,可以不用寫。運行環境很多,有/bin/awk -f的還有其他的。
    第二行是該腳本的信息說明干什么用的。一般shell腳本中以#開頭的都是注釋行,shell不會去執行的。
    第三行也是腳本的一些信息,寫明日期和作者,還有版本信息。
    第四行就是指該腳本運行的路徑了。比如腳本中的echo命令,這些命令一般要注明絕對路徑的。路經有好多寫明最主要的那個。
    第五行就是使用export命令讓路徑在全局環境中生效了,而不僅是當前用戶的當前shell環境。
    **************以上的這幾行都是一些準備工作,不過最好養成好的習慣**************
    第七行是使用read定義一個交互的變量。等待用戶輸入后read函數讀取屏幕的值,并付給dir變量。雙引號中的信息是出現在屏幕的提示信息。這個經常用到哦
    *********************第八行到第十一行是一種簡單的if結構語句,當中括號中的條件為真時執行第九行和第十行的程序段。該結構以if開頭和fi結尾。**************************
    第八行是test的一個測試用例。test和中括號的作用一樣。可以寫成test -z $dir形式。中括號中有兩個test命令模式,這兩個是或的關系用-o來表示。如可以寫成 test -z $dir??|| test -d $dir這樣的形式。-z是測試是否為空,如果是空返回真,-d是測試是否為目錄。如果不知道這個命令是否會得到自己的答案是可以在命令狀態下先試試比如我想得到為真可以這樣測試 test -d? /root? && echo "this /root is a directory" || echo "this /root is NOT a directory"。如果屏幕輸出this /root is a directroy表示test為真,因為兩個之間的關系是與的關系。相反屏幕輸出this /root is NOT a directory 說明||前面的為假。因為||前面和||后面的關系是或的關系
    第八行的意思是當輸入的目錄為空或者不是目錄時執行第九和第十程序段。
    第九行是當第八行為真時執行的輸出雙引號里的內容
    第十行是退出腳本執行。
    第十一行是if結構的結束標志。
    第十二行是賦值。把ls得到的數據賦值給filen。這里有個反引號(就是ESC鍵下方的波浪號的那個鍵)的作用是執行里面的命令。需要記住的是和雙引號、單引號的區別。
    ***第十三行到第三十四行是for循環結構。第15到第21是判斷什么文件類型的,第23到第28是判斷是權限的。這是一種for循環的結構。for中間都是以do開始的程序段以done結尾的。**
    中間的就不說了,講講主要的1、第23到第28中per=$per……是說明權限不僅僅是一種,因此要寫成這樣的格式進行累加。2、filetype和per最后又多次一舉賦值為空,是因為這些權限和類型再循環時是會累加的。

    example 2:該腳本通過不同的循環來說明1-100的累加。比如for、while、until等。
    先使用while。while是當條件為真時執行do到done的程序段。為假時退出程序段循環

  • #!/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的區別是until當遇到條件為真時退出當前循環。一定要和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循環來執行?。
    ?

  • #!/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"? ######這行執行后會輸出1+2+3...+101=5050。這個101是和i++






  • ?

    注釋:
    第一:先說說運算。運算的結構是$((? ))。比如a=$(($b+$c))意思就是把b和c的值相加賦給a。再如((num=2#11111111))這個是把8個1的二進制轉換為十進制。也就是說雙左小括號((和雙又小括號))組成運算的格式。相乘的話就是a=$(($b*$c))。
    第二:再說說這個eq、lt、gt等。記住e是等于、l是小于、g是大于就是了很好記住的。equal(等于)greater than(比..大于)less than (比 小于)。
    第三:最后說說for的第二種格式也就是最后一個例子中提及的for((初始值;限制值;步長))格式。至于i++和++i的卻是有不同的自己可以去網上看看。
    回顧:
    1、結構:if、for、while、until等以及各自的區別
    2、測試和關系語句:test和[]、關系的處理 &&、||、!、-a、-o等等
    3、賦值:read -p、直接賦值的、重復賦值的。
    4、引號:單引號、雙引號、反引號等區別
    ?

    轉載于:https://blog.51cto.com/chier11/1136770

    總結

    以上是生活随笔為你收集整理的通过shell例子来学习循环结构的语法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。