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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux循环条件,shell脚本编写 之 条件选择,条件判断,循环语句

發布時間:2024/4/11 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux循环条件,shell脚本编写 之 条件选择,条件判断,循环语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 概述

編寫shell腳本,一般離不開條件選擇,條件判斷以及循環語句。掌握這三個語法,將大大提高腳本的編寫效率,使得腳本編寫更加靈活,完成X相對復雜的工作

2 條件選擇if語句

if語句選擇執行,逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句

if是根據判讀條件的命令的退出狀態來執行命令,if語句可嵌套

單分支

if?判斷條件;then

條件為真的分支代碼

fi

雙分支

if?判斷條件;?then

條件為真的分支代碼

else

條件為假的分支代碼

fi

多分支

if?判斷條件1;?then

條件為真的分支代碼

elif?判斷條件2;?then

條件為真的分支代碼

elif?判斷條件3;?then

條件為真的分支代碼

else

以上條件都為假的分支代碼

fi

例子

比較數字大小結果真假判斷

read?-p?"Please?input?nu:?"?nu

[[?$nu?=~?^[0-9]+$?]]?||?{?echo?"Your?input?is?not?num";exit?8;?}

if?[?"$nu"?-gt?90?];then

echo?"$nu?is?bigger?than?90"

elif?[?"$nu"?-lt?50?];then

echo?"$nu?is?less?than?50"

else

echo?"Your?input?$nu?is?between?range?50-90"

fi

執行命令結果真假判斷

read?-p?"please?input?ip:?"?ip

if??ping?-c?1?-W?1?$ip?&>/dev/null;?then

echo?"$ip?is?up"

elif?grep?"$ip"?/root/list?&>/dev/null

then

echo??"host?"$ip"?is?under?maitenance"

else??echo?"$ip?is?unexpectedly?down,please?check"

fi

3 條件判斷:case語句

語法如下

case?變量引用($var,注意有$符號引用)??in

PAT1)

分支1

;;

PAT2)

分支2

;;

......

*)

默認分支

;;

esac

這里的分支x可以是命令的組合,不是單純的一條命令

case支持glob風格的通配符:

*: 任意長度任意字符

?: 任意單個字符

[]:指定范圍內的任意單個字符

a|b: a或b,當匹配到不同的字符,但是要執行相同的分支命令是,可以用這個命令簡化判斷

例子

#!/bin/bash

read?-p?"Please?input?your?choice:?"?choice

final=`echo?"$choice"?|tr?[[:upper:]]?[[:lower:]]`

case?$final?in

y|yes)

echo?"You?input?"$choice",and?your?choice?is?yes"

;;

n|no)

echo?"You?input?"$choice",and?your?choice?is?no";

;;

y???es)

echo?"You?input?$choice,it?has?three?character?between?yes"

;;

[sunny])

echo?"You?input?$choice,it?only?has?one?character"

;;

*)

echo?"Your?choice?is?$choice,it?is?not?the?answer"

;;

esac

截圖如下

4 循環語句

將某代碼段重復運行多次,以下三個關鍵字for, while, until各自的語法構成不同的循環語句

其中

for默認將列表的值依次執行完成后退出

while和until有進入條件和退出條件

重復運行的次數有兩類

a.循環次數事先已知

b.循環次數事先未知

4.1 for 循環

4.1.1 for 常規的列表循環

語法如下:

for?變量名?(如?var,不需要加$引用變量值)?in?列表;do

循環體(命令組合)

done

for循環執行機制:

依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束

for循環 列表 生成方式:

(1) 直接給出列表

(2) 整數列表:

(a) {start..end}

(b) $(seq[start [step]] end)

(3) 返回列表的命令:$(COMMAND) 可以表達為`COMMAND`,反向單引號引起來

(4) 使用glob,如:*.sh

(5) 變量引用;$@, $*

4.1.2 例子:

4.1.2.1 直接給出列表型

i=1

for?var?in?a?b?c?d

do

echo?"$i?cycle?the?var?is?$var"

let?i++

done

4.1.2.2 整數列表:{start..end..step}型

如果不指定步進值(step),那么默認是步進1

i=1

for?var?in?{3..15..2}

do

echo?"$i?cycle?the?var?is?$var"

let?i++

done

4.1.2.3 整數列表:$(seq[start [step]] end) 型

#如果是 seq end? 從1開始遞增到end,每次增加1

#如果是 seq start end? 從start開始遞增到end,每次遞增1

#如果是 seq[start] [step] [end] 從start開始,每次遞增step,直到end

i=1

for?var?in?$(seq?3?2?9)

do

echo?"$i?cycle?the?var?is?$var"

let?i++

done

4.1.2.4 返回列表的命令 $(COMMAND)型

for?var?in?$(ls?/root/)

do

echo??"$i?file?is?"$var",?type?is?`file?/root/$var`"

let?i++

done

echo

