shell腳本進階—課堂總結

循環、函數、會持續更新

194d0239284faf60ed120038aacfa7d8

一般過程式編程語言都分為三種:

1.順序執行

2.選擇執行

3.循環執行

接下來我們介紹下 順序執行和選擇執行的的語句的格式和簡單的例子

if ? ?語句

格式:

if ? ?判斷條件 ? ; ? ?then

當條件為真時要執行的分支代碼

elif

條件為真且不滿足第一條判斷條件時,分支執行的代碼

else

條件為假時要執行的分支代碼

fi

例子QQ圖片20180510193546

基本的格式如上,但有時判斷條件少的時候也可不要else 和它的執行代碼。判斷條件比較簡單時也可以不要elif和它的執行代碼,更多情況下else更像時一個兜底的命令,負責結尾的提示。

注意:判斷條件也可以為命令,命令結果為真執行后面的分支代碼

case語句

格式:

case ? ?變量引用 ? ? in

pat1)

判斷pat1與變量匹配成功后要執行的分支代碼

;;

pat2)

判斷pat2與變量匹配成功后要執行的分支代碼

;;

*)

之上條件都不匹配后要執行的兜底代碼

;;

esac

例子:

QQ圖片20180510195410

注意:case語句可以支持通配符,可以用來判斷之前的yes no 的問題

平常常用的通配符:

* ? 表示任意長度的任意字符

? 任意單個字符

[ ] ?匹配范圍內任意單個字符

a|b ?表示a或b

循環執行:

1.將某代碼段重復運行多次

2.重復運行多少次
循環次數事先已知
循環次數事先未知

3.有進入條件和退出條件

我們常用的循環語句有for、while、until等語句,下面就詳細介紹下他們的用法和格式。

for 語句

for ? 變量名 ? ?in ? ?列表 ?; ? do
循環體
done

語句執行的機制:

依次將列表中的元素賦值給“變量名”;

每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束

例子:

QQ圖片20180510200724

列表生成方式:

1.直接給出列表

2.如{1..100} 或 $(seq ?1 ?2 ?100 )

3.返回列表的命令 ?$(cmd)

4.可以使用glob,如*.sh

5.變量引用 :$1 $2 $3 $# $@

while語句

格式:

while ? ? 滿足條件 ? ; ? ?do
循環體
done

當條件為真時進入循環、為假使退出循環

條件一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

條件:CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后
會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環

例子:

QQ圖片20180510201919

while語句的特殊用法

while ? ?read ? ? line ?; ? do
循環體
done < /PATH/FROM/SOMEFILE

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line

until語句

格式

until ? ? ?CONDITION ? ?; ? ?do
循環體
done

進入條件: CONDITION 為false
退出條件: CONDITION 為true

until與whtil特別的像 ,只是它們的判斷條件有些不同,正好相反。

 

退出循環語句命令:

continue ?[n] ?提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第一層

break [n]?提前結束第N層循環,最內層為第1層

這些命令可以使我們的腳本更加的靈活

 

我們可以用這些循環做些有意思的事:

創建無限循環:

while true; do
循環體
done

until false; do
循環體
Done

自定義打印國際象棋盤

