Shell程式設計之迴圈語句與函式
目錄
迴圈語句
for迴圈語句
whlie迴圈語句
until迴圈語句
Shell函式
Shell陣列
for迴圈語句
在實際工作中,經常會遇到某項任務需要多次執行的情況,而每次執行時僅僅是處理的 物件不一樣,其他命令相同。例如,根據通訊錄中的姓名列表建立系統賬號,根據伺服器清 單檢查各主機的存活狀態
當面對各種列表重複任務時,使用簡單的 if 語句已經難以滿足要求,而順序編寫全部代 碼更是顯得異常煩瑣、困難重重
for迴圈
1、語法結構
(1)列表迴圈
(2)不帶列表迴圈
(3)類C風格的for迴圈
案例1:
案例2:
案例3:
案例4:
案例5:
whlie迴圈語句
while迴圈
1、語法結構
2、死迴圈
(1)語法結構(3種)
while迴圈一般用於有條件判斷的迴圈,若判斷條件為真,則進入迴圈,當條件為假就跳出迴圈
語法結構
while 表示式
do
command
done
案例1
案例2:
案例3:
until迴圈語句
跟while相反,條件為假進入迴圈,條件為真退出迴圈
語法結構
until 表示式
do
command
done
Shell函式
函式的作用
-------------函式的定義(兩種方式)---------------
1
function 函式名 {
command
} //這是一種規範寫法
2
函式名(){ //最常用因為最簡潔
command
}
函式定義完之後並不會自動執行,需要呼叫才行,好處在於可以寫一段功能程式碼作為函式,有需要就直接呼叫
定義的時候哪怕出現語法錯誤也沒關係,不呼叫就不會報錯
當然我們寫函式最終目的還是為了呼叫,為了實現某個功能塊
函式返回值:
return表示退出函式並返回一個退出值,指令碼中可以用$?變數顯示該值
使用原則:
1、函式一結束就取返回值,因為$?變數只返回執行的最後一條命令的退出狀態碼
2、退出狀態碼必須是0~255,超出時值將為取餘256
例
444 % 256
案例1:
呼叫函式
案例2:
案例3:
呼叫函式
建立本地yum倉庫
指令碼開機自啟
在/etc/profile 或者./bashrc
案例1:
案例2:
階乘
案例1:
案例:
Shell陣列
陣列
陣列是存放相同型別資料的集合,在記憶體中開闢了連續的空間,通常配合迴圈使用
陣列的分類
普通陣列:不需要宣告直接定義,下標索引只能是整數
關聯陣列:需要用declare -A宣告否則系統不識別,索引可以是字串
陣列的定義方式
(30 20 10 60 50 40)
0 1 2 3 4 5
第一種:直接把要加入陣列的元素用小括號括起來,中間用空格分開
num= (11 22 33 44)
${#num}顯示寧符串長度
陣列名=(value0 value1 value2)
顯示所有 ${num[*]}
第二種:精確的給每一個下標索引定義一個值加入陣列,索引數字可以不連續
num= ([0]-55 [1]=66 [2]=77 [4]=88)
陣列名=( [0]=value [1]=value [2]=value. . . )
第三種:先把要加入陣列的元素全部先賦值給一個變數,然後引用這個變數加入到陣列
list="11 12 13 14"
num= ($list)
陣列包括的資料型別
數值型別
字元型別:
使用"”或'’定義
獲取陣列的長度
arr_number= (10 20 30 40 50)
arr_length=${#arr_number[* ] }
$ {#arr_number [ @ ] }
echo $arr_length
echo $ {arr[* ]}
陣列排序演算法:氣泡排序
類似氣泡上湧的動作,會將資料在陣列中從小到大或者從大到小不斷的向前移動。
基本思想:
氣泡排序的基本思想是對比相鄰的兩個元素值,如果滿足條件就交換元素值,
把較小的元素移動到陣列前面,把大的元素移動到陣列後面(也就是交換兩個元素的位置),
這樣較小的元素就像氣泡一樣從底部上升到頂部。
演算法思路
冒泡演算法由雙層迴圈實現,其中外部迴圈用於控制排序輪數,
一般為要排序的陣列長度減1次,因為最後一次迴圈只剩下一個數組元素,不需要對比,
同時陣列已經完成排序了。而內部迴圈主要用於對比陣列中每個相鄰元素的大小,
以確定是否交換位置,對比和交換次數隨排序輪數而減少。
排序 score=(72 63 85 99 42)
----------第一輪-----------i---------
第一次對比 72 63 85 99 42 陣列長度-1 第一輪比較後,最後一位最大值99
第二次對比 63 72 85 99 42
第三次對比 63 72 85 99 42
第四次對比 63 72 85 42 99
----------第二輪-----------i---------
63 72 85 42 |99 第一次對比 陣列長度-2 第一輪比較後,最後一位最大值85
63 72 85 42 99 第二次對比
63 72 42 85 99 第三次對比
----------第三輪-----------i---------
63 72 42 |85 99 第一次對比 陣列長度-3 第一輪比較後,最後一位最大值72
63 42 72 |85 99 第二次對比
----------第四輪-----------i---------
63 42 |72 85 99 第一次對比 陣列長度-4 第一輪比較後,最後一位最大值63
42 63 72 82 99
案例:
本章總結
for語句的結構
while語句的結構
until語句的結構
Shell函式定義方法
陣列使用方法