我正在尝试编写一个Bash脚本来读取特定的csv,并根据该csv中列的值移动文件。然而,当我这样做时,它将所有内容视为虚假并且不会移动文件,尽管事实上我确定它应该大致读取五行中的一行为真。
代码如下
#!/bin/bash
FILE=filename.csv
while IFS=, read -a csv_line;
do
EMAIL="${csv_line[1]}" #identify the filename
HASVAL="${csv_line[62]}" #should be either 1 or 0
if [ -e "$EMAIL" ]
then
echo "detected"
if [ "$HASVAL" = "1" ]
then
mv "$EMAIL" /home/targetdirectory
echo "moved"
fi
fi
done < $FILE
我看不出这个脚本有什么问题。它只打印&#34;检测到&#34;,从不打印&#34;移动&#34;并且不移动文件,所以我怀疑它没有正确匹配文本。是否有可能我正在读取csv错误的内容,并且可能不是csv中的所有值都是字符串?或者我做错了什么?
感谢您提供任何帮助。
编辑:用。替换违规的if语句 [&#34; $ HASVAL&#34; -eq 1]
给了我
detected
: integer expression expected
在每一行上,所以我不确定整数比较是否也有效。
编辑:如下所述,看起来问题已经解决了。 .csv有DOS结尾,因为我查看了最后一列,它不能正确匹配,最后一列必须被修剪为&#39; / r&#39;所以它实际上可以将它与正确的字符串匹配。感谢大家的帮助。
答案 0 :(得分:-1)
编辑:最佳做法建议对if语句使用double [[]]和double equals。您也验证过您正在比较字符串值,或者您是否应该进行整数比较。