【问题标题】:Warn User If any value is not Numeric in shell script如果 shell 脚本中的任何值不是数字,则警告用户
【发布时间】:2016-08-13 02:35:22
【问题描述】:

我正在学习 bash。

我想做一个简单的脚本,如果用户输入值并形成任何值或非数字值的值,而不是警告用户该值不是数字,然后对它们进行排序并打印数值的计数

谢谢。 这是为了检查不是数值。

for((i=0;i<count;i++))
    do
        if ! [ "${ARRAY[i]}" -eq "${ARRAY[i]}" ] 2> /dev/null
            then
                echo "${ARRAY[i]} is not numeric"   
        fi
    done

【问题讨论】:

    标签: shell git-bash


    【解决方案1】:

    该问题没有详细说明正在测试或可能需要验证的数字类型。 不过,您可以考虑对感兴趣的数字类型进行printf 评估,类似于:

    #!/bin/bash
    ARRAY=( 1.1 A 99 'string' '102' ) ; # Mixed array type
    for item in ${ARRAY[@]} ; do
        NaN=0 ;
        if ! printf %d "$item" 2>/dev/null ; then NaN=$((++NaN)) ; else printf "%d is decimal\n" "$item" ; continue ; fi ;
        if ! printf %f "$item" 2>/dev/null ; then NaN=$((++NaN)) ; else printf "%f is float\n" "$item" ; continue ; fi ;
        if ! printf %i "$item" 2>/dev/null ; then NaN=$((++NaN)) ; else printf "%i is integer\n" "$item" ; continue ; fi ;
        if  ((NaN != 0)) ; then echo "$item NOT-A-NUMBER" ; fi ;
    done ;
    

    printf 手册/帮助页面详细介绍了您可以扩展到上述示例的所有可用类型。

    【讨论】:

    • 这里是您的脚本的返回:11.1000001.100000 is float 00.0000000A NOT-A-NUMBER 9999 is decimal 00.0000000string NOT-A-NUMBER 102102 is decimal。除了这很难看之外,您还错过了 printf 中的 %d 仅适用于整数而不适用于像 1.1 这样的小数。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 2015-02-27
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多