4.1.2.5 使用glob,如:*.sh或/root/* 型

for?var?in?/root/*

do

echo??"$i?file?is?"$var",?type?is?`file?$var`"

let?i++

done

echo

4.1.2.6 變量引用;$@, $*型

for?var?in?$@

do

echo??"$i?cycle,and?now?para?is?$1,var?is?$var,\$@?is?$@"

let?i++

shift

done

echo

4.1.3 ?for循環的特殊格式:

語法如下

for?((控制變量初始化;條件判斷表達式;控制變量的修正表達式))

do

循環體

done

控制變量初始化:僅在運行到循環代碼段時執行一次

控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后再做條件判斷

雙小括號方法,即((…))格式,也可以用于算術運算

雙小括號方法也可以使bash Shell實現C語言風格的變量操作,如((I++))

該for循環的執行過程如下

進入循環的時候,先不判斷真假,直接執行 控制變量初始化

然后執行? 條件判斷表達式 ,會判斷真假 ,條件為真,開始進入循環

執行循環

執行完循環后

執行? 控制變量的修正表達式

然后條件判斷表達式

執行? 控制變量的修正表達式

然后條件判斷表達式,

。。。。。。。

直到不滿足條件判斷表達式這個條件后退出循環

邏輯圖如下

例子

read?-p?"Please?input?your?nu?to?cal?1+2+...+nu:?"?nu

s=0

for?((i=1;i<=$nu;i=i+1))

do

s=$(($s+$i))

echo?"it?is?the?$i?cycle."

done

echo?"1+2...+$nu=$s"

以上腳本通過調試 bash -x 結果截圖如下

4.2 while循環

4.2.1 語法

while?CONDITION(條件判斷);?do

循環體

done

CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;

條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環

因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

進入條件:CONDITION為true

退出條件:CONDITION為false

4.2.2 while循環的特殊用法:

4.2.2.1 讀入文件

while?read?line;?do??//注意,這里的line只是變量,可以自己命名

循環體

done?

依次讀取/PATH/FROM/SOMEFILE這個文件中的每一行,且將行賦值給變量line,每次讀入一行進入循環,進行相應的處理

4.2.2.2 將結果傳入while

將命令的結果傳給while,用管道來傳,每次讀入命令結果得到一行

命令?|?while?read?變量; do

循環體

其中管道命令只能處理標準輸出,所以要確保命令有標準輸出

done

4.2.2.3 創建無限循環

while?true;?do

循環體

done

4.2.3例子

4.2.3.1 普通循環 九九乘法表

i=1

while?[?"$i"?-lt?10?];do

for?((?j=1;j<="$i";j++))?do

echo?-e?-n?"$i*$j=$[?$i*$j?]\t"

done

echo

let?i++

done

4.2.3.2 讀入文檔內容

while 每一次會把輸入的文檔/root/tt的每一行輸入進行處理,等這行完成處理后,

再輸入文檔的下一行,直到所有的循環都結束

i=1

while?read?line;do

echo?"$i?cycle?is?\$line?is?"

let?i++

echo?"$line"?|?grep?gt

echo?"$line"?|?sed?-nr?'s/useage=.*/for?test?sed/p'

echo

done

4.2.3.3 管道輸入

以下命令將 df|grep /dev/sd 的結果通過管道一行一行傳入給到變量line。然后進入循環做處理

df|grep?/dev/sd??|?while?read?line;do

dev=`echo?"$line"|?cut?-d?"?"?-f1`

use=`echo?"$line"|?sed?-r?'s/.*?([0-9]+)%.*/\1/'`

if?[?"$use"?-gt?3?];then

echo?"Warning?"$dev"'s?usage?is?over?3%,it?is?$use,please?check"

else

echo?""$dev"'s?usage?is?safe,it?is?$use"

fi

done

4.2.3.4 創建循環體

每個兩秒打印hello

while?true;do

echo?hello

sleep?2

done

4.3 until

4.3.1 語法

until?CONDITION;?do

循環體

done

進入條件:CONDITION 為false

退出條件:CONDITION 為true

until就是和while相反,一般可以用until實現的循環,都可以用while來實現,所以until可以了解一下即可。

創建無限循環

until?false;?do

循環體

Done

4.3.2 例子

4.3.2.1 until普通循環

當i大于6的時候進入循環,小于或者等于6的時候退出循環

i=10

until?[?$i?-le?6?];do

echo?\$i?is?$i,bigger?than?6

let?i--

echo?"after?i--,now?i?is?$i"

echo

done

4.3.2.2 無效循環的腳本

打印it is false,然后睡2秒

until?false?;do

echo?"it?is?false"

sleep?2

done

5 小結

使用什么語法進行循環,或者是條件選擇或者條件判斷,都要根據具體情況來定,同時也是根據個人寫腳本的習慣而定,比如有些人就喜歡用while來寫循環語句,但是有一個原則就是,盡量把算法定好,防止多次的循環,占用大量的資源,對系統造成負擔。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的linux循环条件,shell脚本编写 之 条件选择,条件判断,循环语句的全部內容,希望文章能夠幫你解決所遇到的問題。

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