外壳脚本嵌套循环(在 for 循环中)不起作用



我的shell脚本,它正确执行其内部循环,但只执行一次外部循环。

请检查我的脚本,为什么它不起作用。

操作系统:亚马逊EC2 Linux

我创建了 shell 脚本,用于从目录中删除文件,文件名, 在我创建的 TXT 文件中不存在。

for entry in "/home/ec2-user/upload/upload/*"
do
exist=false
file="/home/ec2-user/upload/requiredjpg.txt"
while IFS= read -r line
do
if [ "$line" = "$entry" ]
then
echo "same"
else
echo "not same"
fi
done <"$file"
echo $exist
if [ $exist = false ]
then
echo $exist
fi
done

表达式"/home/ec2-user/upload/upload/*"从字面上解释为字符串/home/ec2-user/upload/upload/*。显然,您希望将其扩展到与通配符表达式匹配的路径数组。但是,在双引号中,星号字符具有不同的含义,-它仅用于shell参数扩展(这在所讨论的表达式中不存在(。

您真正需要的是文件名扩展。为了激活它,您只需将星号字符放在双引号之外:

"/home/ec2-user/upload/upload/"*

请注意,您不需要此特定字符串中的双引号,因为其中没有任何需要转义(引号(的特殊字符。

在内部循环中存在错位的"do"。"如果"语句应该放在它下面。

while IFS= read -r line 
do
if [ "$line" = "$entry" ]

最新更新