寫在前面:案例、常用、歸類、解釋說明。(by jim)
ctrl+c組合鍵可以生產sigint訊號
ctrl+z組合鍵生產sigtstp訊號,停止程序後程式仍然留在記憶體中,能夠從停止的地方繼續執行。
捕獲訊號
#!/bin/bash
# testing output in a background job
trap "echo haha" sigint sigterm
echo "this is a test program"
count=1
while [ count -le 10 ] do echo "loop #
count -le 10 ] do echo "loop #
count"
sleep 10
count=[
[count + 1 ]
done
echo "this is the end of the test program"
(捕獲到資訊之後,就會輸出一段文字haha,指令碼不會被終止)
捕獲指令碼退出
除了在shell指令碼中捕獲訊號之外,還可以在shell指令碼退出時捕獲它們。
要捕獲shell指令碼退出,只需要向trap命令新增exit訊號:
#!/bin/bash
# testing the script exit
trap "echo byebye" exit
echo "this is a test program"
count=1
while [ count -le 5 ] do echo "loop #
count -le 5 ] do echo "loop #
count"
sleep 3
count=[
[count + 1 ]
done
echo "this is the end of the test program"
結果:this is a test program
loop #1
loop #2
loop #3
loop #4
loop #5
this is the end of the test program
byebye
(在執行結束之後,捕獲到,並輸出byebye字樣)
移除捕獲
要移除捕獲,使用破折號作為命令和想要恢復正常行為的訊號列表:
#!/bin/bash
# testing the script
trap "echo byebye" exit
echo "this is a test program"
count=1
while [ count -le 5 ] do echo "loop #
count -le 5 ] do echo "loop #
count"
sleep 3
count=[
[count + 1 ]
done
trap - exit
echo "this is the end of the test program"
(訊號捕獲移除後,指令碼將忽略訊號。但是,如果在移除捕獲之前收到訊號,將繼續執行捕獲)
test1 &
(以後臺模式執行)
在不使用控制台的情況下執行指令碼
有時需要從終端會話啟動shell指令碼,然後讓指令碼在結束之前以後臺模式執行,即使退出終端會話也是如此。
nohup命令,使用nohup命令時,關閉會話後指令碼將忽略任何終端會話傳送的sighup訊號。
作業控制
重啟、停止、終止和恢復作業的操作稱為作業控制(job control)。使用作業控制可以完全控制程序在shell環境中執行的方式。
參看作業
#!/bin/bash
# testing the script
echo "this is a test program $$"
count=1
while [ $count -le 10 ]
doecho "loop #$count"
sleep 10
count=$[ $count + 1 ]
done
echo "this is the end of the test program"
執行中進行中斷和一系列操作
[root@localhost shellscript]# test1
this is a test program 30016
loop #1
loop #2
loop #3
loop #4
^z[1]+ stopped test1
[root@localhost shellscript]# ./test1 >testout &
[2] 30026
[root@localhost shellscript]# jobs
[1]+ stopped test1
[2]- running ./test1 > testout &
(通過jobs指令進行捕獲)
nice命令可以在啟動命令時設定它的排程優先順序。
準確無誤地執行
at命令
batch命令
cron**
at -f test1 16:22(test1指令碼將與16:22執行)
列出排隊的作業
at -f test1 5pm
atq(將列出排隊的作業)
移除作業
atrm 8(移除作業8)
batch命令不是安排指令碼在預設的時間執行,而是安排指令碼在系統使用率低時執行。
如果需要指令碼在每天、每週或每月在同一時間執行,該怎麼辦呢?
Linux shell之如何控制指令碼
寫在前面 案例 常用 歸類 解釋說明。by jim ctrl c組合鍵可以生產sigint訊號 ctrl z組合鍵生產sigtstp訊號,停止程序後程式仍然留在記憶體中,能夠從停止的地方繼續執行。捕獲訊號 bin bash testing output in a background job tra...
linux shell之控制語句
shell支援的控制語句有break,continue,exit,shiftshift的作用是將位置引數引數左移一位,沒執行一次shift,2將變為 1,依次類推 root server0 programe chmod u x shift sh root server0 programe shift...
linux shell 控制指令碼
常用訊號 1,sighup 掛起程序 2,sigint 終止程序 3,sigout 停止程序 9,sigquit 無條件終止程序 15,sigterm 可能的話終止程序 17,sigstop 無條件停止程序,但不是終止程序 18,sigtstp 停止或暫停程序,但不終止程序 19,sigcont 繼...