bash中的一行if语句

时间:2015-06-29 14:49:10

标签: bash if-statement

我从来没有在bash中编程......但我试图解决游戏中的成就问题(codingame.com)

我有以下代码:

for (( i=0; i<N-1; i++ )); do
   tmp=$(( sorted_array[i+1] - sorted_array[i] ));
   if [ $tmp < $result ]; then result=$tmp fi
done

这个错误:

/tmp/Answer.sh: line 42: syntax error near unexpected token `done'at Answer.sh. on line 42
/tmp/Answer.sh: line 42: `done' at Answer.sh. on line 42

我想比较我的数组的相邻值并存储它们之间的最小差异......但我不知道如何在bash中执行If语句

3 个答案:

答案 0 :(得分:16)

必须通过换行符或分号正确终止每个命令。在这种情况下,您需要将result的分配与关键字fi分开。尝试添加分号;

for (( i=0; i<N-1; i++ )); do
   tmp=$(( sorted_array[i+1] - sorted_array[i] ))
   if [ $tmp -lt $result ]; then result=$tmp; fi
done

此外,您需要使用lt而不是<,因为<是重定向运算符。 (除非您打算使用来自变量$tmp命名的文件的输入来运行名为$result的命令)

答案 1 :(得分:7)

您缺少分号,需要使用-lt代替<,正如其他人指出的那样。

if语句的替代方法是使用逻辑运算符&&

for (( i=0; i<N-1; i++ )); do
   tmp=$(( sorted_array[i+1] - sorted_array[i] ))
   [ $tmp -lt $result ] && result=$tmp
done

答案 2 :(得分:-1)

您的if需要遵循fi命令,但您没有任何此类命令。您的代码中有一个fi,但它位于另一个命令的中间,因此不再完成iffi中的echo fi将完成。如果您要将行合并在一起,则需要使用分号来分隔命令。

所以崩溃

for (( i=0; i<N-1; i++ ))
do
   tmp=$(( sorted_array[i+1] - sorted_array[i] ))
   if [ $tmp -lt $result ]
   then 
      result=$tmp
   fi
done

您使用

for (( i=0; i<N-1; i++ )); do
   tmp=$(( sorted_array[i+1] - sorted_array[i] ))
   if [ $tmp -lt $result ]; then result=$tmp; fi
done
  • 异常:dothen后面可以跟一个命令,所以当你合并到下一行时,你不需要在它们后面加分号。

  • 请注意您是否需要使用;终止命令?仅在命令之间需要;

  • test[])内,-lt用于比较数字。