[問題] 迴圈中分號的功能

看板Linux作者 (玻璃做的大叔)時間7年前 (2017/02/11 19:05), 編輯推噓3(3013)
留言16則, 4人參與, 最新討論串1/1
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

02/11 21:41, , 1F
結論正確
02/11 21:41, 1F

02/11 22:16, , 2F
你的結論是對的,可是你還是多寫了很多多餘的分號
02/11 22:16, 2F

02/11 23:06, , 3F
請問是哪些?我就是在分行的時候才發現分的很糟糕,看不懂。
02/11 23:06, 3F

02/11 23:11, , 4F
我是把原本的一行插入反斜線+enter(第一while前面),剩下就
02/11 23:11, 4F

02/11 23:12, , 5F
tab或enter,我是猜$KPID後面還有之後的done那些可以刪掉?Y
02/11 23:12, 5F

02/12 00:29, , 6F
y; 另外個人覺得用迴圈和 read 來讀變數很多餘
02/12 00:29, 6F

02/12 00:44, , 7F
題目是要我們把閒置30分鐘的ssh踢掉,請問有更好的寫法嗎?
02/12 00:44, 7F

02/12 14:12, , 8F
1.) 位於行尾最後一字的分號(;)是多餘的
02/12 14:12, 8F

02/12 14:12, , 9F
,除非是switch case裡每個case 結尾必要的雙分號(;;)
02/12 14:12, 9F

02/12 14:12, , 10F
,因為分號(;)只是用來把多行指令串在同一行用的。
02/12 14:12, 10F

02/12 14:22, , 11F
2.) 因為 kill 一次可砍不只一個PID (參考: man kill)
02/12 14:22, 11F

02/12 14:22, , 12F
,所以第二層的 while loop 可改寫成「| xargs -r kill -
02/12 14:22, 12F

02/12 14:22, , 13F
15」
02/12 14:22, 13F

02/12 14:22, , 14F
,而且這樣 kill 指令只會被呼叫一次,效能比較好。
02/12 14:22, 14F

02/12 14:26, , 15F
不小心被斷行了:「| xargs -r kill -15」
02/12 14:26, 15F

02/26 11:09, , 16F
謝謝,我去改寫看看
02/26 11:09, 16F
文章代碼(AID): #1Odk_Yqc (Linux)