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 20:09
下一篇 2018-05-10 20:58

相關推薦

  • DNS服務

    DNS主從服務器,子域實現,反向解析,DNS服務架構

    2018-06-02
  • 網絡基礎

    1、網絡的特征
    2、OSI模型的七層結構
    3、LAN組成

    Linux筆記 2018-06-19
  • centOS6.9 防火墻的關閉以及開啟

    有的時候,我們需要對系統的防火墻進行操作,今天小編就給大家講解一下如何開啟以及關閉CentOS6.9系統下的防火墻。 輸入:cat /etc/issue 查看版本 (一)通過service命令 service命令開啟以及關閉防火墻為即時生效,下次重啟機器的時候會自動復原。 查看防火墻狀態:service iptables status ,記得在CentOS6…

    Linux筆記 2018-04-20
  • 與時間查看有關的命令及參數用法

    chattr 改變一個文件的隱藏屬性-R 遞歸更改子目錄與文件的屬性-V 顯示詳細信息-f 忽略大部分錯誤信息-v version 設置文件的的檔案號碼mode 設置文件的隱藏屬性+/-[acdeijstuACDST]**** A 文件的atime不可修改這樣可以減少磁盤的IO,但用touch可以刷新jfujS 同步硬盤的IO選項 類似synca 只能追加 …

    Linux筆記 2018-04-15
  • shell腳本之判斷httpd是否有異常

    案例 以web為例 大全講解:如http為例 #/etc/init.d/httpd start????? 開啟httpd #lsof –i :80 [root@centos6 ~/bin]$curl -I -s -o /dev/null -w “%{http_code}\n” http://172.16.0.1 析:-I 是響應頭,響…

    Linux筆記 2018-05-20
  • Linux系統學習-第二周

    學習筆記

    2018-05-20
欧美性久久久久