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

Shell編程控制結(jié)構(gòu)的基本使用

 更新時(shí)間:2021年11月24日 10:32:25   作者:Jake Tian  
本文主要介紹了Shell編程控制結(jié)構(gòu)的基本使用,主要介紹了幾種常用的控制語句,具有一定的參考價(jià)值,感興趣的可以了解一下

if-then-else分支結(jié)構(gòu)

if-then-else是一種基于條件測(cè)試結(jié)果的流程控制結(jié)構(gòu)。如果測(cè)試結(jié)果為真,則執(zhí)行控制結(jié)構(gòu)中相應(yīng)的命令列表;否則將進(jìn)行另外一個(gè)條件測(cè)試或者退出該控制結(jié)構(gòu)。

if-then-else語法格式:

if 條件1
 then 命令列表1
elif 條件2
 then 命令列表2
else 命令列表3
fi

執(zhí)行邏輯流程圖

說明:當(dāng)條件1成立時(shí),則執(zhí)行命令列表1并退出if-then-else控制結(jié)構(gòu);如果條件2成立,則執(zhí)行命令列表2并退出if-then-else控制結(jié)構(gòu);否則執(zhí)行命令列表3并退出if-then-else控制結(jié)構(gòu)。在同一個(gè)if-then-else結(jié)構(gòu)中只能有一條if語句和一條else語句,eilf語句可以有多條。其中if語句是必須的,elif和else語句是可選的。

Shell腳本首先判斷文件test1是否可讀,如果是,則輸出 is readable !的提示信息;否則不進(jìn)行任何動(dòng)作。

[root@localhost 20190105]# vi test.sh 
filename=test1
if [ -r $filename ]            //輸出test1可讀則輸出信息
then
echo $filename' is readable !'
fi
[root@localhost 20190105]# sh test.sh 
test1 is readable !

Shell腳本會(huì)判斷number變量是否等于100,如果是,則輸出 The number is equal 100 !的提示;否則輸出 The number is not equal 100 !。

[root@localhost 20190105]# vi number.sh
number=200
if [ $number -eq 100 ]                 //如果number等于100則輸出“The number is equal 100 !”提示
then
       echo 'The number is equal 100 !'
else                            //否則輸出“The number is not equal 100 !”提示
       echo 'The number is not equal 100 !'
fi
[root@localhost 20190105]# sh number.sh 
The number is not equal 100 !

Shell腳本首先判斷number變量是否小于10,如果是則輸出 The number < 10 !;否則,判斷number變量是否大于等于10且小于20。如果是則輸出 10 =< The number < 20 !;否則,判斷 number變量是否大于等于20且小于30。如果是,則輸出 20 =< The number < 30 !;否則,輸出 30 <= The number !。

[root@localhost 20190105]# vi number1.sh
number=25
if [ $number -lt 10 ]              //如果number小于10
then
       echo 'The number < 10 !'
elif [ $number -ge 10 -a $number -lt 20 ] //如果number大于等于10且小于20
then
       echo '10 =< The number < 20 !'
elif [ $number -ge 20 -a $number -lt 30 ] //如果number大于等于20且小于30
then
       echo '20 =< The number < 30 !'
else                         //除上述3種情況以外的其他情況
       echo '30 <= The number !'
fi
[root@localhost 20190105]# sh number1.sh 
20 =< The number < 30 !

case分支結(jié)構(gòu)

if-then-else結(jié)構(gòu)能夠支持多路的分支(多個(gè)elif語句),但如果有多個(gè)分支,那么程序就會(huì)變得難以閱讀。case結(jié)構(gòu)提供了實(shí)現(xiàn)多路分支的一種更簡(jiǎn)潔的方法。

case語法格式:

case 值或變量 in
模式1)
 命令列表1
 ;;
模式2)
 命令列表2
 ;;
...
esac

