Liunx-----Shell腳本流程控制--順序、選擇、循環

.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 語句語法格式:

if [     ]
then
    command1 
    command2
    ...
    commandN 
fi

if else

if else 語法格式:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
 
 

if else-if else

 
 

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

輸出結果:

兩個數字相等!

for 循環

與其餘編程語言相似,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 esac控制結構

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
今天是星期三

 

While循環結構

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

while read 循環使用

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

continue 、break 使用

1.循環中有兩種類型的控制break和continue
這是一種無條件的流程控制,強制程序跳出當前的循環,或跳出當前循環繼續執行下一個循環。

break命令,會退出當前的循環而且將控制權傳遞到本循環後面的第一個命令

continue命令,當在程序執行過程當中遇到這個命令,就會忽略本次循環中剩餘的命令,將控制權交給循環的頂部

相關文章
相關標籤/搜索