Linux shell之如何控制指令碼

2021-09-22 11:01:04 字數 2928 閱讀 8427

寫在前面:案例、常用、歸類、解釋說明。(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 繼...