2011-11-24 180 views
1

嗨#1的社区,的Linux Shell脚本

我在这里面临的一个问题与我设计我的shell脚本...

#!/bin/sh 
while : 
do 
clear 
echo "----------------------------- 
-----------" 
echo "***************Main Menu****************" 
echo "----------------------------------------" 
echo "1. Backup Word Document" 
echo "2. Backup Spreadsheet" 
echo "3. Backup Picture" 
echo "4. Restore Word Documents" 
echo "5. Restore Spreadsheet" 
echo "6. Restore Picture" 
echo "7. EXIT" 

echo "----------------------------------------" 
pause 
echo -n "Enter your menu choice [1-7]:" 
read yourch 
case $yourch in 
1) echo ; tar -cvf /Files/*.doc /WP/ ; read ;; 

1) echo "Today is"; date +%Y%m%d-%H:%M 2>&1 ; echo "Press a key..." ; read ;; 

2) echo ; tar -cvf /Files/*.xls /EXCEL/ ; read ;; 

2) echo "Today is"; date +%Y%m%d-%H:%M 2>&1 ; echo "Press a key..." ; read ;; 

3) echo ; tar -cvf /Files/*.jpg /PICS/ ; read ;; 

3) echo "Today is"; date +%Y%m%d-%H:%M 2>&1 ; echo "Press a key..." ; read ;; 

4) echo ; tar xvzf /WP/*.doc ; read ;; 
5) echo ; tar xvzf /EXCEL/*.xls ; read ;; 
6) echo ; tar xvzf /PICS/*.jpg ; read ;; 
7) exit 0 ;; 

*) echo "Please press a number between 1 to 7"; 

esac 
done 

A错误显示“CRIPT:行21:语法错误'在'cript:第21行:'case $ yourch

有没有人知道如何通过这个错误?基本上,我试图做的是能够备份一组文件,文件名为“.doc”,并将它们放在备份文件夹中。然后我可以将文件从这个文件夹恢复到另一个文件夹。

+0

尝试使用'sh -vx yourscript.sh'运行脚本 –

+0

rdiff_backup(http://www.nongnu.org/rdiff-backup/)甚至是vanilla rsync有什么问题? – Sardathrion

+0

我这样做,它运行脚本,直到 – Rosco

回答

2

这适用于RHEL 4 ES,使用/ bin/sh作为解释器。但是,case语句将只执行第一个匹配。因此,对于选项1,2和3中的每一个,您都有两条线执行,只有第一条线被执行。因此,而不是...

1) echo ; tar -cvf /Files/*.doc /WP/ ; read ;; 
1) echo "Today is"; date +%Y%m%d-%H:%M 2>&1 ; echo "Press a key..." ; read ;; 

...你可能要更多的东西是这样的:

1) echo 
    tar -cvf /Files/*.doc /WP/ 
    echo Today is `date +%Y%m%d-%H:%M 2>&1` 
    read -p "Press <enter> to continue..." ;; 

根据你的解释,你也可以有你的*)案件并没有结束中存在的问题;;

但是,这些建议中的第一个是调试另一个问题,第二个是长镜头。如果您在Windows中编辑了该文件并将其复制到了一个粘贴缓冲区中,那么您可能会在第21行(可能更多)中包含不正确的行结束符。解决方法是对脚本运行dos2unix命令 - 即dos2unix /path/to/script.sh