[Shell]if、for、while流程語句以及整數字串判斷比較的執行個體詳解

來源:互聯網
上載者:User

[Shell]if、for、while流程語句以及整數字串判斷比較的執行個體詳解

前言:

實際上Shell是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到核心。不僅如此,Shell有自己的程式設計語言用於對命令的編輯,它允許使用者編寫由shell命令組成的程式。Shell程式設計語言具有普通程式設計語言的很多特點,比如它也有迴圈結構和分支控制結構等,用這種程式設計語言編寫的Shell程式與其他應用程式具有同樣的效果。

一,shell的流程語句1,條件陳述式if else if

範例程式碼:

[root@squid-2 script]# cat s1.sh

#!/bin/bash

echo "Please choose project:"

echo "1:zhu 2:sha"

read project_no

if [ $project_no = "1" ];then

echo "111111"

elif [ $project_no = "2" ];then

echo "222222"

else echo "error"

fi

[root@squid-2 script]#

執行過程如下:

[root@squid-2 script]# sh s1.sh

Please choose project:

1:zhu 2:sha

1

111111

[root@squid-2 script]# sh s1.sh

Please choose project:

1:zhu 2:sha

2

222222

[root@squid-2 script]# sh s1.sh

Please choose project:

1:zhu 2:sha

3

error

[root@squid-2 script]#

2,for 迴圈2.1 for i in

指令碼如下:

[root@squid-2 script]# cat host_list.txt

192.168.1.10

192.168.1.11

192.168.1.12

192.168.1.13

[root@squid-2 script]#

測試執行結果:

[root@squid-2 script]# sh s21.sh

the host ip address is: 192.168.1.10

the host ip address is: 192.168.1.11

the host ip address is: 192.168.1.12

the host ip address is: 192.168.1.13

[root@squid-2 script]#

2.2 for((賦值;條件;運算語句))

指令碼代碼:

[root@squid-2 script]# cat s22.sh

for((i=1;i<=10;i++));do

echo "the loop number i: $i";

done;

[root@squid-2 script]#

執行結果:

[root@squid-2 script]# sh s22.sh

the loop number i: 1

the loop number i: 2

the loop number i: 3

the loop number i: 4

the loop number i: 5

the loop number i: 6

the loop number i: 7

the loop number i: 8

the loop number i: 9

the loop number i: 10

[root@squid-2 script]#

3,while迴圈使用

條件陳述式結構:

while

do

action

done;

測試指令碼:

[root@squid-2 script]# cat s3.sh

#!/bin/sh

i=10;

while [[ $i -gt 5 ]];do

echo"the loop number of while case is: $i";

((i--));

done;

[root@squid-2 script]

執行結果:

[root@squid-2 script]# sh s3.sh

the loop number of while case is: 10

the loop number of while case is: 9

the loop number of while case is: 8

the loop number of while case is: 7

the loop number of while case is: 6

[root@squid-2 script]#

4,until迴圈語句

樣本指令碼:

[root@squid-2 script]# cat s4.sh

#!/bin/sh

a=1;

until [[ $a -gt 6 ]];do

echo"the until number is: $a";

((a++));

done;

[root@squid-2 script]#

執行結果:

[root@squid-2 script]# sh s4.sh

the until number is: 1

the until number is: 2

the until number is: 3

the until number is: 4

the until number is: 5

the until number is: 6

[root@squid-2 script]#

5,shell選擇語句5.1,使用case選擇語句使用(case/esac)

文法結構:

case $arg in

pattern | sample) # arg in pattern or sample

;;

pattern1) # arg in pattern1

;;

*) #default

;;

esac

說明:pattern1 是Regex,可以用下面字元:

* 任意字串

? 任意字元

[abc] a, b, 或c三字元其中之一

[a-n] 從a到n的任一字元

| 多重選取

 

代碼指令碼:

[root@squid-2 script]# cat s51.sh

#!/bin/sh

case $1 in

start | begin)

echo "start something"

;;

stop | end)

echo "stop something"

;;

*)

echo "Ignorant"

;;

esac

[root@squid-2 script]#

PS:執行結果,這裡需要帶入參數,參數值就在)前面的start、begin、stop、end之內,如果帶入別參數,則返回"Ignorant":

[root@squid-2 script]# sh s51.sh start

start something

[root@squid-2 script]# sh s51.sh begin

start something

[root@squid-2 script]# sh s51.sh end

stop something

[root@squid-2 script]# sh s51.sh stop

stop something

[root@squid-2 script]# sh s51.sh test1

Ignorant

5.2,select語句使用方法(產生菜單選擇)

文法結構:

select 變數name in seq變數

do

action

done

代碼如下:

cat s52.sh

#!/bin/sh

select param in "begin""end" "exit"

do

case $param in

"begin")

echo "start something"

;;

"end")

echo "stop something"

;;

"exit")

echo "exit"

break;

;;

*)

echo "Ignorant"

;;

esac

done;