case語句后是需要進(jìn)行測(cè)試的值或者變量。Shell會(huì)順序地把需要測(cè)試的值或變量與case結(jié)構(gòu)中指定的模式逐一進(jìn)行比較,當(dāng)匹配成功時(shí),則執(zhí)行該模式相應(yīng)的命令列表并退出case結(jié)構(gòu)(每個(gè)命令列表以兩個(gè)分號(hào)“;;”作為結(jié)束)。如果沒有發(fā)現(xiàn)匹配的模式,則會(huì)在esac后退出case結(jié)構(gòu)。

如下該腳本對(duì)number變量的值進(jìn)行測(cè)試,與模式匹配的話,則輸出相應(yīng)的信息。

[root@localhost 20190105]# vi case.sh
number=66
case $number in
33) echo 'The number is 33 !'       //number 變量等于 33
;;
44) echo 'The number is 44 !'       //number 變量等于 44
;;
55) echo 'The number is 55 !'       //number 變量等于 55
;;
66) echo 'The number is 66 !'       //number 變量等于 66
;;
77) echo 'The number is 77 !'       //number 變量等于 77
;;
88) echo 'The number is 88 !'       //number 變量等于 88
;;
esac                            //結(jié)束 case 結(jié)構(gòu)
[root@localhost 20190105]# sh case.sh 
The number is 66 !                   //命令的輸出結(jié)果

for循環(huán)結(jié)構(gòu)

for循環(huán)結(jié)構(gòu)可以重復(fù)執(zhí)行一個(gè)命令列表,基于for語句中所指定的值列表決定是繼續(xù)循環(huán)還是跳出循環(huán)。for循環(huán)在執(zhí)行命令列表前會(huì)先檢查值列表中是否還有未被使用的值,如有的話,則把該值賦給for語句中指定的變量,然后執(zhí)行循環(huán)結(jié)構(gòu)中的命令列表。如此循環(huán),直到值列表中的所有值都被使用。

for循環(huán)結(jié)構(gòu)語法:

for 變量名 in 值列表
do
 命令1
 命令2
 命令3
 ...
done

以常量作為值列表

使用變量1、2、3、4、5、6作為值列表,for循環(huán)中只是簡(jiǎn)單的把值列表中的值進(jìn)行輸出。

[root@localhost 20190105]# vi for1.sh
#!/bin/bash
for n in 1 2 3 4 5 6      //循環(huán)讀取 1-6
do
       echo $n
done
由運(yùn)行結(jié)果可以非常清楚的了解for循環(huán)的運(yùn)行過程。
[root@localhost 20190105]# sh for1.sh
1
2
3
4
5
6

以變量作為值列表

值列表可以是一個(gè)環(huán)境變量。

[root@localhost 20190105]# vi for2.sh
#!/bin/bash
values="1 2 3 4 5 6"         //對(duì) values 變量賦值
for n in $values            //循環(huán)讀取 values 變量中的值
do
       echo $n
done
[root@localhost 20190105]# sh for2.sh
1
2
3
4
5
6

以命令運(yùn)行結(jié)果作為值列表

Shell支持使用命令的運(yùn)行結(jié)果作為for循環(huán)的值列表。在Shell中通過"`命令`"或者“$(命令)”來引用命令的運(yùn)行結(jié)果。將會(huì)以ls命令的結(jié)果作為值列表。

[root@localhost 20190105]# vi for3.sh
#!/bin/bash
for n in `ls`         //循環(huán)讀取 ls 命令的輸出結(jié)果
do
       echo $n      //輸出變量 n 的值
done
[root@localhost 20190105]# sh for3.sh 
case.sh
for1.sh
for2.sh
for3.sh
HelloWorld.sh
number1.sh
number.sh
test1
test2
test.sh

expr命令計(jì)算器

expr是一個(gè)命令行的計(jì)數(shù)器,用于加、減、乘、除運(yùn)算。

[root@localhost 20190105]# expr 123 + 456 - 78  //123 加 456 減 78 等于 501
501
[root@localhost 20190105]# expr 9 \* 8       //9 乘以 8 等于 72
72
[root@localhost 20190105]# expr 666 / 8      // 666 除以 8 等于 83
83

