簡體   English   中英

重擊多個if語句以在不同的日期運行不同的腳本變體

[英]Bash multiple if statements to run different variants of script on different days

我正在嘗試編寫一個bash腳本,以使用rsync運行每日增量備份,但備份將進入星期一,星期二,星期三的文件夾。

因此,與其讓6個腳本在cron中運行,不如我想使用1個腳本使用ifs來確定它是否是星期一,請運行此命令。 但是如果它在星期三運行,並且不是周一至周五退出。

我是bash的新手,所以我可以看看是否可以執行此操作,但是我不確定如何設置它。

以下是到目前為止的內容。 目前非常粗糙。 一旦對ifs進行排序,我將開始清理其余的代碼。

#!/bin/bash

if [[ $(date +%u) -e 1 ]]
then
rsync -avz --delete --exclude backup --exclude virtual_machines /home /home/backup/files/backupdaily/monday
else
if [[ $(date +%u) -e 2 ]]
then
    rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/tuesday
else
if [[ $(date +%u) -e 3 ]]
then
    rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/wednesday
elselse
if [[ $(date +%u) -e 4 ]]
then
    rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/thursday
elselse
if [[ $(date +%u) -e 5 ]]
then
    rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/friday
else
if [[ $(date +%u) -e 6 ]]
then
    rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/saturday
else
    exit

fi

在compileonline.com上測試時,這個腳本的工作原理有些困惑

$bash -f main.sh 
sending incremental file list rsync: opendir "/home/beach" failed: Permission denied     (13) rsync: opendir "/home/com" failed: Permission denied (13) 
rsync: opendir "/home/railo" failed: Permission denied (13) 
rsync: opendir "/home/webmaster" failed: Permission denied (13) 
rsync: mkdir "/home/backup/files/backupdaily/Thursday" failed: No such file or directory (2) 
rsync error: error in file IO (code 11) at main.c(576) [receiver=3.0.6] 
rsync: connection unexpectedly closed (9 bytes received so far) [sender] 
rsync error: error in rsync protocol data stream (code 12) at io.c(600)

但是如果我嘗試運行它,我得到:

[root @ san-prod-01 backup]#bash ./backup_daily_v3.sh:未找到命令h:第4行:'/ backup_daily_v3.sh:第5行:'/ backup_daily_v3.sh中意外令牌附近的語法錯誤:第5行:案例$ WeekDay in –

有什么建議么?

像這樣嗎

backup_dir=/home/backup/files/backupdaily
weekday=$(LC_ALL=C date +%A | tr 'A-Z' 'a-z')

case ${weekday} in
    monday)
        rsync -avz --delete --exclude backup --exclude virtual_machines /home "${backup_dir}"/monday
        ;;
    tuesday|wednesday|thursday|friday)
        rsync -avz --exclude backup --exclude virtual_machines --link-dest="${backup_dir}"/monday /home "${backup_dir}/${weekday}"
        ;;
    *)
        ;;
esac

我建議讓cron啟動此腳本。 此外,在這種情況下(pun?),使用情況會更好。

#!/bin/bash
case $(date +%u) in

    1) # Monday  
        rsync -avz --delete --exclude backup --exclude virtual_machines /home /home/backup/files/backupdaily/monday
        ;;
    2) # Tuesday  
        rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/tuesday
        ;;
    3) # Wednesday
        rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/wednesday
        ;;  
    4) # Thursday
        rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/thursday
        ;;
    5) # Friday
        rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/friday
        ;;
    6) # Saterday
        rsync -avz --exclude backup --exclude virtual_machines --link-dest=/home/backup/files/backupdaily/monday /home /home/backup/files/backupdaily/saturday
        ;;
    7) # Sunday
        exit 0
        ;;
esac

[更新]更新了腳本以在工作日中使用小寫字母。[/更新]由於某些天運行的命令大致相同,因此可以將腳本縮短為:

#!/bin/bash
LinkDest=/home/backup/files/backupdaily/monday
WeekDay=$(date +%A |tr [A-Z] [a-z])

case $WeekDay in

    monday) rsync -avz --delete --exclude backup --exclude virtual_machines /home /home/backup/files/backupdaily/monday
        ;;
    tuesday|wednesday|thursday|friday|saturday)   rsync -avz --exclude backup --exclude virtual_machines --link-dest=$LinkDest /home /home/backup/files/backupdaily/$WeekDay
        ;;
    sunday)    exit 0
        ;;
esac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM