鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語(yǔ)句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號(hào)展開(kāi)與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗(yàn)和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開(kāi)頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴(kuò)展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語(yǔ)句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計(jì)算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問(wèn)題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對(duì)上一講的總結(jié)和擴(kuò)展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號(hào) trap

shell 學(xué)習(xí)第二十九天----循環(huán)

循環(huán)

bash shell 中主要提供了三種循環(huán):for,while,until

for 循環(huán)

for 循環(huán)的運(yùn)作方式是將串行的元素取出, 依次放入指定的變量中, 然后重復(fù)執(zhí)行在 do 和 done 之間的命令, 知道所有元素取盡為止.其中, 串行是一些字符串的組合, 彼此使用 $IFS 所定義的分隔符 (如空格符) 隔開(kāi), 這些字符串成為為字段.

語(yǔ)法:
for 變量 in 串行 // 將串行中的字段迭代放入變量中
do
執(zhí)行命令 // 重復(fù)執(zhí)行, 知道串行中的每一個(gè)字段處理過(guò)為止.
done

案例:用 for 循環(huán)在 tmp 目錄下創(chuàng)建 aaa1-aaa10,然后在 aaa1-aaa10 創(chuàng)建 bbb1-bbb10 的目錄

\#!/bin/bash
mkdir hahaha
for k in $(seq 1 10)
do
        mkdir /tmp/hahaha/aaa${k}
        cd /tmp/hahaha/aaa${k}
        for j in $(seq 1 10)
        do
                mkdir bbb${j}
                cd /tmp/hahaha/aaa${k}
        done
        cd ..
done

說(shuō)明:

  • 行 3,seq 用于產(chǎn)生從某個(gè)數(shù)到另外一個(gè)數(shù)之間的所有整數(shù)。
  • 行 5,在 tmp 目錄下創(chuàng)建文件夾。
  • 行 7,在使用一個(gè) for 循環(huán)創(chuàng)建文件夾

案例二:列出 var 目錄下各子目錄占用磁盤空間的大小。

\#!/bin/bash
dir="/var"                                                           
cd $dir
for k in $(ls $dir)
do
        if [-d $k]
        then
                du -sh $k
        fi
done

說(shuō)明:

  • 行 4,對(duì) /var 目錄中每一個(gè)文件,進(jìn)行 for 循環(huán)處理。
  • 行 6,如果 /var 下的文件是目錄,則使用 du -sh 計(jì)算該目錄占用磁盤空間的大小。

while 循環(huán)

語(yǔ)法:
while 條件測(cè)試
do
執(zhí)行命令
done

說(shuō)明:

  • 行 1 , 首先進(jìn)行條件測(cè)試, 如果傳回值為 0(條件測(cè)試為真), 則進(jìn)入循環(huán), 執(zhí)行命令區(qū)域, 否則不進(jìn)入循環(huán)
  • 行 3, 執(zhí)行命令區(qū)域, 這些命令中, 應(yīng)該要有改變天劍測(cè)試的命令, 這樣, 才有機(jī)會(huì)在有限步驟后結(jié)束之星 while 循環(huán).
  • 行 4, 回到行 1, 執(zhí)行 while 命令.

案例:求 1 到 100 的和

\#!/bin/bash
sum=0
i=1
while ["$i" -le "100"]
do
        sum=$(($sum+$i))
        i=$(($i+1))
done
echo "sum(1-100):" $sum

until 循環(huán)

語(yǔ)法:
until 條件測(cè)試
do
執(zhí)行命令
done

說(shuō)明:

  • 行 1, 如果條件測(cè)試結(jié)果為假 (傳回值不為 0), 則進(jìn)入循環(huán)
  • 行 3, 執(zhí)行命令區(qū)域. 這些命令中, 應(yīng)該有改變條件測(cè)試的內(nèi)容, 這樣才不會(huì)出現(xiàn)死循環(huán).
  • 行 4, 會(huì)到行 1, 執(zhí)行 until 命令

案例:計(jì)算 1-100 的和

\#!/bin/bash
sum=0
i=1
until ((i>100))
do
        sum=$(($sum+$i))
        i=$(($i+1))
done
echo $sum

分析:只要條件測(cè)試未超過(guò) 100,就進(jìn)入循環(huán),其他的和 while 類似。

其實(shí) for 循環(huán)還有一種方式:

for((初始值; 條件; 執(zhí)行步長(zhǎng)))
do  程序段
done

注意細(xì)節(jié):for((初始值; 條件; 執(zhí)行步長(zhǎng))) 里面的預(yù)壓和 c 語(yǔ)言一樣了,但是一點(diǎn)不同雙括號(hào)。

for 循環(huán)案例:列出指定目錄下的所有文件

\#!bin/bash
read -p "Please enter the dir name:" dirname
for file in $(ls $dirname)
do
            echo $file
done

復(fù)習(xí)一下 seq 命令

seq 選項(xiàng) 參數(shù)

主要選項(xiàng):

  • -s 指定分隔符,默認(rèn)是換行
  • -w 等位補(bǔ)全,就是寬度相等,不足的前面補(bǔ) 0
  • -f 格式化輸出,就是指定打印的格式

案例:

使用命令:seq 2

輸出:

1
2

使用: seq -s “--” 2
輸出 :1--2

案例:

[root@localhost tmp]# seq -f %05g 1 10

00001
00002
00003
00004
00005
00006
00007
00008
00009
00010