看板 Linux 關於我們 聯絡資訊
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