我的shell脚本,它可以正确执行其内部循环,但只能执行一次其外部循环。
请检查我的脚本,为什么它不起作用。
OS:Amazon 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
答案 0 :(得分:1)
表达式"/home/ec2-user/upload/upload/*"
从字面上解释为字符串/home/ec2-user/upload/upload/*
。显然,您希望将其扩展为与通配符表达式匹配的路径数组。但是,在双引号中,星号字符具有不同的含义,即仅在shell parameter expansions中使用(在相关表达式中不存在。)
您真正需要的是filename expansion。为了激活它,您只需要将星号字符放在双引号之外:
"/home/ec2-user/upload/upload/"*
请注意,在此特定字符串中不需要双引号,因为其中没有任何特殊字符需要转义(引号)。
答案 1 :(得分:0)
内循环中放错了“ do”。 “ if”语句应位于其下方。
while IFS= read -r line
do
if [ "$line" = "$entry" ]