1. 程式人生 > >Linux命令列與shell指令碼(12)--控制指令碼

Linux命令列與shell指令碼(12)--控制指令碼

處理訊號

  • Ctrl+C組合鍵會產生SIGINT訊號,會停止shell中當前執行的程序
  • Crtl+Z組建鍵會產生SIGTSTP訊號,停止shell中執行的任何程序,停止程序會讓程式繼續保留在記憶體中,並能從上一次停止的位置繼續執行
  • trap命令允許你來指定shell指令碼要觀察哪些Linux訊號並從shell中攔截。如果指令碼收到了trap命令中列出的訊號,它會阻止它被shell處理,而在本地處理它
trap "echo 'Sorry, I have trapped Ctrl+C' " SIGINT SIGTERM #捕捉訊號後echo一段字>符串
echo This is a test program
count=1
while (( $count <= 10 )) do echo "Times: $count"; count=$[ $count + 1 ]; sleep 5; done echo "Done";
  • trap可以捕捉指令碼的退出 trap "echo 'Goodbye' EXIT; #捕捉指令碼的退出

後臺模式執行指令碼

  • 在命令後面加個&符號,就可以在後臺執行指令碼 ./test.sh &

非控制檯下執行指令碼

  • 有時你會想在終端會話中啟動shell指令碼,然後讓指令碼一直以後臺模式執行,直到其完成,即使你退出了終端會話。可以使用nohup命令來實現。 nohup ./test.sh &

作業控制

  • jobs命令允許你檢視shell當前正在處理的作業。jobs列出的作業中,帶加號的作業會被當作預設的作業,帶減號的作業則會在當前預設作業完成處理的情況下成為下一個預設作業。任何時候都只有一個帶加號的作業和帶減號的作業。
  • 暫停的命令可以用bg命令加作業號,以後臺模式重啟,bg 2,使用fg以前臺模式重新 fg 2

調整優先順序

  • 排程優先順序是個整數值,從-20(最高優先順序)到+19(最低優先順序)。預設情況下,bash shell會以0優先順序啟動所有程序
  • nice命令允許你在啟動時調整一個命令的排程優先順序 nice -n 10 ./test.sh

定時執行作業

  • at命令允許指定Linux系統何時執行指令碼
  • atrm命令來刪除等待中的作業
  • cron程式來計劃要定期執行的作業
  • anacron程式可以解決cron程式無法執行Linux因關機而錯過的任務

啟動時執行

  • Linux開機過程

    1. 開始執行Linux系統時,Linux核心載入到記憶體中並執行。它做的第一件事是開始UNIX System V init過程或Upstart init過程,具體取決於版本。
    2. System V init過程會讀取/etc/inittab檔案。 inittab檔案會列出系統的執行級。不同的Linux執行級會啟動不同的程式和指令碼。
  • 大多數Linux發行版提供了一個本地開機檔案專門讓系統管理員新增開始時執行的指令碼,具體視版本而定。如Ubuntu,有/etc/rc.local

  • 還可以在 (1) .bash_profile 檔案中新增指令碼,此檔案會在新shell是新的登入時執行(2) .bashrc 當新shell啟動時,包括有新的登入,此檔案會執行(3)如果想為系統的所有使用者執行一個指令碼,可以在 /etc/bashrc 檔案中新增。