日期:2014-05-16  浏览次数:20736 次

求助,shell脚本While语句问题
代码如下
#!/bin/sh
echo "This script is to delete the autosaves that mednafen create"
echo "Is this OK?"
select var in "Yes" "No";do
break
done
[ $var = No ] && exit
while [ "$var" != "EXIT" ]
do
ls /home/master/.mednafen/mcs < filelist.txt
echo "What file would you like to delete?"
select var in `cat filelist.txt` "ALL" "EXIT";do
break
done
[ $var == ALL ] && { rm filelist.txt rm /home/master/.mednafen/mcs/* exit }
[ $var == EXIT ] && { rm filelist.txt exit }
rm /home/master/.mednafen/mcs/$var
done

运行中会出现第一个script选项,选No的话程序正常退出;选Yes的话输出
line 18: syntax error near unexpecten token `done`
line 18: `done`
网上查了一下,说是^M什么的,好像不是这个问题。我想大概是我的while语句有问题,希望哪位能帮解决一下。
------解决方案--------------------
[ $var == ALL ] && { rm filelist.txt rm /home/master/.mednafen/mcs/* exit }
[ $var == EXIT ] && { rm filelist.txt exit }

[ $var == ALL ] &&  rm filelist.txt &&rm /home/master/.mednafen/mcs/*&& exit 
[ $var == EXIT ] && rm filelist.txt&& exit 


------解决方案--------------------
#!/bin/sh
echo "This script is to delete the autosaves that mednafen create"
echo "Is this OK?"
select var in "Yes" "No"; do
    break
done
[ "$var" = "No" ] && exit
while [ "$var" != "EXIT" ]; do
    ls /home/master/.mednafen/mcs < filelist.txt
    echo "What file would you like to delete?"
    select var in `cat filelist.txt` "ALL" "EXIT"; do
        break
    done
    if [ "$var" == "ALL" ]; then
        rm filelist.txt
        rm /home/master/.mednafen/mcs/*
        exit
    elif [ "$var" == "EXIT" ]; then
        rm filelist.txt
        exit
    fi
    rm /home/master/.mednafen/mcs/$var
done