Shell腳本-循環基礎

Shell腳本-循環基礎

背景:

正在學習Shell腳本之循環,發現Shell的循環和其他編程語言大同小異,邏輯上都是相通的,但在使用格式上卻有點不同,在學習完Shell循環后,將學習的心得體會記錄下來,以備今后復習。

介紹:

什么是Shell腳本:

      shell script是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與指令寫在里面,然后用正規表示法,管道命令以及數據流重導向等功能,以達到我們所想要的處理目的。

      shell script就像早期dos年代的.bat,將許多指令匯整寫一起,讓使用者很容易地就能夠一個操作執行多個命令,而shell script還提供了數組,循環,條件以及邏輯判斷等重要功能,讓使用者可以直接以shell來寫程序,而不必使用類似C程序語言等傳統程序編寫的語法。

Shell–for循環

格式1:

格式:for name [in words …] ; do COMMANDS;done

其中for為關鍵字,表示下面是使用的for循環

name是循環時使用的名字,它代表被循環列表里的具體值。在循環體里,我們不知道系統循環到哪了,也就不知道具體值是什么,所以需要一個統一的名字來代表這個值,而這里的name就是代表這個值的,它的名字是可以自己隨意取的,但是要避開使用一些系統關鍵字和保留字。

in words … 代表使用的循環列表,可以是一串字符也可以是數組,如for name in word1 word2 word3 …,其中in是關鍵字,如果后面有循環列表就需要使用in。

do COMMANDS :其中do是關鍵字,表示后面是循環執行的命令,COMMANDS代表命令集合,可以是多個命令

done代表循環結束

如果這些代碼是寫在一行的,需要用”;”來分開,如果是分行寫可以不用加”;”,后面會有列子供參考。

例子1:

for i in zhangsan lisi wangwu;do
        echo your name is $i
done

輸出效果:

Shell腳本-循環基礎

例子2:

for i in {1..10};do
     echo number is $i
done

輸出效果:

Shell腳本-循環基礎

例子3:

 for i in `seq 10`;do #循環10次,seq 10命令表示1到10
          useradd user$i #添加用戶
          echo user$i is created #提示用戶添加
          password=`tr -dc 'a-zA-Z0-9' < /dev/urandom |  head -c 8` #隨機生成8位數密碼
          echo user$i:$password >> /root/user.log #將密碼寫入日志文件
          echo $password | passwd --stdin "user$i" &> /dev/null #為用戶添加密碼
  done #結束
  unset password #釋放變量password

輸出效果:

Shell腳本-循環基礎

生成的密碼:

Shell腳本-循環基礎

格式2:

格式:for (( exp1; exp2; exp3 )); do COMMANDS; done

這個用法和C語言的for循環差不多,不過這里用兩個()括起來

exp1表示循環的起始值

exp2表示循環執行的條件,滿足條件則執行,不滿足則退出循環

exp3表示循環成功執行后的操作

其他的和第一種格式是一樣的

例子:

for ((i=0;i<10;i++));do
      echo number is $i
done

輸出效果:

Shell腳本-循環基礎

Shell循環–while

格式:

格式:while COMMANDS; do COMMANDS; done

其中while為關鍵字,表示后面使用while循環

COMMANDS表示循環執行條件,COMMANDS結果為true時執行循環,為false則退出循環

do COMMANDS 表示循環執行的命令集

done 表示循環結束

例子:

i=0 #初始化i
while [ $i -lt 10 ];do #當i 小于10時執行循環體里的命令
      echo $i #輸出 i 的值
      let i++ # i+1
done #結束

輸出效果:

Shell腳本-循環基礎

從while的格式可以看出,while更適合循環次數不確定的場合,因為只要是true,while就不會停止。這樣就可以做一個死循環。

while true;do #true表示真,
      echo godai
done

執行這個腳本會一直輸出gidai,直到我們強行結束這個腳本。

原創文章,作者:657188918,如若轉載,請注明出處:http://www.www58058.com/85359

(0)
657188918657188918
上一篇 2017-08-26
下一篇 2017-08-26

相關推薦

  • CentOS系統啟動流程

       開機不是只要單擊電源鈕,而關機只要關掉電源鈕就可以了嗎?話是這樣沒錯啦,但是由于 Linux 是一套多人多任務的操作系統,你難保你在關機時沒有人在在線,如果你關機的時候碰巧一大群人在在線工作, 那會讓當時在在線工作的人馬上斷線的!那不是害死人了!一些數據可是無價之寶。    另外 Linux 在執行的時候,雖然你…

    Linux干貨 2016-09-19
  • Linux平臺的4個最佳開源代碼編輯器

    原文出處: Abhishek   譯文出處:Linux中國 su-kaiyao   正在尋找Linux平臺最棒的代碼編輯器?如果你詢問那些很早就玩Linux的人,他們會回答是Vi, Vim, Emacs, Nano等。但是,我今天不討論那些。我將談論一些新時代尖端、漂亮、時髦而且十分強大, 功能豐富…

    Linux干貨 2015-03-02
  • 馬哥教育網絡班第19期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:一種網路裝置,負責網路橋接,將網絡的多個網段在數據鏈路層連接起來。 集線器:將多條以太網線或光纖集合連接在同一段物理介質下的裝置。工作在物理層。 二層交換機:工作在數據鏈路層,交換機內部的CPU會在每個端口成功連接時,通過將MAC地址和端口對應,形成一張MAC表。在今后的通…

    Linux干貨 2016-08-22
  • rsyslog, mysql, loganalyzer聯合實現

    一. rsyslog簡介 rsyslog是一個自由軟件, 是GPL的lincesed增強的syslogd. 它提供了Mysql和完全可配置的輸出格式的支持. 1. 日志信息格式:      <優先級>時間戳 主機名 模塊名/級別/信息摘要:內容      <priority>…

    Linux干貨 2016-10-24
  • HTTP詳解(1)-工作原理

    1. HTTP簡介          HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸…

    Linux干貨 2015-04-04
  • 2016-10-17作業

    1 生產環境發現一臺服務器系統時間產生偏差,造成服務異常,請幫忙校正。 date命令查看系統時間,clock或者hwclock命令查看硬件時間, 將系統時間同步到硬件時間的方法hwclock -s   2 生產有一個數據同步腳本需要執行很長時間,怎樣做到無人值守,在管理工具退出的情況下,腳本依然能正常運行。在生產環境的中創建SCREEN會話,會話的…

    Linux干貨 2016-10-18
欧美性久久久久