echo -e “\e[1;33m<<******黃色43******>>\e[0m”
echo -e “\e[1;34m<<******藍紅44******>>\e[0m”
echo -e “\e[1;35m<<******洋色45******>>\e[0m”
echo -e “\e[1;36m<<******青色46******>>\e[0m”
echo -e “\e[1;37m<<******白色47******>>\e[0m”
read -p “The first color you want to choose is: ” ning
read -p “The second colors you want to choose are: ” meng
read -p “Please specify the size of the block: ” num
#color=`echo -e “\e[1;${ning}m\e[0m”`
for (( k=1 ; k<=$num ; k++ )) do
N=$N`echo -e “\e[1;${ning}m \e[0m\c”`
done
for (( k=1 ; k<=$num ; k++ )) do
M=$M`echo -e “\e[1;${meng}m \e[0m\c”`
done
#不能直接把很多個空格賦給變量,要用追加變量的方法
for (( i=1 ; i<=8 ; i++ )) ;do
# let n=$k*4
for (( j=1 ; j<=$num/2 ; j++ ));do
if [ $[i%2] -eq 0 ];then
for m in {1..4};do
#echo -e “\e[1;41m \e[0m\e[1;43m \e[0m\c”
echo -e “$N${M}\c”
# else
done
else
for l in {1..4};do
echo -e “$M${N}\c”
#echo -e “\e[1;43m \e[0m\e[1;41m \e[0m\c”
done
fi
echo

echo -e “\e[1;33m<<******黃色43******>>\e[0m”
echo -e “\e[1;34m<<******藍紅44******>>\e[0m”
echo -e “\e[1;35m<<******洋色45******>>\e[0m”
echo -e “\e[1;36m<<******青色46******>>\e[0m”
echo -e “\e[1;37m<<******白色47******>>\e[0m”
read -p “The first color you want to choose is: ” ning
read -p “The second colors you want to choose are: ” meng
read -p “Please specify the size of the block: ” num
#color=`echo -e “\e[1;${ning}m\e[0m”`
for (( k=1 ; k<=$num ; k++ )) do
N=$N`echo -e “\e[1;${ning}m \e[0m\c”`
done
for (( k=1 ; k<=$num ; k++ )) do
M=$M`echo -e “\e[1;${meng}m \e[0m\c”`
done
#不能直接把很多個空格賦給變量,要用追加變量的方法
for (( i=1 ; i<=8 ; i++ )) ;do
# let n=$k*4
for (( j=1 ; j<=$num/2 ; j++ ));do
if [ $[i%2] -eq 0 ];then
for m in {1..4};do
#echo -e “\e[1;41m \e[0m\e[1;43m \e[0m\c”
echo -e “$N${M}\c”
# else
done
else
for l in {1..4};do
echo -e “$M${N}\c”
#echo -e “\e[1;43m \e[0m\e[1;41m \e[0m\c”
done
fi
echo

代碼復制下來有點格式有點亂,不過還可以用

自定義打印矩形

read -p “Please enter the width value: ” high
read -p “Please enter the height value: ” width
for i in `seq $high` ;do
for j in `seq $width` ;do
color=$[RANDOM%7+31]
echo -e “\e[1;${color}m*\e[0m\c”
done
echo
done

因為時間原因今天博客就寫到這,不過接下來會持續更新

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98084

(1)
天策天策
上一篇 2018-05-10
下一篇 2018-05-10

相關推薦

  • 企業監控Zabbix-myself

    基礎

    2018-04-10
  • linux基礎(一)

    一些運維的基本命令和作用。

    Linux筆記 2018-04-01
  • 初始Linux文件管理

    Linux文件管理

    2018-05-18
  • LINUX的哲學思想

    1.一切皆文件 把幾乎所有資源統統抽象為文件形式,不僅普通的文件,目錄、字符設備、塊設備、 套接字等還包括硬件設備,甚者通信接口等。在Linux 中都是以文件被對待;它們雖然類型不同,但是對其提供的卻是同一套操作界面。訪問任何設備都可以用統一的一個接口。方便統一管理 由眾多功能單一的程序組成。一個程序只做一件事,并且要做好,保證linux程序的高效運行。需要…

    Linux筆記 2018-06-27
  • 進程和計劃任務

    進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。 進程的狀態:運行態running,就緒態ready,睡眠態(可中斷,不可中斷),停止態,僵死態。 進程管理工具 ps命令 ps aux #顯示詳細的當前運行的所有進程 ps axo pid, cmd,%cpu,tty,%mem k…

    Linux筆記 2018-05-05
  • linux網絡基礎

    無線網絡標準: 中國:早期wapi后期wapi+wifi 國際:wifi 無線模式802.11 a/b/n/ac/bn,以太模式IEEE? 802.3 網絡施工模式: ethtool eth0 單工:單向傳輸 雙工:雙向傳輸 全雙工:同時雙向 半雙工:輪流雙向 集線器Hub :由于網線信號電流強度受距離影響,所以集線器很好的提供了電能 沖突域:同個網域中發送…

    Linux筆記 2018-05-07
欧美性久久久久