在循環(huán)結(jié)構(gòu)中,expr 會(huì)被用作增量計(jì)算,初始值為10,每次使用expr增加加11/12。注意:這里使用expr命令時(shí)都使用的是反撇號(hào),不是單引號(hào)。

[root@localhost 20190105]# number=10
[root@localhost 20190105]# number=`expr $number + 11` //對(duì)number變量的值加11
[root@localhost 20190105]# echo $number
21
[root@localhost 20190105]# number=`expr $number + 12` //對(duì)number變量的值加12
[root@localhost 20190105]# echo $number
33

while循環(huán)結(jié)構(gòu)

while結(jié)構(gòu)會(huì)循環(huán)執(zhí)行一系列的命令,并基于while語句中所指定的測(cè)試條件決定是繼續(xù)循環(huán)還是跳出循環(huán)。如果條件為真,則while循環(huán)會(huì)執(zhí)行結(jié)構(gòu)中的一系列命令。命令執(zhí)行完畢后,控制返回循環(huán)頂部,從頭開始重新執(zhí)行直到測(cè)試條件為假。

while循環(huán)結(jié)構(gòu)的語法:

while 條件
do
 命令1
 命令2
 ...
done

循環(huán)增量計(jì)算:是在while循環(huán)中使用增量計(jì)算,其運(yùn)行結(jié)果如下。

[root@localhost 20190105]# vi while1.sh
#!/bin/bash
count=0             //將 count 變量置 0 
#當(dāng) count 變量小于5時(shí)繼續(xù)循環(huán)
while [ $count -lt 5 ]
do
#每循環(huán)一次,count 變量的值加1
       count=`expr $count + 1`
       echo $count
done
[root@localhost 20190105]# sh while1.sh
1
2
3
4
5
[root@localhost 20190105]#

循環(huán)從文件中讀取內(nèi)容

現(xiàn)有一文件,保存了學(xué)生的成績(jī)信息,其中第一列是學(xué)生名,第二列是學(xué)生的成績(jī)。

[root@localhost 20190105]# vi students.log
jake 85
tom  68
lucy 79
sam  95

現(xiàn)在要對(duì)以上文件中的學(xué)生成績(jī)進(jìn)行統(tǒng)計(jì),計(jì)算學(xué)生的數(shù)量以及學(xué)生的平均成績(jī)。通過 while read 語句讀取變量 STUDENT 和 SCORE 的內(nèi)容,然后在 while 循環(huán)中通過 expr 命令計(jì)算學(xué)生總數(shù)和學(xué)生總成績(jī),最后計(jì)算平均值并輸出。執(zhí)行該腳本時(shí)需要把 students.log 文件的內(nèi)容重定向到 while2.sh腳本中。

[root@localhost 20190105]# vi while2.sh
#!/bin/bash
TOTAL=0            //將變量 TOTAL 置 0
COUNT=0            //將變量 COUNT 置 0
#循環(huán)讀取數(shù)據(jù)
while read STUDENT SCORE
do
#計(jì)算總成績(jī)
       TOTAL=`expr $TOTAL + $SCORE`
#計(jì)算學(xué)生數(shù)
       COUNT=`expr $COUNT + 1`
done
#計(jì)算平均成績(jī)
AVG=`expr $TOTAL / $COUNT`
echo 'There are '$COUNT' students , the avg score is '$AVG
[root@localhost 20190105]# sh while2.sh < students.log
There are 4 students , the avg score is 81
[root@localhost 20190105]#

until循環(huán)結(jié)構(gòu)

until是除 for 和 while以外的一種循環(huán)結(jié)構(gòu),它會(huì)循環(huán)執(zhí)行一系列命令直到條件為真時(shí)停止。

until循環(huán)結(jié)構(gòu)語法:

until 條件
do
 命令1
 命令2
 ...
done

until循環(huán)中讀取用戶輸入的內(nèi)容并顯示到屏幕上,當(dāng)用戶輸入的內(nèi)容為 exit 時(shí)結(jié)束循環(huán)。