執行結果:

[root@squid-2 script]# sh s52.sh begin

1) begin

2) end

3) exit

#? 1

start something

#? 2

stop something

#? 3

exit

[root@squid-2 script]#

PS:執行的時候,只有輸入exit,才能退出來執行小視窗。

說明:select是迴圈選擇,一般與case語句使用。

二,shell語句的比較操作符 1,整數比較

規則說明:

-eq 等於 if [ "$a" -eq "$b" ]

-ne 不等於 if [ "$a" -ne "$b" ]

-gt 大於 if [ "$a" -gt "$b" ]

-ge 大於等於 if [ "$a" -ge "$b" ]

-lt 小於 if [ "$a" -lt "$b" ]

-le 小於等於 if [ "$a" -le "$b" ]

< 小於(需要雙括弧) (( "$a"< "$b" ))

<= 小於等於(...) (("$a" <= "$b" ))

> 大於(...) (("$a" > "$b" ))

>= 大於等於(...) (("$a" >= "$b" ))

PS:小資料比較可使用AWK

範例程式碼:

[root@squid-2 script]# cat com1.sh

a=$1

b=$2

if [ "$a" -eq "$b" ];then

echo"a = b true."

elif [ ! "$a" -gt "$b" ];then

echo"a > b true."

else echo "a < b true."

fi

[root@squid-2 script]#

測試結果如下:

[root@squid-2 script]# sh com1.sh 1 1

a = b true.

[root@squid-2 script]# sh com1.sh 1 2

a > b true.

[root@squid-2 script]# sh com1.sh 1 0

a < b true.

[root@squid-2 script]#

2,字串比較 2.1,規範以及使用

規則說明:

= 等於 if [ "$a"= "$b" ]

== 與=等價

!= 不等於 if [ "$a" ="$b" ]

< 小於,在ASCII字母中的順序:

if [[ "$a" < "$b" ]]

if [ "$a" \< "$b" ] #需要對<進行轉義

> 大於

-z 字串為null,即長度為0

-n 字串不為null,即長度不為0

範例程式碼:

[root@squid-2 script]# cat com2.sh

a=$1

b=$2

# 1 the first method to implement

if [ "$a"x = "$b"x ];then

echo"a = b"

elif [ ! "$a"x = "$b"x ]; then

echo"a != b"

else echo "others"

fi

# 2 the second method to implement

if [ "$a"x == "$b"x ];then

echo "a = b"

elif [ "$a"x != "$b"x ]; then

echo "a != b"

else echo "others"

fi

測試執行結果:

[root@squid-2 script]# sh com2.sh ccb aaa

a != b

a != b

[root@squid-2 script]# sh com2.sh ccb ccb

a = b

a = b

[root@squid-2 script]#

[root@squid-2 script]#

2.2,需要注意的地方

相等判斷需要注意的地方:

比較兩個字串是否相等的辦法是:

if [ "$a"x = "b"x ];then

這裡的關鍵有幾點:

1 使用單個等號

2 注意到等號兩邊各有一個空格:這是unix shell的要求

3 注意到"$a"x最後的x,這是特意安排的,因為當$test為空白的時候,上面的運算式就變成了x = bx,顯然是不相等的。而如果沒有這個x,運算式就會報錯:[: =: unary operator expected

[[ $a == z* ]] # 如果$a以"z"開頭(模式比對)那麼將為true

[[ $a == "z*" ]] # 如果$a等於z*(字元匹配),那麼結果為true

[ $a == z* ] # File globbing 和word splitting將會發生

[ "$a" == "z*" ] # 如果$a等於z*(字元匹配),那麼結果為true

關於File globbing:

一點解釋,關於Fileglobbing是一種關於檔案的速記法,比如"*.c"就是,再如~也是.

特殊字元的比較:
注意:
在[]結構中">"需要被轉義.
注意:

2.3,判斷字串是否空

範例程式碼:

[root@squid-2 script]# cat com3.sh

#!/bin/bash

a=$1

if [ -z "$a" ]; then

echo"a is empty."

else echo "a is a object."

fi

[root@squid-2 script]

測試執行結果:

[root@squid-2 script]# sh com3.sh a

a is a object.

[root@squid-2 script]# sh com3.sh

a is empty.

[root@squid-2 script]#

3,檔案判斷

規則說明:

-e 檔案存在

f1-nt f2 檔案f1是否比f2新

樣本指令碼代碼:

[root@squid-2 script]# cat com4.sh

#!/bin/bash

a=$1

file=$2

if [ -d $a ]; then

echo"it is a directory."

elif [ -f "$a" ]; then

echo"it is a file."

else echo "no parameter."

fi

測試回合結果如下:

[root@squid-2 script]# sh com4.sh log1

it is a file.

[root@squid-2 script]# sh com4.sh old

it is a directory.

[root@squid-2 script]#

參考資料:

http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html

http://blog.csdn.net/yf210yf/article/category/1475895

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.