欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell 流程控制語(yǔ)句的具體使用

 更新時(shí)間:2023年05月09日 11:22:59   作者:逆風(fēng)飛翔的小叔  
本文主要介紹了shell 流程控制語(yǔ)句的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

可以說(shuō),在任何一門(mén)編程語(yǔ)言中都離不開(kāi)流程控制語(yǔ)句,使用流程控制語(yǔ)句可以幫助程序處理各類復(fù)雜的操作,常用的流程控制語(yǔ)句,比如: if-else,while,for循環(huán)等,在linux 的shell 編程語(yǔ)法中,也提供了豐富的流程控制語(yǔ)句,接下來(lái)將一一做詳細(xì)的說(shuō)明。

一、if - else 語(yǔ)句

if 語(yǔ)法

if  條件
then
    命令
fi

if - else 語(yǔ)法

if  條件
then
   命令
else
   命令
fi

if elif else 語(yǔ)法

if  條件1
then
   命令1
elif 條件2
then
    命令2
elif 條件3
then
    命令3
……
else
   命令N
fi

接下來(lái)用一個(gè)簡(jiǎn)單的案例完整演示下這幾種if 語(yǔ)法的使用

案例需求描述

提示"請(qǐng)輸入考試成績(jī):" 接收用戶輸入的一個(gè)成績(jī), 之后使用if else條件句判斷
要求1: 小于 60 輸出"不及格"
要求2: 大于等于70 并且 小于80 輸出"中等"
要求3: 大于等于80 并且 小于90 輸出"良好"
要求4: 大于等于90 并且 小于等于100 輸出"優(yōu)秀"
要求5: 以上不符合輸出"成績(jī)不合法"

shell 腳本內(nèi)容

#!/bin/bash
read -p "請(qǐng)輸入考試成績(jī):" score
if (( $score < 60 )); then
    echo "不及格"
elif (( $score >= 60 && $score < 70 )); then
    echo "及格"
elif (( $score >= 70 && $score < 80 )); then
    echo "中等"
elif (( $score >= 80 && $score < 90 )); then
    echo "良好"
elif (( $score >= 90 && $score <= 100 )); then
    echo "優(yōu)秀"
else
    echo "成績(jī)不合法"
fi

執(zhí)行上面的shell ,觀察輸出效果

補(bǔ)充說(shuō)明

(())是一種數(shù)學(xué)計(jì)算命令,它除了可以進(jìn)行最基本的加減乘除運(yùn)算,還可以進(jìn)行大于、小于、等于等關(guān)系運(yùn)算,以及與、或、非邏輯運(yùn)算。當(dāng) a 和 b 相等時(shí),(( $a == $b ))判斷條件成立,進(jìn)入 if,執(zhí)行 then 后邊的 echo 語(yǔ)句

二、case語(yǔ)句

shell 中case語(yǔ)句為多選擇語(yǔ)句??梢杂胏ase語(yǔ)句匹配一個(gè)值與一個(gè)模式,如果匹配成功,執(zhí)行相匹配的命令,當(dāng)分支較多,并且判斷條件比較簡(jiǎn)單時(shí),使用 case in 語(yǔ)句就比較方便了。

case 語(yǔ)法結(jié)構(gòu)

case 值 in
匹配模式1)
    命令1
    命令2
    ...
    ;;
匹配模式2)
    命令1
    命令2
    ...
    ;;
*)
    命令1
    命令2
    ...
    ;;
esac

關(guān)于case 語(yǔ)法的幾點(diǎn)補(bǔ)充說(shuō)明

  • 每一匹配模式必須以右括號(hào)結(jié)束;
  • 取值可以為變量或常數(shù);
  • 匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開(kāi)始執(zhí)行直至 ;;(類似break, 不可以替代否則語(yǔ)法報(bào)錯(cuò));
  • 取值將檢測(cè)匹配的每一個(gè)模式。一旦模式匹配,則執(zhí)行完匹配模式相應(yīng)命令后不再繼續(xù)其他模式。如果無(wú)一匹配模式,使用星號(hào) * 捕獲該值,再執(zhí)行后面的命令;
  • case、in 和 esac 都是 Shell 關(guān)鍵字, esac就是case的反寫(xiě)在這里代表結(jié)束case;
  • 匹配模式: 可以是一個(gè)數(shù)字、一個(gè)字符串,甚至是一個(gè)簡(jiǎn)單正則表達(dá)式;

簡(jiǎn)單正則表達(dá)式支持如下通配符

格式說(shuō)明
*表示任意字符串。
[abc]表示 a、b、c 三個(gè)字符中的任意一個(gè)。比如,[15ZH] 表示 1、5、Z、H 四個(gè)字符中的任意一個(gè)。
[m-n]表示從 m 到 n 的任意一個(gè)字符。比如,[0-9] 表示任意一個(gè)數(shù)字,[0-9a-zA-Z] 表示字母或數(shù)字。
|表示多重選擇,類似邏輯運(yùn)算中的或運(yùn)算。比如,abc | xyz 表示匹配字符串 "abc" 或者 "xyz"。