[root@localhost 20190105]# vi until1.sh
#!/bin/bash
xxx=""
#當(dāng) ans 變量的值為 exit 時(shí)結(jié)束循環(huán)
until [ "$xxx" = exit ]
do
#讀取用戶的輸入到ans變量
       read xxx
#如果用戶輸入的不是 exit 則輸出用戶的輸入
       if [ "$xxx" != exit ]
       then
               echo 'The user input is : '$xxx
#否則退出循環(huán)
       else
               echo 'Exit the script.'
       fi
done
[root@localhost 20190105]# sh until1.sh
hello
The user input is : hello
welcome to HongKong!
The user input is : welcome to HongKong!
exit
Exit the script.
[root@localhost 20190105]#

到此這篇關(guān)于Shell編程控制結(jié)構(gòu)的基本使用的文章就介紹到這了,更多相關(guān)Shell 控制結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 查看linux服務(wù)器上jdk的安裝路徑方法

    查看linux服務(wù)器上jdk的安裝路徑方法

    這篇文章主要介紹了查看linux服務(wù)器上jdk的安裝路徑方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • shell字符串比較判斷是否為數(shù)字

    shell字符串比較判斷是否為數(shù)字

    本文闡述:shell中整數(shù)比較方法及字符串的比較方法,如等于,不等于,大于,大于等于,小于,等等
    2013-01-01
  • 批量修改ssh配置的expect腳本

    批量修改ssh配置的expect腳本

    公司服務(wù)器一般通過ssh進(jìn)行遠(yuǎn)程管理。以前大家登錄的時(shí)候,都是隨意選內(nèi)外網(wǎng)IP進(jìn)入。王總接手后,說這事隱患太大了,必須禁了外網(wǎng)ssh
    2013-03-03
  • Linux nohup 命令用法詳解

    Linux nohup 命令用法詳解

    nohup命令是Linux/Unix系統(tǒng)中非常有用的命令之一,它允許您在后臺(tái)運(yùn)行命令或腳本,并且在退出終端會(huì)話后仍然保持運(yùn)行,這篇文章主要介紹了Linux nohup 命令詳解,需要的朋友可以參考下
    2023-08-08
  • Linux 下vim使用教程

    Linux 下vim使用教程

    Vim是從 vi 發(fā)展出來的一個(gè)文本編輯器。這篇文章給大家介紹Linux 下vim使用教程,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-07-07
  • Shell中字符串排序的幾種方法

    Shell中字符串排序的幾種方法

    今天小編就為大家分享一篇關(guān)于Shell中字符串排序的幾種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Linux?du命令實(shí)現(xiàn)根據(jù)文件或者文件夾大小排序輸出

    Linux?du命令實(shí)現(xiàn)根據(jù)文件或者文件夾大小排序輸出

    Linux是一個(gè)強(qiáng)大的操作系統(tǒng),廣泛用于服務(wù)器和個(gè)人計(jì)算機(jī),本文主要來和大家聊聊如何利用du命令實(shí)現(xiàn)根據(jù)文件或者文件夾大小排序輸出,感興趣的可以了解下
    2023-09-09
  • Linux下find和grep常用命令及區(qū)別介紹

    Linux下find和grep常用命令及區(qū)別介紹

    在使用linux時(shí),經(jīng)常需要進(jìn)行文件查找。其中查找的命令主要有find和grep,這兩個(gè)命令還是有區(qū)別的,下面通過本文給大家講解Linux下find和grep常用命令及區(qū)別介紹,需要的的朋友參考下吧
    2017-07-07
  • Shell自動(dòng)化配置SSH免密登錄和取消SSH免密配置腳本

    Shell自動(dòng)化配置SSH免密登錄和取消SSH免密配置腳本

    本文主要介紹了Shell自動(dòng)化配置SSH免密登錄和取消SSH免密配置腳本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • shell腳本實(shí)現(xiàn)分日志級(jí)別輸出的方法

    shell腳本實(shí)現(xiàn)分日志級(jí)別輸出的方法

    下面小編就為大家?guī)硪黄猻hell腳本實(shí)現(xiàn)分日志級(jí)別輸出的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03

最新評(píng)論