shell程式設計控制結構expr/let/for/while/until
1、expr計算整數變數值
格式 :expr arg
例子:計算(2+3)×4的值
1、分步計算,即先計算2+3,再對其和乘4
s=`expr 2 + 3`
expr $s \* 4
2、一步完成計算:
expr `expr 2 + 3 ` \* 4
–說明:
運算子號和引數之間要有空格分開;
萬用字元號(*),在作為乘法運算子時要用\、“”、‘’符號修飾
–:expr 3 \* 2 expr 3 “*” 2 expr 3 ‘*’ 2
`(反引號)與鍵盤上的~同一個鍵上的符號
[fsy@localhost ~]$ s=`expr 2 + 3`
[fsy@localhost ~]$ echo $s
5
[fsy@localhost ~]$ expr $s \* 4
20
[fsy@localhost ~]$ expr `expr 2 + 3` \* 4
20
[fsy@localhost ~]$ expr 2 \* 3
6
[fsy@localhost ~]$ expr 2 "*" 3
6
[fsy@localhost ~]$ expr 2 '*' 3
6
[fsy@localhost ~]$ expr 2 * 3
expr: 語法錯誤
[fsy@localhost ~]$
2、let命令
格式:let arg1 [arg2 ......]
說明:
與expr命令相比,let命令更簡潔直觀
[ ]表示可以有多個引數,arg n (n=1,2…)
運算子與運算元據之間不必用空格分開,但表示式與表示式之間必須要用空格分開
當運算子中有、&、|等符號時,同樣需要用引號(單引號、雙引號)或者斜槓來修飾運算子
–例子:計算(2+3)×4的值
[fsy@localhost ~]$ let s=(2+3)*4
[fsy@localhost ~]$ echo $s
20
[fsy@localhost ~]$
3、for語句——坑爹的開始...... 和其他語言的for不同!
對一組引數進行一個操作
語法格式:
for 變數 in 列表
do
命令列(通常用到迴圈變數)
done
說明:
–“列表”為儲存了一系列值的列表,隨著迴圈的進行,變數從列表中的第一個值依次取到最後一個值;
–do和done之間的命令通常為根據變數進行處理的一系列命令,這些命令每次迴圈都執行一次;
–如果“ in 列表”部分省略掉,Bash則認為是“in $@”,即執行該程式時通過命令列傳給程式的所有引數的列表。
例1、自定義列表
#!/bin/bash
for var in one two three four five
do
echo ------
echo '$var is' $var
done
執行輸出:
------
$var is one
------
$var is two
------
$var is three
------
$var is four
------
$var is five
例2、以命令返回值作為列表
#!/bin/bash
for var in `ls`
do
echo -----
echo $var
done
執行輸出:
-----
abb
-----
abc
-----
a.out
-----
a.sh
-----
b.sh
-----
hello.c
-----
scripts
-----
例3、命令列引數指定為列表中的數值
#!/bin/bash
for var
do
echo "It's $var"
done
執行輸出:
[fsy@localhost ~]$ sh c.sh a b c d
It's a
It's b
It's c
It's d
4、while語句
語法格式:
while 表示式
do
命令列
done
說明:
–while迴圈中,只要條件為真,就執行do和done之間的迴圈命令;
–避免生成死迴圈。
例如:
#!/bin/bash
num=1
while [ $num -le 10 ]
do
echo -e "\t the num is $num"
let num=num+1
done
執行輸出:
the num is 1
the num is 2
the num is 3
the num is 4
the num is 5
the num is 6
the num is 7
the num is 8
the num is 9
the num is 10
5、until語句
語法格式:
unitil 表示式
do
命令列
done
說明:
–until迴圈中,只要條件不為真,就執行do和done之間的迴圈命令,或者說,在until迴圈中,一直執行do和done之間的迴圈命令,直到條件為真;
–避免生成死迴圈。
例:計算1到10的和
#!/bin/bash
sum=0
num=10
until test $num -eq 0
do
sum=`expr $sum + $num`
num=`expr $num - 1`
done
echo "sum = $sum"
執行輸出
sum = 55
6、shift語句
shift語句:將變數的值依次向左傳遞,並形成一組新的引數值
–例:位置變數當前值為:1=file1 2= file2 3=file3
– 執行一次shift後為:1=file2 2=file3
還可以在shift命令中指定位置變數轉移的次數
–shift n
例:
#!/bin/bash
while [ -n "$*" ]
do
echo $1 $2 $3 $4 $5 $6
shift
done
執行輸出
[fsy@localhost scripts]$ sh b.sh 1 2 3 4 5 6 7
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7
4 5 6 7
5 6 7
6 7
7
7、if語句
if 語句的一般形式 :
if 條件表示式
then #當條件為真時執行以下語句
命令列表
else #當條件為假時執行以下語句
命令列表
fi
if的測試部分利用test命令實現,也可以利用一般命令執行成功與否來判斷。如果命令正常結束,返回值為0,條件測試為真; 否則返回值不為0,條件測試為假
例:
#!/bin/bash
if test -f "$1"
then
echo "$1 is an ordinary file"
else
echo "$1 is not an ordinary file"
fi
執行輸出:
[fsy@localhost scripts]$ sh c.sh abb
abb is not an ordinary file
[fsy@localhost scripts]$ sh c.sh a.sh
a.sh is an ordinary file
[fsy@localhost scripts]$
8、case語句
取值後面必須為單詞in,每一個模式必須以右括號結束。取值可以為變數或常數。取值檢測匹配的每一個模式,一旦模式匹配,其間所有命令開始執行直至;;。執行完匹配模式相應命令後不再繼續其他模式。如果無一匹配模式,使用*號捕獲該值,再接受其他輸入。
[注]
1.模式字串中可以使用萬用字元
2.如果一個模式字串中包含多個模式,那麼各模式之間應以豎線(|)隔開,表各模式是“或”的關係,即只要給定字串與其中一個模式相配,就會執行其後的命令列表。
3.各模式字串應是唯一的,不應重複出現,並且要合理安排它們的出現順序,例如,不應將“*”作為頭一個模式字串,因為“*”可以與任何字串匹配,若第一個出現,就不會再檢查其他模式了。
4.case語句以關鍵字case開頭,以關鍵字esac結束。
5.case的退出(返回)值是整個結構中最後執行的命令的退出值。若沒有執行任何命令,則退出值為0.
例:
#!/bin/bash
case $1 in
1)
echo " you choice is 1";;
2)
echo " your choice is 2";;
*)
echo " your choice is others";;
esac
執行輸出:
[fsy@localhost scripts]$ sh d.sh 1
you choice is 1
[fsy@localhost scripts]$ sh d.sh 2
your choice is 2
[fsy@localhost scripts]$ sh d.sh 3
your choice is others
9、break與continue
–1、break:用於立即終止當前迴圈的執行,break命令可以使使用者從迴圈體中退出來。
–語法:break[n] ,其中,n表示要跳出幾層迴圈,預設值為1
–2、continue:跳過迴圈體中在其之後的語句,會返回到本迴圈層的開頭,進行下一次迴圈。
–語法:continue[n],其中,n表示從包含continue語句的最內層迴圈體向外跳到第幾層迴圈,預設值為1,迴圈層數是由內向外編號。
10、函式
函式:由函式標題和函式體兩部分組成。標題是函式名。函式體是函式內在的命令集合。標題名稱必須唯一。變數均為全域性變數,沒有區域性變數。
格式:
[function] 函式名() 或 [function]函式名() {
{ 命令1
命令1 …
… }
}
例:
#!/bin/bash
num=1
hello()
{
echo "hello boy~ It's our $num meeting"
let num=num+1
}
hello
hello
hello
執行輸出
hello boy~ It's our 1 meeting
hello boy~ It's our 2 meeting
hello boy~ It's our 3 meeting
11、select語句
格式:
select 變數 in 列表
do
命令列(通常用到迴圈變數)
done
製作一個選擇表,在列表中選擇一個選項執行命令列。如果選擇的變數不在列表序列中,則返回一個空值。需要用break退出迴圈。
例子:
#!/bin/bash
echo "a is 5 ,b is 3. Please select your method: "
a=5
b=3
select var in "a+b" "a-b" "a*b" "a/b"
do
break
done
case $var in
"a+b")
echo 'a+b= '`expr $a + $b`;;
"a-b")
echo 'a-b= '`expr $a - $b`;;
"a*b")
echo 'a*b= '`expr $a \* $b`;;
"a/b")
echo 'a/b= '`expr $a / $b`;;
*)
echo "input error"
esac
執行輸出:
[fsy@localhost scripts]$ sh e.sh
a is 5 ,b is 3. Please select your method:
1) a+b
2) a-b
3) a*b
4) a/b
#? 1
a+b= 8
zz:http://blog.csdn.net/fansongy/article/details/6724228
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-753551/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell指令碼程式設計之選擇控制結構指令碼程式設計
- [Bash] while & until commandsWhile
- Linux Shell指令碼程式設計while語句案例Linux指令碼程式設計While
- 實驗5 迴圈結構程式設計(while、do-while語句的應用)程式設計While
- 實驗5迴圈結構程式設計(while、do-while語句的應用)程式設計While
- 好程式設計師雲端計算教程分享Shell程式設計之for迴圈結構程式設計師
- 好程式設計師Web前端分享程式的三大結構(二)while迴圈程式設計師Web前端While
- shell基礎教程 十六: Shell until迴圈
- Shell程式設計程式設計
- Shell程式設計 --- Shell介紹程式設計
- Python 為什麼不設計 do-while 迴圈結構?PythonWhile
- Java迴圈結構-for,while及do…whileJavaWhile
- shell程式設計五程式設計
- shell程式設計二程式設計
- Shell程式設計-shell變數1程式設計變數
- shell script程式設計小結——附帶例項程式設計
- Java 迴圈結構 - for, while 及 do...whileJavaWhile
- Java基本程式設計結構Java程式設計
- 選擇結構程式設計程式設計
- 迴圈結構程式設計程式設計
- python3 筆記9.程式流程結構--迴圈結構(while,for)Python筆記While
- Shell程式設計-02-Shell變數程式設計變數
- Linux之shell程式設計Linux程式設計
- Shell程式設計-基礎程式設計
- Shell程式設計-read命令程式設計
- shell程式設計進階程式設計
- shell 程式設計簡記程式設計
- Linux Shell程式設計(1)Linux程式設計
- Linux Shell程式設計(2)Linux程式設計
- shell程式設計基礎程式設計
- Shell 程式設計入門程式設計
- 初識shell程式設計程式設計
- Shell程式設計-11-子Shell和Shell巢狀程式設計巢狀
- 1.3順序結構程式設計程式設計
- 【Linux shell】while read lineLinuxWhile
- 03_SHELL程式設計之條件判斷和流程控制程式設計
- 雲端計算學習路線原始碼框架筆記:Shell程式設計之for迴圈結構原始碼框架筆記程式設計
- Shell程式設計——極簡教程程式設計
- shell程式設計–bash變數程式設計變數