Shell語法—— while 條件語句

while 循環語句

while 循環語句語法格式為:

while < 條件表達式 >
do指令
done

有關腳本運行的相關用法

命令說明
sh file.sh &把 file.sh 腳本放到后臺運行(后臺運行腳本的常用方法)
ctl+c停止執行當前腳本或任務
ctl+z暫停執行當前腳本或任務
bg把當前腳本或任務放到后臺執行
fg把當前腳本或任務放到前臺執行。如果是多個腳本,需加編號,如: fg 2
jobs查看當前執行的腳本或任務
kill關閉執行的腳本任務

有關進程管理的 Linux 相關命令

命令說明
kill、killall、pkill殺掉進程
ps查看進程
pstree顯示進程狀態樹
top顯示進程
renice改變優先權
nohup用戶退出系統之后繼續工作
pgrep查找匹配條件的進程
strace跟蹤一個進程的系統調用情況
ltrace跟蹤進程調用庫函數的情況
小結

一. while 循環結構及相關語句綜合實踐

  1. while 循環的特長是執行守護進程,以及實現我們希望循環持續執行不退出的應用,適合用于頻率小于 1min 的循環處理其他的 while 循環幾乎都可以被 for 循環及定時任務 crontab 功能代替
  2. case 語句可以用 if 語句來替代,而在系統啟動腳本時傳入少量固定規則字符串的情況下,多用 case 語句,其他普通判斷多用 if 語句
  3. 一句換場景,if 語句、for 語句最常用,其次是 while(守護進程)、case(服務啟動腳本)

二. shell 腳本中各個語句的使用場景

  1. 條件表達式,用于簡短的條件判斷及輸出(文件是否存在,字符串是否為空等)
  2. if 取值判斷,多用于不同值數量較少的情況
  3. for 最常用于正常的循環處理中

案例一:
猜數字
隨機生成一個 100 以內的數字,讓用戶輸入數字來猜。游戲規則:輸入的必須是數字,猜錯時出現大小提示,才對時給出所用次數

#!/bin/bash
total=0
RETVAL=0
key=$((RANDOM%100))
echo "Let's play the guessing game!"
echo "key:$key"
panduan(){read -p "input num: " numexpr $num + 1 &>/dev/nullRETVAL=$?if [ $RETVAL -ne 0 ];thenecho "number number !!!"panduanfi
}guess(){((total++))if [ $num -lt $key ];thenecho "It is too small"panduanelif [ $num -gt $key ];thenecho "It is too big"panduanelseecho "Guess right"echo "yi gong cai le $total ci"exit 0fi
}
main(){panduanwhile truedoguessdone
}
main $*

案例二:
手機充值并發送短信。這個案例并沒有實際用途,可以當做一個綜合練習玩玩的
以下功能:

  1. 充值,但重復充值金額不累計,充值后立即查詢余額無法正常使用
  2. 發送短信,輸入發送的條數和短信內容,當金額不足時,可以選擇(y:充值,n:修改發送條數,o:返回菜單)
  3. 查詢余額,只有當使用發送功能選擇(o:返回菜單)時,查詢才可以生常使用
  4. 退出,結束當前腳本
#!/bin/bash
RETVAL=0
balance=0
menu(){
cat << EOF1) Recharge2) Send information3) Query4) exit
EOF
read -p " please enter a number: " num
case $num in1)echo "Welcome to chongzhi !"recharge;;2)echo "Welcome Check the balance !"send;;3)echo "Welcome to the query interface !"selects;;4)echo "Looking forward to your next arrival !"exit;;*)echo "Tips:{1|2|3|4}"menu
esac
}recharge(){read -p "please enter to RMB: " rmbexpr $rmb + 1 &>/dev/nullRETVAL=$?if [ $RETVAL -ne 0 ];thenecho "please input num"rechargefiecho "$rmbs  Rechargs success"((rmbs=$rmb + $balance))menu
}send(){while trueread -p "send several messages: " stripsexpr $strips + 1 &>/dev/nullRETVAL=$?if [ $RETVAL -ne 0 ];thenecho "please input num"sendfi((count=$strips * 15))doif [ $count -gt $rmbs ];thenecho "Insufficient amount !!!"read -p "Recharge(y|n|o) ?" orif [ $or = y -o $or = Y ];thenrechargeelif [ $or = n -o $or = N ];thensendelse menufielse read -p "Please input information content: " inputecho "sending:$input  send success"((balance=$rmbs - $count))echo "Balance: $balance"fi((rmbs=$rmbs - $count))done
}selects(){echo "Query:$balance"menu
}menu $*

案例三:
使用 while 守護進程的方式監控網站,每隔 10s 檢測一次網站是否正常

