作者LIAR (玻璃做的大叔)
看板Linux
標題[問題] 迴圈中分號的功能
時間Sat Feb 11 19:05:00 2017
http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#ifthen
if [ 條件判斷式 ]; then
當條件判斷式成立時,可以進行的指令工作內容;
fi <==將 if 反過來寫,就成為 fi 啦!結束 if 之意!
if這邊有分號
while [ condition ] <==中括號內的狀態就是判斷式
do <==do 是迴圈的開始!
程式段落
done <==done 是迴圈的結束
for var in con1 con2 con3 ...
do
程式段
done
這個就沒有
至於case就是一定要兩個分號。
好!我之前HPC考試要交兩個script,當時想也沒想,就把大腸包小腸弄出三個
while和if的迴圈,寫在同一行,每個do或done前面都用分號隔開,順利執行。
後來回家整理一下覺很難讀,所以換成多行,這時才注意到鳥哥的範例中
只有if的then前面有分號,不過換成多行後我加上分號也沒有影響執行,
所以好奇分號的功能是甚麼?是必要的嗎?
w|tr -s ' '|cut -d ' ' -f1,4,5|\
while read U L T ;do
if [ `echo $T|cut -d ':' -f1` -ge 30 ] ;then
ps aux|grep "sshd: $U"|grep $L|tr -s ' '|cut -d ' ' -f2\
|while read KPID ;
do
kill -15 $KPID ;
done ;
fi ;
done
這是我整理後的格式,感覺分號只是當成斷行用的?如果"then","do","fi"這類的
寫在不同行就可以不用寫分號,這樣對嗎?
--
"Don't hate the player. Hate the game."
當看到哪個名人賺了大錢,領到高額補助或利息,不要去指責他,
而是要指責那個制度、創造那個制度的人,以及默許那個制度的人。
不然你認為一個人不領18%或是一個人不炒房價,就會改變整體環境嗎?
還不如改變【修改制度的人】,才能從根源改變一切。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.47.36
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1486811106.A.D26.html
→ sasoric: 結論正確 02/11 21:41
→ HamalAri: 你的結論是對的,可是你還是多寫了很多多餘的分號 02/11 22:16
→ LIAR: 請問是哪些?我就是在分行的時候才發現分的很糟糕,看不懂。 02/11 23:06
→ LIAR: 我是把原本的一行插入反斜線+enter(第一while前面),剩下就 02/11 23:11
→ LIAR: tab或enter,我是猜$KPID後面還有之後的done那些可以刪掉?Y 02/11 23:12
→ HamalAri: y; 另外個人覺得用迴圈和 read 來讀變數很多餘 02/12 00:29
→ LIAR: 題目是要我們把閒置30分鐘的ssh踢掉,請問有更好的寫法嗎? 02/12 00:44
推 goldie: 1.) 位於行尾最後一字的分號(;)是多餘的 02/12 14:12
→ goldie: ,除非是switch case裡每個case 結尾必要的雙分號(;;) 02/12 14:12
→ goldie: ,因為分號(;)只是用來把多行指令串在同一行用的。 02/12 14:12
推 goldie: 2.) 因為 kill 一次可砍不只一個PID (參考: man kill) 02/12 14:22
→ goldie: ,所以第二層的 while loop 可改寫成「| xargs -r kill - 02/12 14:22
→ goldie: 15」 02/12 14:22
→ goldie: ,而且這樣 kill 指令只會被呼叫一次,效能比較好。 02/12 14:22
推 goldie: 不小心被斷行了:「| xargs -r kill -15」 02/12 14:26
→ LIAR: 謝謝,我去改寫看看 02/26 11:09