./my_script:第21行:=:没有这样的文件或目录

时间:2013-06-01 00:32:21

标签: linux shell unix

运行这个简单的shell脚本时出现此错误:

previous_run=$(cat last_completed.txt)
for file in /Users/everardobarriga/testimg
do
   b=$(ls -l "$file"|awk '{print $6$7$8}')
   if [ "$previous_run" <= "$b" ]
     then
       echo $'yes'
   fi
done
date +"%h%d%H:%M"> last_completed.txt

似乎在我比较之前的比赛和b的比赛中,它并没有真正比较它们。我对shell脚本非常陌生,所以我不确定是怎么回事。有时它比较它们有时它不会。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您不能将“&lt; =”用作小于或等于的比较器。您指定的语法是尝试从名为“=”的文件(不存在)中重定向stdin。请参阅“人体测试”,您将看到各种可用的比较选项。在这种情况下看起来你想要“-le”:

if [ "$previous_run" -le "$b" ]; then
    echo "yes"
fi

答案 1 :(得分:0)

要按字典顺序排序字符串,您可以使用<>内部测试。但是,符号需要小于或大于引号,因此shell不会将它们解释为重定向。

实施例

if [ "str1" '<' "str2" ]; then
    echo "str1 is before str2"
else
    echo "str1 is after str2"
fi