bash編程語法linux
首先,咱們先說下bash語法都有哪些內容,隨後我會隨後一一去分析,增強我記憶的同時也分享下給家。編程
linux bash腳本的基本內容構架以下:數組
#!/bin/bash -----> 每一個bash腳本第一行必需要寫的,告訴系統這是個bash腳本。 bash
# -----> #爲註釋的標誌符號,#開頭的行都是腳本不執行的,僅用做註釋 編程語言
命令段 -----> 腳本要執行的具體命令,來完成相應的功能
ide
bash編程爲過程式編程語言,有3種主要語句即爲:函數
順序執行語句:最簡單的,至上而下執行語句,工做模式爲:測試
#!/bin/bash
spa
#(無關緊要)
3d
語句1
語句2
先執行語句1,再執行語句2,例如:
建立腳本 bash1.sh
輸出結果爲:hello !
hao are you
循環執行語句:有3種,for循環,while循環,until循環
基本結構以下:()內的內容就是變量要依次讀出的內容,並要放到循環體中去執行的
for 變量 in (列表); do
循環體
done
循環體中的變量依次從列表中讀取數據,知道列表中的數據讀取完爲止,例如:
咱們求 1到100之間的全部整數的和爲例,
建立腳本 bash2.sh (for循環)
圖中,i爲變量(bash編程中,變量無需提早定義),對變量取值要用$,如對i取值:$i
可是,咱們對於圖中的sun變量爲何要定義且賦予值0呢?,由於咱們要作累加運算,必須有個初值,好比你要算帳的話,必須知道算帳以前的帳單狀態,才能得出結果啊,也就是數據的初始化。
{1..100}表示,1到100的全部整數1,2,3........99,100
輸出結果爲5050,你能夠本身驗證下
while循環樣例:
while [條件測試]; do
循環體
done
上圖中,counter=1,爲條件測試的變量counter的初始值,
let counter++ , 爲循環體每執行一次,變量counter就自動+1,直到不知足測試條件爲止,本題中,變量counter直到大於100,不知足測試條件,循環結束,輸出最後結果爲5050
until循環:基本格式:
until [條件測試]; do #until的測試條件,爲真跳出循環,爲假則執行語句(看清楚)
循環體
done
看到圖中的測試條件了沒有,while循環時,判斷爲 -ge 意思 小於等於,
until循環時,判斷爲 -gt 意思 大於,相反,這個從單詞意思上就能看的出來,是否是這樣啊。
這裏咱們說到了比較符號,那就補充下吧,
bash編程中測試類型有:
整型測試:整數的比較
基本模式爲: [ $變量1 -gt $變量2 ]
-gt 大於
-lt 小於
-ge 大於等於
-le 小於等於
-ne 等於
-ne 不等於
字符測試:(分爲單目和雙目)字符串的比較
雙目:
>
<
=
>=
<=
單目:
-n String: 是否不空,不空則爲真,空則爲假
-z String: 是否爲空,空則爲真,不空則爲假
選擇語句:簡單比放下,你選擇
從A開始,選擇B,則執行1,選擇C,則執行2,
選擇語句通常有如下幾種,
單分支if語句,
最基本的格式:
if [條件測試];then #裏面的【條件測試】若是爲真,則執行語句1,爲假執行語句2
語句1
fi
case
咱們來看下選擇語句的樣題:
假如:若是咱們輸入一個整數數a,若是此整數a爲偶數,則輸出A,其餘則退出
若是輸入2,則輸出 A,輸入3,則退出腳本,不顯示內容
上圖中,讓用戶輸入一個內容,的語句格式爲: read -p 提示內容 變量
來判斷一個數是否爲偶數,咱們用取餘運算,可是發現了沒有,$[$num%2],我在$num%2的前面又加了一個$,意思爲,取運算完成後的數值與0進行比較,不加就會出現錯誤的哦
雙分支if語句,
基本格式爲:
if [條件測試];then
語句1
else
語句2
fi
條件測試知足即爲真時,執行語句1,不然執行語句2
樣例:若是咱們輸入一個整數數a,若是此整數a爲偶數,則輸出A,不然輸出B
上圖中,若是你輸入的爲2,則輸出A,輸入的爲3,則輸出B,你能夠本身試下,
還有個多分支if語句:
格式爲:
if [測試條件1]; then
語句1
elif [測試條件2]; then
語句2
elif [測試條件3]; then
語句3
......
......
else
語句4
fi
意思爲,符合測試條件1,執行語句1,符合測試條件2,執行語句2,依次類推。
例如,咱們輸入一個數,若是輸入1,顯示A;輸入2,顯示B;輸入3,顯示C;輸入4,顯示D;輸入其餘內容,則直接退出,而且顯示內容,請輸入(1|2|3|4),
最後還有個case語句,也輸入選擇語句的一種:
格式以下:
case 變量 in
條件1)
語句1
;;
條件2)
語句2
;;
條件3)
...
;;
esac
舉個例子吧,就用case語法寫一下上題那個if選擇語句,
結果和if選擇樣題是同樣的,我測試過啦,才發出來的
bash中主要用到的基本內容就如上啦,其中有些,例如邏輯運算,變量的命名以及規則等,沒有作詳細介紹,有須要的能夠問下,學而時習之,不辭下問都懂得。
函數的使用
函數的通常語法
function 函數名(){
函數體
}
可使用函數名進行函數的調用如:
#!/bin/bash
#
NO1() {
if [ $1 -eq 1 ]; then
echo "A"
fi
}
NO2() {
if [ $1 -eq 2 ]; then
echo "B"
fi
return 0
}
NO3() {
if [ $1 -eq 3 ]; then
echo "C"
fi
return 0
}
NO4() {
if [ $1 -ge 4 ]; then
echo "please input (1|2|3)"
fi
return 1
}
read -p "please input (1|2|3)" num
NO1 $num
NO2 $num
NO3 $num
NO4 $num
上例用了很簡單的程序寫的。,雖然簡單,但基本說明了函數在bash編程中基本使用方式。
函數名 參數:意思爲把參數傳遞給對應的函數,
函數中變量$1:表示接受傳遞參數的變量
return 0 : 這個表示函數的返回值,每一個函數調用執行完成後都會有個返回值的,固然能夠本身指定。返回值
bash編程中的數組:
數組是由 數組名+索引構成(索引指向的是數組中的元素)
數組的聲明命令爲:decalare -a 數組名
數組的賦值:
總體賦值
num=(1 2 3 4 5 6 7 8 9)
單個賦值
num[0]=1
num[1]=2
...
num[8]=9
索引賦值
num=([0]=a [1]=b [2]=c [3]=d)
提示用戶對數組進行賦值的語句:
read -a 「提示語句」 數組名 ##看清,使用的是-a , 而非-p
遍歷數組中的元素
declare -a num
num=(‘ls’) #這裏引用ls命令獲取的結果賦值給數組num
for i in $[$num[@]]; do
echo $num 輸出數組的全部元素
done
數組的長度格式:
${#ARRAY[*]}
${#ARRAY[@]}
從數組中挑選出某個元素的基本格式以下:
${ARRAY[@]:offset:number}
切片:
offset: 偏移的元素個數
number: 取出的元素的個數
${ARRAY[@]:offset}:取出偏移量後的全部元素
${ARRAY[@]}: 取出全部元素
數組的實際運用樣例: 生成10個隨機數到一個數組中,並排序,
#!/bin/bash
declare -a sum
for i in {1..10}; do
sum[$i]=$RANDOM
done
echo ${sum[@]}
for ((i=0;i<9;i++)); do
for ((j=1;j<$[10-$i];j++)); do
if [ ${sum[$j]} -gt ${sum[$[$j+1]]} ]; then
var=${sum[$j]}
sum[$j]=${sum[$[$j+1]]}
sum[$[$j+1]]=$var
fi
done
done
echo ${sum[@]}
其中用到了生成隨機數的命令:
$RANDOM