1. 程式人生 > 其它 >Shell程式設計之迴圈語句與函式

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函式定義方法

陣列使用方法