#!/bin/bash
. /etc/init.d/functions
count=0
url_list=(
www.baidu.com
blog.51cto.com
www.taobao.com
www.192.168.80.123.com
)waits(){echo -n "3s run after"for((i=0;i<3;i++))doecho -n .sleep 1doneecho 
}url(){waitsfor((i=0; i<`echo ${#url_list[*]}`; i++))dowget -o /dev/null -T 3 --tries=1 --spider ${url_list[$i]}>/dev/null 2>&1if [ $? -eq 0 ];thenaction "${url_list[$i]}" /bin/trueelseaction "${url_list[$i]}" /bin/falsefidone((count++))
}main(){while truedourlecho "------count:$count------"sleep 10done
}
main
while 循環按行讀文件

方法一:

cat 文件|while read line
do命令
done

方法二:

while read line
do命令
done<文件

案例一:
編寫一個 shell 腳本,實現 cat 命令的基本功能

#!/bin/bath
while read line
doecho $line
done</home/shell/fun.sh

案例二:
編寫 shell 腳本,根據短時間內的 PV 量封掉對應 ip,解決類 DoS 的功能

#!/bin/bash
count=0
while true
do
netstat -an|grep EST|awk -F '[ :]+' '{print $6}'|sort|uniq -c>ip.log
exec<ip.log
while read line
dopv=`echo $line|awk '{print $1}'`ip=`echo $line|awk '{print $2}'`if [ $pv -gt 10 ]&&[ `iptables -nL|grep $ip|wc -l` -eq 0 ];theniptables -t filter -I INPUT -s $ip -j DROPecho "sun success"fi
done((count++))
sleep 10
echo "---$count---"
done

轉載于:https://blog.51cto.com/12384628/2297292

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277109.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277109.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277109.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C變量常量

變量是指其值可以變化的量。計算機中&#xff0c;指令代碼、數據都存儲于內存中。變量也需要存儲在內存中。在計算機中&#xff0c;每個變量都被分配了一塊內存空間&#xff0c;在這些空間里存儲的就是變量的值。變量之所以可以變化&#xff0c;就是這個存儲空間可以存儲不同的…

slot

slot就是父組件把內容分發給子組件,插槽模板是slot&#xff0c;它是一個空殼子&#xff0c;因為它的顯示與隱藏以及最后用什么樣的html模板顯示由父組件控制。但是插槽顯示的位置確由子組件自身決定&#xff0c;slot寫在組件template的什么位置&#xff0c;父組件傳過來的模板將…

手把手教你可復用的SSO組件設計(設計篇)

周末陪女朋友去了&#xff0c;沒寫&#xff0c;告罪&#xff0c;上班后急忙補上。 這里說到了可復用得設計&#xff0c;所謂可復用就是指的&#xff0c;引入Dll&#xff0c;改改配置就能使用&#xff0c;而不是打開源代碼東改改西改改再來調試調試最后OK。我們這里盡量提高抽象…

Object類和常用的API

第一章Object類 1.1 概述 1),Object 類是Java語言所有“引用類型”的父類&#xff0c;括我們自定義的類、類庫中的類&#xff0c;數組&#xff0c;集合&#xff0c;字符串。 2),所有的的引用類型都從Object類繼承了一些方法&#xff1a; 如&#xff0c;1).toString() 2).equal…

前端能力劃分

前端學習學的是什么&#xff0c;在不同的階段我思考這個問題。 最近的結論是&#xff1a;前端學習要學的是前端的三大能力。工程能力&#xff0c;架構能力&#xff0c;開發能力。 工程能力 工程能力的范疇我認為涵蓋了項目模板的自動化生成、項目的自動化編譯和構建。 當然傳統…

英語學習網址

英文寫作網 &#xff08; www.4ewriting.com &#xff09;提供英文寫作的各種相關技巧&#xff0c;主要內容包括寫作語法文法、應用寫作、考試作文、寫作范文、背景文化 佳作欣賞、原創發表、英文blog、英語筆友、名師指導、寫作論壇等。 1. 英語學習&#xff1a;英語學習頻道(…

Anaconda+vscode+pytorch環境搭建

1、安裝Anaconda Anaconda指的是一個開源的Python發行版本&#xff0c;其包含了conda、Python等180多個科學包及其依賴項。在官網上下載https://www.anaconda.com/distribution/&#xff0c;因為服務器在國外會很慢&#xff0c;建議從清華鏡像https://mirrors.tuna.tsinghua.ed…

git learn

$ git config --global user.name "Your Name" $ git config --global user.email "emailexample.com"因為Git是分布式版本控制系統&#xff0c;所以&#xff0c;每個機器都必須自報家門&#xff1a;你的名字和Email地址。你也許會擔心&#xff0c;如果有人…

C#.NET 中的類型轉換

C# 出來也有些日子了&#xff0c;最近由于編程的需要&#xff0c;對 C# 的類型轉換做了一些研究&#xff0c;其內容涉及 C# 的裝箱/拆箱/別名、數值類型間相互轉換、字符的 ASCII 碼和 Unicode 碼、數值字符串和數值之間的轉換、字符串和字符數組/字節數組之間的轉換、各種數值…

