.shell 程序流程控制結構三大結構
1)順序結構
2)選擇結構
3)循環結構shell
1、順序結構的定義 編程
順序結構的程序設計是最簡單的一種結構,它的執行順序是自上而下,依次執行。bash
1.順序結構程序編寫流程
1)編輯腳本文件,以#!/bin/sh 開頭;編程語言
#!/bin/sh是指此腳本使用/bin/sh來解釋執行,#!是特殊的表示符,其後面跟的是此解釋此腳本的shell的路徑。其實第一句的#!是對腳本的解釋器程序路徑,腳本的內容是由解釋器解釋的,咱們能夠用各類各樣的解釋器來寫對應的腳本。函數
2)編寫業務程序,順序編寫語句塊一、語句塊二、語句塊3 。oop
2.掌握常見的系統變量的含義:
這些系統變量一般用與命令行參數的獲取。spa
$0命令行 |
當前腳本的文件名設計 |
$ncode |
傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。 |
$# |
傳遞給腳本或函數的參數個數。 |
$* |
傳遞給腳本或函數的全部參數。 |
$@ |
傳遞給腳本或函數的全部參數。被雙引號(" ")包含時,與 $* 稍有不一樣,下面將會講到。 |
$? |
上個命令的退出狀態,或函數的返回值。 |
$$ |
當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID。 |
$0 |
當前腳本的文件名 |
注意:有時候須要獲取到參數的個數,以及全部參數的內容。
變量名 |
說明 |
變量名 |
說明 |
HOME |
當前用戶主目錄 |
PWD |
用戶的當前目錄 |
PATH |
命令搜索路徑 |
UID |
當前用戶標識符 |
LOGNAME |
用戶登陸名 |
TERM |
終端的類型 |
PS1 |
第一命令提示符,是#或$ |
SHELL |
用戶的shell類型以及路徑 |
PS2 |
第二命令提示符,默認是> |
HISFILE |
存儲歷史命令的文件 |
1.交互式輸入與輸出
read 命令讀取標準輸入設備的一行,到新行換行符前的字符做爲終止,把讀到的字符賦值給變量。
能夠結合echo 一塊兒實現讀取並輸出的功能。
2.順序結構交互式輸入與輸出程序演練
給出輸入提示的read用法
read -p 「提示信息:」 myaddr
1.選擇結構的定義
選擇結構是程序中帶有判斷的一種邏輯結構,只有符合必定的條件,程序體纔會被執行。
2.Linux shell 選擇結構分類
1)if-then控制結構
2)case–esac控制結構
if 語句語法格式:
if [ ] then command1 command2 ... commandN fi
if else 語法格式:
if condition then command1 command2 ... commandN else command fi
if else-if else 語法格式:
if condition1 then command1 elif condition2 then command2 else commandN fi
a=10 b=20 if [ $a == $b ] then echo "a 等於 b" elif [ $a -gt $b ] then echo "a 大於 b" elif [ $a -lt $b ] then echo "a 小於 b" else echo "沒有符合的條件" fi
輸出結果:
a 小於 b
if else語句常常與test命令結合使用,以下所示:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '兩個數字相等!' else echo '兩個數字不相等!' fi
輸出結果:
兩個數字相等!
與其餘編程語言相似,Shell支持for循環。
for循環通常格式爲:
for i in $(seq 1 10) do echo $i done
for io in A B C D E F H K O do echo $io done
for ((m=1; $m<=12; m++ )) do echo $m done
case語句適用於須要進行多重分支的應用狀況,它也是選擇結構中經常使用的一種控制結構。
case分支語句的格式以下:
casein# 嚴格掌握其語法 $變量名
1# 右括號不能省(」可比較相等」) 模式)
1命令序列
# 兩分號不能省;;
2模式)
2命令序列
;;
*)
默認執行的命令序列
;;
esac#結尾反寫case表示結束。
#!/bin/bash read -p "請輸入數字(1-7):" a case $a in 1) echo "今天是星期一" ;; 2) echo "今天是星期二" ;; 3) echo "今天是星期三" ;; 4) echo "今天是星期四" ;; 5) echo "今天是星期五" ;; 6) echo "今天是星期六" ;; 7) echo "今天是星期日,休息日!" ;; *) echo "請按規範輸入指定數字" ;; esac
輸出結果
[root@localhost ~]# ./stt.sh 請輸入數字(1-7):4 今天是星期四 [root@localhost ~]# ./stt.sh 請輸入數字(1-7):8 請按規範輸入指定數字 [root@localhost ~]# ./stt.sh 請輸入數字(1-7):1 今天是星期一 [root@localhost ~]# ./stt.sh 請輸入數字(1-7):3 今天是星期三
rt=1 while [ $rt -le 10 ] do echo "the script is running..." let rt++ sleep 3 done
i=1 while ((i<=10)) do echo $i let "i++" done
1.while read 變量 能夠按行讀入
一直到全部行都讀完,才退出循環,在實際工做中,會常常採用這種循環結構,進行數據的處理。
語法格式:
cat file.txt |while read line
# line能夠換個名字,此處的cat也能夠是一個產生若干行的命令,如 find
do
….
done
須要注意的是while read line循環體中的變量,退出當前循環後,會被銷燬,因此若要二次使用循環體中的變量,則須要採用其餘辦法。
由於管道後的while loop是sub shell ,因此裏面的變量在執行完成後,須要銷燬。
cat aa.txt | while read isop do echo $isop done
1.循環中有兩種類型的控制break和continue
這是一種無條件的流程控制,強制程序跳出當前的循環,或跳出當前循環繼續執行下一個循環。
break命令,會退出當前的循環而且將控制權傳遞到本循環後面的第一個命令。
continue命令,當在程序執行過程當中遇到這個命令,就會忽略本次循環中剩餘的命令,將控制權交給循環的頂部。