Linux01-BASH指令碼編程之訊號捕捉及任務計劃53

來源:互聯網
上載者:User

標籤:varname   word   cron   at   anacron   

一、指令碼編程知識點

    1、擷取變數中字元的長度:${#VARNAME}

    2、變數賦值:

        a)${parameter:-word}:如果parameter為空白或未定義,則變數展開為“word”;否則,展開為parameter的值;

    如:A=3

echo ${A:-30}

unset A

echo ${A:-30}

        b)${parameter:+word}:如果parameter為空白或未定義,不做任何操作;否則,則展開為“word”值;

    如:echo ${A:+30}

A=1 

echo ${A:+30}

        c)${parameter:=word}:如果parameter為空白或未定義,則變數展開為“word”,並將展開後的值賦值給parameter;

    如:unset A

echo {A:=30}

        d)${parameter:offset}:offest表示跳過幾個;

        e)${parameter:offset:length}:截取子串,從offset處的後一個字元開始,取lenth長的子串;

    如:A=‘Hello world’

echo {A:2:3}

    3、指令碼設定檔

/etc/rc.d/init.d/服務指令碼,服務指令碼支援設定檔:/etc/sysconfig/服務指令碼同名的設定檔

    4、變數範圍,局部變數:local VAR_NAME=

    如:編輯一個指令碼,注意其中函數定義加local和不加local的區別

#!/bin/bash

#

a=1

test() {

  local a=$[3+4]

}


test

for I in `seq $a 10`; do

  echo $I

done  

    5、命令mktemp:建立臨時檔案或目錄,避免與其他檔案名稱重複

        mktemp /tmp/file.XX(tmp目錄預設30天清理一次)

-d: 建立為目錄

二、訊號捕捉

    1、訊號:

        kill -SIGNAL PID

    1: HUP

    2: INT

    9: KILL

    15: TERM

    2、指令碼中,能實現訊號捕捉,但9和15無法捕捉

        Ctrl+c: SIGINT

    3、訊號捕捉命令:trap

trap ‘COMMAND‘ 訊號列表

        如:編輯一個指令碼,捕捉Ctrl+c訊號; 

#!/bin/bash

#

trap ‘echo "You go ..."‘ INT

while :;do

date

sleep 2

done

    4、一行執行多個語句,語句間用分號分隔;


指令碼執行個體:

    建立指令碼ping.sh,捕捉Ctrl+c訊號。並清理指令碼運行中產生的臨時檔案。

#!/bin/bash

#

NETWORK=192.8.8.

FILE=`mktemp /tmp/file.XX`

clearup() {

        echo "quit..."

        rm -rf $FILE

        exit 1

}

trap ‘clearup‘ INT

for I in `seq 10 200` ;do

        if ping -c 1 -w 1 $NETWORK$I &> /dev/null;then

                echo "$NETWORK$I is up." | tee >> $FILE

        else

                echo "$NETWORK$I is down."

        fi

done


三、任務計劃

    1、任務計劃方式:

        a)在未來的某個時間點執行一次某任務;

            at

            batch

b)周期性地執行某任務;

            cron


    2、at相關 

        a)使用格式:

            at 時間

            at> COMMAND

            at> Ctrl+d

        b)指定時間格式:

            絕對時間:HH:MM, DD.MM.YY  MM/DD/YY

            相對時間:now+#

            單位:minutes, hours, days, weeks

            模糊時間:noon, midnight, teatime

        c)選項:

            at -l = atq :顯示作業

            at -d AT_JOB_ID = atrm AT_JOB_ID :刪除某個作業

        d)/etc/at.deny和/etc/at.allow檔案

            控制使用at命令的使用者

        e)命令的執行結果:將以郵件的形式發送給安排任務的使用者;

    3、cron相關:

        cron:自身是一個不間斷啟動並執行服務,運行線上主機上。

        anacron:cron的補充,能夠實現讓cron因為各種原因在過去的時間該執行而未執行的任務,在恢複正常執行一次;

        a)cron: 

            a1)系統cron任務:定義在/etc/crontab中

                格式:分鐘 小時 天 月 周 使用者 任務

            a2)使用者cron任務:定義在/var/spool/cron/USERNAME中

                格式:分鐘 小時 天 月 周 任務

        b)時間的有效取值:

            b1)分鐘:0-59

            b2)小時:0-23

            b3)天:1-31

            b4)月:1-12

    b5)周:0-7,0和7都表示周日

        c)時間通配表示:

            c1)*:對應的所有有效取值:

                如:每小時的第三分鐘:3 * * * *

                    每周每小時的第三分鐘:3 * * * 7 

                    每天的12點13分:13 12 * * *

    每月6號12點13分:13 12 6 * *

    每年的7月6號12點13分:13 12 6 7 *

            c2),:離散時間點取值:

如:每小時的10分和40分:10,40 * * * *

    每周二周五的每小時的10分40分:10,40 * * * 2,5 

    每周二周五的2點的10分40分:10,40 02 * * 2,5 

            c3)-:連續時間點:

                如:每周一到周五的2點10分:10 02 * * 1-5

            c4)/#:對應取值範圍內每多久一次,

如:每3分鐘一次:*/3 * * * *

    每2小時:01 */2 * * *

    每隔1小時:* */2 * * *

    每隔一天:10 04 */2 * *

        d)執行結果將以郵件形式發送給管理員;

如:只把錯誤的執行結果發送給管理員:

    */3 * * * * /bin/cat /etc/fstab > /dev/null

e)cron的環境變數:cron執行的所有命令都去PATH環境變數指定的路徑下去找,在指令碼中添加:

#!/bin/bash

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

f)使用者任務管理命令:crontab

    -l:列出目前使用者的所有cron任務

    -e:編輯cron任務

    -r:移除所有cron任務

    -u USERNAME:管理其他使用者的cron任務

g)cron服務

    service crond status

            chkconfig --list crond

    4、anacron相關

a)/etc/anacrontab檔案欄位(最小時間單位是每天)

    第一段:過去幾天未執行

    第二段:開機後的第多少分鐘開始運行

    第三段:表示注釋資訊

    第四段:表示執行的任務

b)anacron服務預設是關閉的:

    service anacron status

cron任務練習:

    配置本機每隔兩天在淩晨3點20分備份一次/etc目錄,備份檔案存放至/backup/etc目錄。檔案名稱形如:etc-2012-06-20.tar.bz2

    20 03 */2 * * root /bin/tar -jcf /backup/etc/etc-`date +%F`.tar.bz2 /etc/*

本文出自 “Nick Liu的博文” 部落格,請務必保留此出處http://zkhylt.blog.51cto.com/3638719/1426060

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.