linux利用訊號與執行在系統中的程序進行通訊。我們可以利用這些訊號來停止、啟動、終止程序。可以通過對指令碼進行程式設計,使其在收到特定訊號時執行某些命令,從而控制shell指令碼的操作。
最常見訊號訊號值
描述快捷鍵
1sighup
掛起程序
2sigint
終止程序
ctrl+c
3sigquit
停止程序(暫停)
ctrl+z
9sigkill
無條件終止程序
# sleep 100 ###休眠100秒
^c ###ctrl+c終止了以上命令
## sleep 100 ###休眠100秒
^z ###ctrl+z暫停了以上命令
[1]+ stopped sleep 100
# ps -l ###使用ps命令可以檢視作業的狀態
f s uid pid ppid c pri ni addr sz wchan tty time cmd
0 s 0 41191 41184 0 80 0 - 6672 - pts/0 00:00:00 bash
0 t 0 41253 41191 0 80 0 - 1820 - pts/0 00:00:00 sleep ###t代表暫停
0 r 0 41279 41191 0 80 0 - 11351 - pts/0 00:00:00 ps
# kill -9 41253 ###你可以用kill命令傳送乙個sigkill訊號(9)來終止它
# ###終止了以後螢幕不會有任何輸出,但是按下回車就會顯示
[1]+ killed sleep 100
trap命令允許你來指定shell指令碼需要攔截的linux訊號。當指令碼收到了trap命令中列出的訊號,就會交由本地處理,轉化成其他命令進行執行。
trap命令的格式是:
trap commands signals trap 命令 訊號
cat jbkz002.sh
#!/bin/bash
trap "echo 'sorry! now ctrl+c will no over this script!'" sigint
echo "this is a test script."
###trap將sigint也就是ctrl+c轉變其他命令
count=1
while [ $count -le 10 ]
doecho "loop #$count"
sleep 1
count=$[ $count + 1 ]
done
# ./jbkz002.sh
this is a test script.
loop #1
loop #2
loop #3
^csorry! now ctrl+c will no over this script! ###嘗試按下ctrl+c後沒有退出
loop #4
loop #5
loop #6
^csorry! now ctrl+c will no over this script! ###嘗試按下ctrl+c後沒有退出
loop #7
loop #8
loop #9
loop #10
&&& 捕獲指令碼退出
# cat jbkz003.sh
#!/bin/bash
trap "echo 'sorry! this script is over!'" exit ###使用exit就能捕獲指令碼的退出
echo "this is a test script."
count=1
while [ $count -le 3 ]
doecho "loop #$count"
sleep 1
count=$[ $count + 1 ]
done
# ./jbkz003.sh
this is a test script.
loop #1
loop #2
loop #3
sorry! this script is over!
如果你想在不同位置進行不同的捕獲與命令,那你只需要在指令碼內重新使用trap命令就可以了。
如果你需要刪除某個捕獲,那就請使用 -- 。
trap "echo '***xx'" sigint ##捕獲
trap -- sigint ##使用 -- 取消捕獲(也可以使用trap - sigint)
&&& 後台執行指令碼
只需要在命令後面加上&即可。
# cat jbkz004.sh
#!/bin/bash
count=1
while [ $count -le 10 ]
doecho "loop #$count"
date
sleep 1
count=$[ $count + 1 ]
done > jbkz004.log
# ./jbkz004.sh & ###後面跟上&就成了後台執行
[1] 43341 ###顯示此程序pid
# cat jbkz004.log ###檢查指令碼運**況,結果ok
loop #1
fri sep 25 14:54:33 cst 2020
loop #2
fri sep 25 14:54:34 cst 2020
loop #3
fri sep 25 14:54:35 cst 2020
......
有時你會想在終端會話中啟動shell指令碼,然後讓指令碼一直以後臺模式執行到結束,即使你退
出了終端會話。這種情況你可以使用nohup命令。
# nohup ./test.sh & ###格式如左,非常簡單。
[1] 8356
###nohup會自動將stdout和stderr的訊息重定向到nohup.out檔案中。
以上就是第五話內容。 shell 指令碼第五彈
1.shell指令碼程式設計 1.指令碼是 c語言 程式設計 shell 指令碼 只作用於linux作業系統 以間隔多行命令 2.功能 批量處理檔案 自動去做某些功能 date,who,ls 處理日誌資訊 備份 刪除原日誌 上傳備份檔案 週期性計畫任務 3.學習方法 linux的命令 lamp we...
shell指令碼學習 01 指令碼基礎
一 shell概念 shell是一種作為使用者與linux系統之間的操作介面程式,允許使用者向作業系統輸入需要執行的命令的一種高階 解釋性程式語言。二 shell的種類 bourne shell sh c shell csh korn shell ksh bourne again shell bas...
shell指令碼學習(五)
1 統計檔案的行數 單詞數 字元數 1 行數 wc l file cat file wc l 2 單詞數 wc w file cat file wc w 3 統計字元數 wc c file cat file wc c 4 不跟任何引數時,三者都列印,列印順序為行數 單詞數 字元數 wc file h...