Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash检查特定格式的用户输入_Bash_Input_Format_Range_Error Checking - Fatal编程技术网

Bash检查特定格式的用户输入

Bash检查特定格式的用户输入,bash,input,format,range,error-checking,Bash,Input,Format,Range,Error Checking,我试图在脚本中实现一个检查,以确保用户以正确的格式输入数据 我需要一个检查,以确保用户输入的正整数后面紧跟字母“k” 有效输入的示例: 4k 25k 17k 无效输入的示例 2.1 4j -2k 我需要什么 如果[[输入格式正确]];然后 … … fi 编辑: 到目前为止,我对此的了解如下: 如果![[regex=~^[1-9]+k$];做 但这似乎不起作用。有什么想法吗 这个有点棘手。我需要一个检查,以确保用户输入的值范围由最小和最大范围表示,后面紧跟一个“k”,并由一个没有空格的破折号分隔。

我试图在脚本中实现一个检查,以确保用户以正确的格式输入数据

  • 我需要一个检查,以确保用户输入的正整数后面紧跟字母“k”

    有效输入的示例:
    4k
    25k
    17k
    无效输入的示例
    2.1
    4j
    -2k
    我需要什么
    如果[[输入格式正确]];然后


    fi

  • 编辑: 到目前为止,我对此的了解如下:
    如果![[regex=~^[1-9]+k$];做
    但这似乎不起作用。有什么想法吗

  • 这个有点棘手。我需要一个检查,以确保用户输入的值范围由最小和最大范围表示,后面紧跟一个“k”,并由一个没有空格的破折号分隔。它们还可以输入多个范围,这些范围用逗号分隔,不带空格

    有效输入的示例:
    4k-5k
    1k-2k
    3k-6k,1k-9k,3k-8k
    2k-5k、12k-20k
    无效输入的示例
    2.5-3 4k-10k
    4k-3k,8k-9k
    7k-9k,-3-6
    我需要什么
    如果[[输入格式正确]];然后


    fi


  • 这是非常合理的使用。有关更多详细信息,请参阅


    这是行不通的。仍然需要一个解决方案。我认为您已经接近修复了Thotopos,但是如果不知道到底是什么“仍然不起作用”,那么进一步调试将更加困难。在任何情况下,StackOverflow都不是代码编写服务;希望这个答案能让你写一个合适的解决方案我看你用的是*符号。这将不起作用,因为它与前面的0个或多个字符匹配。我需要用户输入至少1位数字,因此我需要+运算符而不是*。现在我有了如果![regex=~^[1-9][0-9]+k$];然后,这似乎不起作用。无论我使用什么输入,我都无法让它通过。到目前为止,我非常感谢您的帮助。
    *
    是有意的,也是重要的<代码>[1-9][0-9]*匹配非零数字,后跟零或更多其他数字。如果允许零,您可以执行
    [0-9]+
    ,但您的组合
    [1-9][0-9]+k
    将只匹配两位数或更长的数字。啊,很有趣。你说得对。这就是我来这里的原因:)
    singleinputregex='^[1-9][0-9]*k$'
    if [[ $singleinput =~ $singleinputregex ]]; then
      # ...
    fi
    
    rangeinputregex='^[1-9][0-9]*k-[1-9][0-9]*k(,[1-9][0-9]*k-[1-9][0-9]*k)*$'
    if [[ $rangeinput =~ $rangeinputregex ]]; then
      # ...
    fi