AngularJS的學習--$on、$emit和$broadcast的使用

來源&#xff1a;http://www.cnblogs.com/CraryPrimitiveMan/p/3679552.html AngularJS中的作用域有一個非常有層次和嵌套分明的結構。其中它們都有一個主要的$rootScope(也就說對應的Angular應用或者ng-app)&#xff0c;然后其他所有的作用域部分都是繼承自這個$rootScope的&a…

17、【 商品管理模塊開發】——后臺商品圖片的springmvc和富文本上傳以及ftp文件服務器的開發...

1、FTP文件服務器的搭建&#xff1a; 軟件下載&#xff1a;ftpserver&#xff1b; image.png瀏覽器訪問&#xff1a;ftp://127.0.0.1/image.png點擊任意一個文件&#xff0c;就可以看到我們圖片啦&#xff0c;前提是前面指定的目錄里面有圖片文件~ image.png2、接口編寫&#x…

我們常說……

從過完元旦到現在&#xff0c;乖乖在公司辦公的時間很少&#xff0c;好多時候都是在外地&#xff0c;或者是在路上、車上。有n多次&#xff0c;乖乖一天至少坐6個小時的車&#xff0c;回到家里都是帶著一身的疲憊&#xff0c;雖然他并不表現出來&#xff0c;但是因為長時間坐車…

那些油管上高質量的學習編程的頻道 之一

國內確實有很多不錯的學習編程的網站或者個人博客&#xff0c;但是對于初學者&#xff0c;往往更希望獲得那種引導性的教學&#xff1a;即一步一步的教你跟著操作的教學。這種教學最好的方式當然就是視頻了。畢竟在Apple Podcast上超火爆的斯坦福教授iOS開發的課程也是這種形式…

SQL Server 2005 Express附加(Attach)的數據庫為“只讀”的解決方法

我的操作系統為Windows 2003 Server , 文件系統NTFS, 在SQL Server 2005 Express 上附加(Attach)從另外一臺電腦Copy過來的數據庫后&#xff0c;數據庫為“只讀”。如下圖&#xff1a; 解決辦法&#xff1a; 打開 SQL Server Configuration Manager, 打開SQL Server SQLEXPRESS…

[導入]blog年終小結

1. 2006-11-30 注冊了本域名thws.cn&#xff0c;喜歡的thw.com被注冊了&#xff0c;只好退而就其次了&#xff1b;2. 12-20在alexa上登陸站點&#xff0c;綜合排名從起初490多萬上升到現在的590327,下期566,880&#xff1b;3. 2007-1-11適逢google PR更新&#xff0c;PR值從0變…

Maven學習筆記(2) --mvn archetype:create 說明

前面一篇相對比較簡單。 看完前面的內容我們會來到實戰部分&#xff0c;也就是創建一個簡單的項目 1 mvn archetype:create -DgroupIdorg.sonatype.mavenbook.ch03 \ 2 -DartifactIdsimple \ 3 -DpackageNameorg.sonatype.mavenbook 于是我們得到了步入Maven領域的第一份打擊 真…

UI設計:C4D作品案例分享

中文名4D電影&#xff0c;外文名CINEMA 4D&#xff0c;研發公司為德國Maxon Computer&#xff0c;特點為極高的運算速度和強大的渲染插件&#xff0c;使用在電影《毀滅戰士》、《阿凡達》中&#xff0c;獲得貿易展中最佳產品’的稱號&#xff0c;前身為FastRay。CINEMA 4D擁有快…

又是一個人的情人節

又是一個人的情人節 上午送完弟弟返鄉的車&#xff0c;回家的心情也越來越迫切&#xff0c;很想立刻回到家里&#xff0c;和老爸老媽嘮叨嘮叨&#xff0c;和一年未見的堂兄弟一起喝喝酒&#xff0c;玩耍玩耍&#xff0c;那種心情真是沒有辦法形容&#xff0c;在我個人看來&…

C# Global.asax.cs 定時任務

定時執行更新Redis緩存操作 protected void Application_Start(object sender, EventArgs e) {Timer timer new Timer();timer.Enabled true;timer.Interval 3600000; //執行間隔時間,單位為毫秒; 這里實際間隔為1小時 timer.Start();timer.Elapsed new System.Timers.Ela…

給div拼接html 拼接字符串

簡單描述&#xff1a;拼接html 拼接字符串&#xff0c;說實話&#xff0c;拼接這種東西我自己弄&#xff0c;得花費很多時間&#xff0c;主要是轉義字符&#xff0c;單引號&#xff0c;雙引號這種小細節調整起來比較麻煩&#xff0c;一旦疏忽多了少了一個符號&#xff0c;頁面就…