红帽 5.3 企业版
以下 Shell 脚本用于检查并查看备份目录是否名为“ll_backup”,然后将其更改为与文件 RESULT.VAR 的内容相同。出于日志目的,将 result.var 文件复制到另一个目录。我在测试环境中进行了此工作,但在生产中却遇到了一个奇怪的错误,我一生都无法弄清楚!
脚本:
#!/bin/bash
#!/bin/cat
# Restores original directory name for next LogLogic Update
#TCJ 6/1/09
declare RESULT
declare FILE
FILE=result.var
cd /home/nb-backup/backups/nb-st3000/ll_bkup_65.99.220.172/
if [ -d ll_bkup ]
then
cat result.var | while IFS=: read RESULT
mv "ll_bkup" "$RESULT"
mv result.var /home/storegrid/scripts/results/result-`date +%y%m%d%s`.var
else
exit 0
fi
exit 0
结果:
nb-script-restorellbackup.sh:第 14 行:意外标记附近的语法错误
else' nb-script-restorellbackup.sh: line 14:
else'
有许多问题,从轻微到致命(所有致命问题都与“cat...while...read”行有关)。让我按顺序浏览它们:
抱怨,抱怨,抱怨......无论如何,这是我提议的重写:
while 循环是怎么回事?它需要
do ... done
某个地方。这里有一些参考资料供您参考:
您需要将行更改为如下所示:
在我看来
cat
,read
它设置 $RESULT 等于文件“result.var”内容的最后一行的第一个单词并删除这一行:
因为它什么也没做。
你真的不需要
declare
在这种情况下使用。$()
在您的日期命令周围使用。如有必要,它更具可读性并且可以更容易地嵌套。