如果[awk'BEGIN {print 0.4 * 10}'> 1 -eq 0];然后回音是;科幻

时间:2013-11-22 15:18:53

标签: linux bash shell if-statement awk

请帮忙。这样做我收到错误。我怎么修理

if [ awk 'BEGIN{print 0.4*10}' > 1 -eq 1 ]; then echo YES; fi

4 个答案:

答案 0 :(得分:7)

shell语法首先内化很棘手。花点时间意识到if命令实际上并不需要任何特殊语法:它根据命令的退出状态做出决定。通常你会看到方括号,但它们实际上只是test命令的别名(或多或少)。

如果您想处理awk的退出状态:

if awk 'BEGIN {n = 0.4 * 10; exit (!(n>1))}'; then echo yes; fi

如果你只想做一些数学运算:

result=$(bc <<< "(0.4 * 10) > 1")
if [[ $result = "1" ]]; then echo "YES"; fi

# or, in  one step
if [[ $(bc <<< "(0.4 * 10) > 1") = "1" ]]; then echo "YES"; fi

在bash提示符下,键入help if

答案 1 :(得分:2)

您的命令有语法错误。您可能打算在awk中进行数学比较,无论如何BASH不能进行非整数数学运算。

可能是你的意思:

if [ $(awk 'BEGIN{print ( (0.4*10) > 1) }') -eq 1 ]; then echo YES; fi
YES

答案 2 :(得分:0)

这样的事情会起作用:

if [[ $(awk 'BEGIN{print 0.4*10}') > 1 ]]; then
    echo YES
fi

但目前还不清楚你打算做什么。

答案 3 :(得分:0)

您不需要if。如果计算为4,则会打印yes,否则会打印no

[[ $(awk 'BEGIN{print (0.4*10) }') -eq 4 ]] && echo "yes" || echo "no"

[ $(awk 'BEGIN{print (0.4*10) }') -eq 4 ] && echo "yes" || echo "no"