Shell AWK开始如果语法查询

Shell AWK开始如果语法查询,shell,awk,sh,Shell,Awk,Sh,因此,我试图实现的是对用户输入进行验证检查,以确保输入大于0。然而,在我的Linux环境中,当我将它提交给gedit时,我收到了一整块粉红色的文本,这肯定意味着语法错误,但不知何故我就是不明白 我在shellscript上相对较新(2周),因此如果有人能向我解释他/她的解决方案,我将不胜感激。我也试着在出口1前结束,但没有成功。提前谢谢你 导致问题的代码行: awk 'BEGIN{if($get_price>'0') exit 1}' 案例C的完整代码: [Cc] | [C|c] ) r

因此,我试图实现的是对用户输入进行验证检查,以确保输入大于0。然而,在我的Linux环境中,当我将它提交给gedit时,我收到了一整块粉红色的文本,这肯定意味着语法错误,但不知何故我就是不明白

我在shellscript上相对较新(2周),因此如果有人能向我解释他/她的解决方案,我将不胜感激。我也试着在出口1前结束,但没有成功。提前谢谢你

导致问题的代码行:

awk 'BEGIN{if($get_price>'0') exit 1}'
案例C的完整代码:

[Cc] | [C|c] ) read -p "New Price: " get_price
        awk 'BEGIN{if($get_price>'0') exit 1}'
        if [ $? -eq 1]; then
            PRICE[$index]=$get_price;
            echo "The book price has been updated successfully!"
            echo "--------------------------------------------"
        else
            tput setf 4;echo "Please input a valid price!";tput setf 2;
            echo "--------------------------------------------"
        fi
        press_enter;;

首先,如果您想在
awk
中使用shell变量的值,您应该这样做:

awk -v awkVar="$shellVar" '{..awk..codes... print awkVar}' ...
在awk中,
$foo
表示当前行中的
foo th


另外,awk代码中的
exit
将仅退出awk处理,而不会退出整个shell脚本。我认为您应该以shell方式检查用户给定的
get\u price

首先,如果您想在
awk
中使用shell变量的值,您应该这样做:

awk -v awkVar="$shellVar" '{..awk..codes... print awkVar}' ...
在awk中,
$foo
表示当前行中的
foo th


另外,awk代码中的
exit
将仅退出awk处理,而不会退出整个shell脚本。我认为你应该检查用户给出的
get\u price
的shell方式。

awk
不能解决这里的问题<代码>退出在
awk中
仅从awk退出。 您需要的是在
阅读
之后立即进行测试构造,如下所示

这里有两个要求:

  • get\u price
    应该是一个数字(记住用户可以输入任何内容)
  • get\u price
    应大于零


注意:有关shell参数替换的详细信息。:-)

awk
不能解决这里的问题<代码>退出
awk中
仅从awk退出。 您需要的是在
阅读
之后立即进行测试构造,如下所示

这里有两个要求:

  • get\u price
    应该是一个数字(记住用户可以输入任何内容)
  • get\u price
    应大于零


注意:有关shell参数替换的详细信息。:-)

awk不是外壳。awk是一个可以从shell调用的工具,用于处理文本。它有自己的语法、语义、符号范围等。想象一下,就像你在从shell调用一个C程序,而不是试图从shell调用某种shell子程序

这听起来像是你要找的东西:

delim="--------------------------------------------"
while IFS= read -r -p "New Price: " price; do
    awk -v price="$price" 'BEGIN {
        exit ( (price+0 == price) && (price > 0) ? 0 : 1 )
    }'
    if [ $? -eq 0 ]; then
        PRICE["$index"]="$price"
        echo "The book price has been updated successfully!"
        echo "$delim"
        break
    else
        tput setf 4;echo "Please input a valid price!";tput setf 2;
        echo "$delim"
    fi
done
条件
price+0==price
是验证变量
price
是否包含数字的方式


请注意,shell中的成功退出状态为
0
,而不是
1
或任何其他数字。

awk不是shell。awk是一个可以从shell调用的工具,用于处理文本。它有自己的语法、语义、符号范围等。想象一下,就像你在从shell调用一个C程序,而不是试图从shell调用某种shell子程序

这听起来像是你要找的东西:

delim="--------------------------------------------"
while IFS= read -r -p "New Price: " price; do
    awk -v price="$price" 'BEGIN {
        exit ( (price+0 == price) && (price > 0) ? 0 : 1 )
    }'
    if [ $? -eq 0 ]; then
        PRICE["$index"]="$price"
        echo "The book price has been updated successfully!"
        echo "$delim"
        break
    else
        tput setf 4;echo "Please input a valid price!";tput setf 2;
        echo "$delim"
    fi
done
条件
price+0==price
是验证变量
price
是否包含数字的方式


请注意,shell中的成功退出状态为
0
,而不是
1
或任何其他数字。

@EdMorton谢谢。“修好了。”埃德默顿,谢谢。修正了,非常感谢!我能够理解你的解决方案最多,我学到了很多关于它的语法。非常感谢!我最能理解您的解决方案,而且我对其“语法”有了更多的了解。