我认为我的脚本完成了它的意图,起初我只是
#!/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语句,但只是复制它给我同样的错误 - 未完成令牌附近的语法错误,我得到了这个for fi并完成了
答案 0 :(得分: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开始,扩展模式是条件表达式中的默认模式。)
答案 1 :(得分:0)
if部分应为
if [ "$line" = "y" ] || [ "$line" = "Y" ]
then
sudo rm $file
fi
答案 2 :(得分:0)
我遇到了类似的问题。我在Windows中打开了.sh文件,Windows在每一行的末尾添加了CRLF。
我通过运行
找到了这个cat --show-nonprinting filename.extension
E.g。
cat --show-nonprinting test.sh
然后,我使用
转换它dos2unix filename.extension
E.g。
dos2unix myfile.txt
dos2unix myshell.sh