以下Shell脚本用于检查备份目录是否被命名为“ll_backup”,然后将其更改为等于文件RESULT.VAR的内容。 result.var文件被复制用于日志目的到另一个目录。 我在testing环境中工作,但是在制作过程中,它经历了一个奇怪的错误,我不能在我的生活中弄明白!
#!/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'
有一些问题,从轻微到致命(所有致命的问题都与“猫……而……读”行有关)。 让我按顺序经过他们:
抱怨,抱怨,抱怨…无论如何,这里是我的build议重写:
#!/bin/bash # Restores original directory name for next LogLogic Update #TCJ 6/1/09 FILE=result.var cd /home/nb-backup/backups/nb-st3000/ll_bkup_65.99.220.172/ if [ -d ll_bkup -a -f "$FILE" ]; then read RESULT <"$FILE" if [ ! -e "$RESULT" ]; then mv "ll_bkup" "$RESULT" mv "$FILE" /home/storegrid/scripts/results/result-`date +%y%m%d%s`.var fi fi exit 0
while循环是怎么回事? 它需要do ... done某处。
这里给你一些参考资料:
您需要将该行更改为如下所示:
cat result.var | while IFS=:; do read RESULT; done
这个cat和read在我看来,它设置$ RESULT等于文件“result.var”内容的最后一行的第一个单词
并删除这一行:
#!/bin/cat
因为它没有做任何事情。
在这种情况下你并不需要使用declare 。
在你的date命令周围使用$() 。 如果需要的话,它更具可读性,可以更容易嵌套。