[英]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.