case 語(yǔ)句案例演示

#!/bin/bash
read -p "請(qǐng)輸入一個(gè)0~7的數(shù)字:" number
case $number in
1)
    echo "星期一"
	;;
2)
    echo "星期二"
    ;;
3)
    echo "星期三"
    ;;
4)
    echo "星期四"
    ;;
5)
    echo "星期五"
    ;;
6)
    echo "星期六"
    ;;
0|7)
    echo "星期日"
    ;;
*)
    echo "您輸入的數(shù)字無(wú)效"
    ;; 
esac

執(zhí)行上面的shell腳本,觀察輸出效果

三、while 語(yǔ)句

while 語(yǔ)法

while 條件
do
	命令1
	命令2
	...
	continue; # 結(jié)束當(dāng)前這一次循環(huán), 進(jìn)入下一次循環(huán)
	break; # 結(jié)束當(dāng)前循環(huán)
done

一個(gè)簡(jiǎn)單的案例

#!/bin/bash
read -p "請(qǐng)輸入一個(gè)數(shù)字:" number
i=0
while [[ $i < $number ]]
do
  echo "hello world :" $i
  ((i++))
done

執(zhí)行上面的shell 腳本,觀察輸出效果

使用while語(yǔ)句可以實(shí)現(xiàn)無(wú)限循環(huán),寫(xiě)法如下

while :
do
    command
done

或者下面這樣

while true
do
    command
done

四、until語(yǔ)句

until 也屬于循環(huán)結(jié)構(gòu)語(yǔ)句, until 循環(huán)與 while 循環(huán)在處理方式上剛好相反, 循環(huán)條件為false會(huì)一致循環(huán), 條件為true停止循環(huán)。

until 語(yǔ)法

條件如果返回值為1(代表false),則繼續(xù)執(zhí)行循環(huán)體內(nèi)的語(yǔ)句,否則跳出循環(huán)。

until 條件
do
    命令
done

案例演示

#!/bin/bash
read -p "請(qǐng)輸入一個(gè)數(shù)字:" number
i=0
until [[ ! $i < $number ]]
do
  echo "hello world : " $i
  ((i++))
done

執(zhí)行上面的shell腳本,觀察輸出效果

五、for語(yǔ)句

for 語(yǔ)法寫(xiě)法一

for var in item1 item2 ... itemN
do
    命令1
    命令2
    ...
done

1、var是循環(huán)變量

2、item1 item2 ... itemN 是循環(huán)的范圍

演示案例

#!/bin/bash
for i in 1 2 3 4 5
do
 echo "hello world :" $i
done

執(zhí)行上面的腳本,觀察輸出效果

for 語(yǔ)法寫(xiě)法二

語(yǔ)法結(jié)構(gòu)

for var in {start..end}
do
	命令
done

start: 循環(huán)范圍的起始值,必須為整數(shù)

end: 循環(huán)范圍的結(jié)束值, 必須為整數(shù)

案例演示

#! /bin/bash
for i in {1..5}; do echo $i; done

運(yùn)行這段腳本,觀察輸出效果

for 語(yǔ)法寫(xiě)法三

語(yǔ)法結(jié)構(gòu)

這種寫(xiě)法相信做過(guò)應(yīng)用端編程開(kāi)發(fā)的同學(xué)更熟悉點(diǎn)吧

for((i=start;i<=end;i++))
do
	命令
done

也可以簡(jiǎn)寫(xiě)成一行

for((i=start;i<=end;i++)); do 命令; done

案例演示

#! /bin/bash
for((i=0;i<=3;i++)); do echo "hello word : " $i; done

運(yùn)行上面的sql,觀察執(zhí)行效果

無(wú)限for循環(huán)

在某些特殊的場(chǎng)景下,需要程序無(wú)限循環(huán)下去,可以參考下面的寫(xiě)法

for((;;)); do 命令; done

六、select 語(yǔ)句

select in 循環(huán)用來(lái)增強(qiáng)交互性,它可以顯示出帶編號(hào)的菜單,用戶輸入不同的編號(hào)就可以選擇不同的菜單,并執(zhí)行不同的功。select in 是 Shell 獨(dú)有的一種循環(huán),非常適合終端(Terminal)這樣的交互場(chǎng)景, 其他語(yǔ)言沒(méi)有。

select 語(yǔ)法

select var in menu1 menu2 ...
do
    命令
done

注意:

1、select 是無(wú)限循環(huán)(死循環(huán)),輸入空值,或者輸入的值無(wú)效,都不會(huì)結(jié)束循環(huán),只有遇到 break 語(yǔ)句,或者按下 Ctrl+D 組合鍵才能結(jié)束循環(huán);

2、執(zhí)行命令過(guò)程中: 終端會(huì)輸出 #? 代表可以輸入選擇的菜單編號(hào);

案例演示1

#!/bin/bash
echo "你的愛(ài)好是什么?"
select hobby in "編程" "游戲" "籃球" "游泳"
do
	echo $hobby
    break
