0

我认为我的脚本做了它应该做的事情,起初我只是

#!/bin/bash
for file in /home/parallels/Desktop/trashcan/*
    do
    echo "Would you like to delete - " $file 
done 

然后我想添加明显缺失的功能,所以我现在有了

#!/bin/bash
for file in /home/parallels/Desktop/trashcan/*
do
    echo "Would you like to delete - " $file
    read line
    if [$line == y|Y]
        sudo rm $file
fi
done 

这就是我现在所处的位置,我最初尝试使用 case 语句而不是 if,因为我有一个带有我需要的 case 语句的工作脚本,但简单地将它复制过来会给我同样的错误 - 语法错误附近出乎意料的令牌,我得到了这个 fi 并完成了

4

3 回答 3

1

[是一个命令,所以它必须与它的第一个参数用空格分隔:

if [ "$line" = y ] || [ "$line" = Y ]; then
    sudo rm "$file"
fi

如果您正在使用bash,您可以将上面显示的标准用法替换为更简洁的

if [[ $line = [yY] ]]; then
    sudo rm "$file"
fi

正如 Keith Thompson 指出的那样,只有完全“y”或“Y”的答案才允许删除文件。要允许“是”或“是”,您可以使用

shopt -s extglob
if [[ $line = [yY]?(es) ]]

shopt只有早期版本才需要该行bash。从版本 4 开始,扩展模式是条件表达式中的默认值。)

于 2013-08-01T18:00:42.207 回答
0

我遇到了类似的问题。我在 Windows 中打开了 .sh 文件,Windows 在每一行的末尾添加了 CRLF。

我通过运行发现了这一点

cat --show-nonprinting filename.extension

例如

cat --show-nonprinting test.sh

然后,我使用

dos2unix filename.extension

例如

dos2unix myfile.txt
dos2unix myshell.sh
于 2014-06-25T13:12:45.313 回答
0

if 部分应该是

if [ "$line" = "y" ] || [ "$line" = "Y" ]
then
    sudo rm $file
fi
于 2013-08-01T18:00:34.937 回答