[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 是正規表示式,可以用下面字元:
* 任意字串
? 任意字元
[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" ))
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" ]
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"就是,再如~也是.
但是file globbing並不是嚴格的正規表示式,雖然絕大多數情況下結構比較像.
特殊字元的比較:
!= 不等於,如:if [ "$a" != "$b" ]
這個運算子將在[[]]結構中使用模式匹配.
< 小於,在ASCII字母順序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]結構中"
> 大於,在ASCII字母順序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]結構中">"需要被轉義.
-z 字串為"null".就是長度為0.
-n 字串不為"null"
注意:
使用-n在[]結構中測試必須要用""把變數引起來.使用一個未被""的字串來使用! -z
或者就是未用""引用的字串本身,放到[]結構中。雖然一般情況下可 以工作,但這是不安全的.習慣於使用""來測試字串是一種好習慣。
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 檔案存在
-a 檔案存在(已被棄用)
-f 被測檔案是一個regular檔案(正常檔案,非目錄或裝置)
-s 檔案長度不為0
-d 被測物件是目錄
-b 被測物件是塊裝置
-c 被測物件是字元裝置
-p 被測物件是管道
-h 被測檔案是符號連線
-L 被測檔案是符號連線
-S(大寫) 被測檔案是一個socket
-t 關聯到一個終端裝置的檔案描述符。用來檢測指令碼的stdin[-t0]或[-t1]是一個終端
-r 檔案具有讀許可權,針對執行指令碼的使用者
-w 檔案具有寫許可權,針對執行指令碼的使用者
-x 檔案具有執行許可權,針對執行指令碼的使用者
-u set-user-id(suid)標誌到檔案,即普通使用者可以使用的root許可權檔案,透過chmod +s file實現
-k 設定貼上位
-O 執行指令碼的使用者是檔案的所有者
-G 檔案的group-id和執行指令碼的使用者相同
-N 從檔案最後被閱讀到現在,是否被修改
f1-nt f2 檔案f1是否比f2新
f1 -ot f2 檔案f1是否比f2舊
f1 -ef 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1266903/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux Shell Awk 流程控制語句(if,for,while,do)詳細介紹LinuxWhile
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- 『忘了再學』Shell流程控制 — 34、if條件判斷語句(二)
- 『忘了再學』Shell流程控制 — 33、if條件判斷語句(一)
- shell程式設計中的控制判斷語句程式設計
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- 判斷語句
- 使用帶型別判斷的比較判斷型別
- JS的判斷語句:判斷、迴圈JS
- awk 流程控制語句(if,for,while,do)詳細介紹While
- linux if語句內判斷引數Linux
- [shell基礎]——if/for/while/until/case 語句While
- Swift3.0語言教程比較、判斷字串Swift字串
- Python解惑:整數比較 is ==的比較Python
- Java中陣列判斷元素存在幾種方式比較詳解Java陣列
- C語言中迴圈語句while 中判斷條件出現 || 和 && 的區別C語言While
- Kotlin——初級篇(四):控制語句(if、for、while、when、do...while、跳轉語句)詳解KotlinWhile
- 例項詳解如何構建動態SQL語句SQL
- 詳解Java判斷是否是整數,小數或實數的正規表示式Java
- JQuery 判斷 正整數jQuery
- sql宣告變數,及if -else語句、while語句的用法SQL變數While
- Shell指令碼應用 – for、while迴圈語句指令碼While
- [shell基礎]——整數比較;字串比較;檔案測試;邏輯測試符字串
- Java經典例項:比較浮點數Java
- 收集整理比較全 shell sed 命令與例項教程
- JavaScript判斷整數或者小數JavaScript
- Java 判斷語句 - if…else/switchJava
- javascript判斷數字正負程式碼例項JavaScript
- Python流程控制語句詳解Python
- Linux 比較判斷運算(if else)Linux
- Go的條件判斷語句的使用Go
- javascript判斷奇數簡單程式碼例項分享JavaScript
- Lua流程控制語句if else的使用詳解
- Python中的if、while、for 語法及例項PythonWhile
- js判斷變數是不是數字型別程式碼例項JS變數型別
- Python 解惑:整數比較Python
- javascript判斷變數的資料型別程式碼例項JavaScript變數資料型別
- oracle幾個比較有用的語句Oracle