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 09:23
下一篇 2017-08-26 12:26

相關推薦

  • 馬哥網絡班21期-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。        cp -r /etc/skel /home/tuser1        chmod 700 /home/tuser1  …

    Linux干貨 2016-08-02
  • 網絡概念簡述和Linux網絡管理命令

    網絡概念簡述和Linux網絡管理命令 1. 網絡分類 我們通常接觸到的網絡通常是廣域網、局域網 局域網(Local Area Network,LAN)是指在某一區域內由多臺計算機互聯成的計算機組。 廣域網(Wide Area Network,WAN):網絡跨越國界、洲界,甚至全球范圍。  因特網(Internet)是世界范圍內最大的廣域網。 2. …

    Linux干貨 2016-04-19
  • 創建CA

    創建CA和申請證書 創建私有CA: 首先在CA服務器端創建CA。 先去看openssl的配置文件: /etc/pki/tls/openssl.cnf 一般我們不會去更改這個配置文件,但是要去看一下。我們是根據這個文件創建的CA. 這個文件里是openssl的配置文件,我們打開后只觀察與CA有關的文件。   在文本中可以看出一個主機中可以有多個CA,…

    2017-07-28
  • python Django分頁

    自定義html_helper.py  —>  Page_helper類 #coding:utf-8 from django.utils.safestring import mark_safe class Page_Helper(object):    …

    Linux干貨 2016-08-22
  • Linux發展史

    Linux發展史 一、歷史 (一)、Unix 1、Unix操作系統是一個強大的多用戶、多任務操作系統,支持多種處理器架構。 2、最早由KenThompson(湯普遜)、Dennis Ritchie(丹尼斯·里奇,C語言之父,Unix之父)和Douglas McIlroy(麥克羅伊,程式設計師)于1969年在AT&T的貝爾實驗室開發。 3、目前它的商標…

    Linux干貨 2016-10-14
  • linux基礎學習(數組、字符串變量處理)

    2016-08-22 授課內容: 數組 高級字符串操作 一、數組   變量:存儲單個元素的內存空間   數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。   數組名和索引   索引:編號從0開始,屬于數值索引   bash的數組支持稀疏格式(索引不連續)   …

    Linux干貨 2016-08-24
欧美性久久久久