done
echo "你的愛(ài)好是:${hobby}"

運(yùn)行上面的shell觀察執(zhí)行效果

案例演示2

#!/bin/bash
echo "你的愛(ài)好是什么"
select hobby in "編程" "游戲" "籃球" "游泳"
do
    case $hobby in
        "編程")
            echo "編程,多敲代碼"
            break
            ;;
        "游戲")
            echo "少玩游戲"
            break
            ;;
        "籃球"|"游泳")
            echo "運(yùn)動(dòng)有利健康"
            break
            ;;
        *)
            echo "輸入錯(cuò)誤,請(qǐng)重新輸入"
    esac
done

運(yùn)行上面的shell,觀察執(zhí)行效果

接下來(lái),補(bǔ)充幾個(gè)比較重要的關(guān)于shell操作中的知識(shí)點(diǎn)

八、文件測(cè)試 test

在使用shell編程過(guò)程中,經(jīng)常涉及到對(duì)各類文件,文件目錄的操作,比如判斷文件目錄是否存在,文件里面的內(nèi)容是否存在等,就需要用到文件測(cè)試相關(guān)的命令,下面總結(jié)的是和文件測(cè)試操作相關(guān)的語(yǔ)法。

參數(shù)說(shuō)明
==-e 文件名==exists, 如果文件存在則為真
==-r 文件名==read,如果文件存在且可讀則為真
==-w 文件名==write,如果文件存在且可寫(xiě)則為真
==-x 文件名==execute,如果文件存在且可執(zhí)行則為真
==-s 文件名==string,如果文件存在且至少有一個(gè)字符則為真
==-d 文件名==directory,如果文件存在且為目錄則為真
-f 文件名file,如果文件存在且為普通文件則為真
-c 文件名character,如果文件存在且為字符型特殊文件則為真
-b 文件名如果文件存在且為塊特殊文件則為真

案例演示

#!/bin/bash
if test -w ./if.sh
then
    echo '文件已存在并且可寫(xiě)!'
else
    echo '文件不存在或不可寫(xiě)!'
fi
if test -e ./if.sh -a -e ./control2.sh
then
    echo '兩個(gè)文件都存在!'
else
    echo '可能有一個(gè)或兩個(gè)文件不存在'
fi

運(yùn)行上面的shell腳本,觀察輸出效果

補(bǔ)充說(shuō)明

Shell提供了與( -a )、或( -o )、非( ! )三個(gè)邏輯操作符用于將測(cè)試條件連接起來(lái),其優(yōu)先級(jí)為:"!"最高,"-a"次之,"-o"最低, 語(yǔ)法,如下:

test 條件1 -o 條件2 -a 條件3 ...

九、整數(shù)和字符串比較 test

Shell中的 test 命令用于檢查某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件三個(gè)方面的測(cè)試。

功能與[]一樣。

整數(shù)比較測(cè)試

if test 數(shù)字1 options 數(shù)字2 
then  
...
fi

options具體如下

參數(shù)說(shuō)明
-eq等于則為真
-ne不等于則為真
-gt大于則為真
-ge大于等于則為真
-lt小于則為真
-le小于等于則為真

整數(shù)比較具體案例

#!/bin/bash
num1=1 num2=1 num3=2
echo "num1=${num1},num2=${num2},num3=${num3}"
if test $num1 -eq $num2
then
    echo 'num1和num2兩個(gè)數(shù)相等!'
else
    echo 'num1和num2兩個(gè)數(shù)不相等!'
fi
if test $num2 -eq $num3
then
    echo 'num2和num3兩個(gè)數(shù)相等!'
else
    echo 'num2和num3兩個(gè)數(shù)不相等!'
fi

運(yùn)行上面的shell,觀察執(zhí)行效果

字符串比較測(cè)試

語(yǔ)法結(jié)構(gòu)

參數(shù)說(shuō)明
= 或 ==等于, 等于返回0代表成功,否則返回1代表失敗
!=不等于
\<小于
\>大于
-z 字符串字符串的長(zhǎng)度為零則為真
-n 字符串字符串的長(zhǎng)度不為零則為真

字符串比較具體案例

#!/bin/bash
str1="itheima" str2="itcast" str3=""
echo "str1=${str1},str2=${str2},str3=${str3}"
if test $str1 = $str2
then
    echo 'str1和str2兩個(gè)字符串相等'
else
    echo 'str1和str2兩個(gè)字符串不相等'
fi
if test $str1 \> $str2
then
    echo 'str1大于str2'
else
    echo 'str1小于str2'
fi
if test -z $str2
then
	echo "str2字符串長(zhǎng)度為0"
else
	echo "str2字符串長(zhǎng)度不為0"
fi
if test -z $str3
then
	echo "str3字符串長(zhǎng)度為0"
else
	echo "str3字符串長(zhǎng)度不為0"
fi

執(zhí)行上面的shell,觀察輸出效果

到此這篇關(guān)于shell 流程控制語(yǔ)句的具體使用的文章就介紹到這了,更多相關(guān)shell 流程控制語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論