linux 定時執行shell指令碼

2021-07-25 12:49:58 字數 2368 閱讀 2792

今天從網上看到了一篇文章,將其收藏。

在oracle 中可以利用dbms_job包定時執行pl/sql、sql過程,在像備份等需要在作業系統級定時任務只能採用crontab來完成 

本文講述crontab具體用法,以供備忘.

利用crontab來定時執行任務大致有如下三步:

1、編寫shell指令碼

2、利用crontab加入到定時任務佇列

3、檢視作業完成情況

一、如何建立shell指令碼

linux下有很多不同的shell,但我們通常使用bash(bourne again shell)進行程式設計,因為bash是免費的並且很容易使用

程式必須以下面的行開始(必須方在檔案的第一行):

#! /bin/sh

符號#!用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用/bin/sh來執行程式。

當編輯好指令碼時,要想執行指令碼,必須使指令碼可以執行

下面的命令,可以使指令碼可以執行

chmod +x filename

然後可以輸入./filename來執行指令碼。

注:在shell程式設計時,#符號表示注釋,只該行結束為止。在編寫程式時,最好使用注釋。

變數shell下所有變數都以字串表示,變數不需要宣告,直接使用。直接對變數進行賦值

a="hello world"

取出變數用$符號,如:

#! /bin/sh

a="hello world"

echo "a is:"

echo $a

執行該指令碼輸出結果如下:

a is :

hello world

shell 命令和流程控制

1)unix命令

在shell中可以使用任意的unix命令,但這裡介紹一些更常用的unix命令

echo ''this is a example" :列印輸出到螢幕

ls:列出檔案列表

cp sourcefile destinationfile :拷貝檔案

2)概念:管道,重定向和backtick

這些不是系統命令,但他們經常使用,很重要的

管道 | 將乙個命令的輸出作為另外乙個命令的輸入

grep -qa compat | more

重定向:將命令的結果輸出到檔案,而不是標準輸出(螢幕)

〉寫入檔案並覆蓋舊檔案

〉〉輸出追加到檔案的尾部,保留舊檔案。

3)流程控制

if ... ; then

...else if ...;then

...else

...fi

通常情況下,可以通過測試命令來對條件進行測試,比如可以比較字串,判斷檔案是否存在及是否有執行許可權等等

通常用「 [ ] 「來表示條件測試,注意這裡空格很重要,要確保方括號空格

[ -f "somefile" ] :判斷是否是乙個檔案

[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權

[ -n "$var" ] :判斷$var變數是否有值

[ "$a" = "$b" ] :判斷$a和$b是否相等

例項  一般程式設計步驟

任何優秀的指令碼都應該有幫助和輸入引數,並且寫乙個偽指令碼framework.sh,該指令碼包含了大多數指令碼都需要的框架結構。

是個非常不錯的注意。這時候,我們編寫指令碼時只需要執行cp命令即可

cp framework.sh myscript

然後插入自己需要的函式就可以了

除錯最簡單的除錯命令當然是使用echo命令。您可以使用echo在任何懷疑出錯的地方列印任何變數值。這也是絕大多數的shell程式設計師要花費80% 的時間來除錯程式的原因。shell程式的好處在於不需要重新編譯,插入乙個echo命令也不需要多少時間。

shell也有乙個真實的除錯模式。如果在指令碼"strangescript" 中有錯誤,您可以這樣來進行除錯:

sh -x strangescript

這將執行該指令碼並顯示所有變數的值。

shell還有乙個不需要執行指令碼只是檢查語法的模式。可以這樣使用:

sh -n your_script

這將返回所有語法錯誤。

redhat linux

as 3 下定時執行任務

二、cron排程程序

三,可以利用重定向命令來輸出執行結果

> ,>>

四、具體例項

sh指令碼檔案:test.sh

#! /bin/sh

su - oracle << eof

sqlplus test/test@test @"test.sql"

sql指令碼檔案:test.sql

insert into test_tb values (sysdate);

crontab檔案:

linux 定時執行shell

第一步 安裝 crontab 命令 yum y install vixie cron 擴充套件 service crond start 啟動服務 service crond stop 關閉服務 service crond restart 重啟服務 service crond reload 重新載入配...

linux 定時執行shell指令碼

在oracle 中可以利用dbms job包定時執行pl sql sql過程,在像備份等需要在作業系統級定時任務只能採用crontab來完成 本文講述crontab具體用法,以供備忘.在oracle 中可以利用dbms job包定時執行pl sql sql過程,在像備份等需要在作業系統級定時任務只能...

linux 定時執行shell指令碼詳解

在oracle 中可以利用dbms job包定時執行pl sql sql過程,在像備份等需要在作業系統級定時任務只能採用crontab來完成 本文講述crontab具體用法,以供備忘.在oracle 中可以利用dbms job包定時執行pl sql sql過程,在像備份等需要在作業系統級定時任務只能...