验证bash脚本输入
我刚开始使用Linux作为我计算机科学学位的一部分 我正在写一些非常简单的Bash脚本,我有点被卡住了 我希望我尝试编写的脚本能够区分“无效输入即字母”和“特定范围内的有效输入即数字” 目前脚本“有效”,尽管我遇到了另一个回音的问题,我只想在下面的一行是“不正确”时“回音”,但有没有一个简单的方法来写这个?我不是专门寻找高效的代码,只是我可以从业余水平上学习和理解的代码 那么,长话短说,有没有可能从下面的命令行获取信息,这样我就可以有一个简单的“not true”变量,可以在另一个“else”或“elif”命令中使用 参考资料第1行是检测字母输入,第2行是我想写为“nottrue”的代码行,用于脚本的另一部分验证bash脚本输入,bash,Bash,我刚开始使用Linux作为我计算机科学学位的一部分 我正在写一些非常简单的Bash脚本,我有点被卡住了 我希望我尝试编写的脚本能够区分“无效输入即字母”和“特定范围内的有效输入即数字” 目前脚本“有效”,尽管我遇到了另一个回音的问题,我只想在下面的一行是“不正确”时“回音”,但有没有一个简单的方法来写这个?我不是专门寻找高效的代码,只是我可以从业余水平上学习和理解的代码 那么,长话短说,有没有可能从下面的命令行获取信息,这样我就可以有一个简单的“not true”变量,可以在另一个“else”或
我不确定我是否解释得很好,因此任何帮助都将不胜感激。:) 欢迎使用堆栈溢出。:) 从阅读文档开始。我并不是说要卑鄙,这只是最好的方法。
c、 f 然后通读这本书 而且,这个网站真的是你的朋友。从熟悉你自己开始 对于你的问题,如果我读对了:
typeset -i xx # accepts only digits now.
如果输入是foo
,则该值默认为0,因此现在只需检查范围
if (( xx >= 7 && xx <= 70 )); then : value is ok
else echo "Value must be a number from 7 to 70"
exit 1
fi
if((xx>=7&&xx欢迎使用堆栈溢出:)
从阅读文档开始。我的意思不是说要刻薄,这只是最好的方法。
c、 f
然后通读这本书
而且,这个网站真的是你的朋友。从熟悉你自己开始吧
对于你的问题,如果我读对了:
typeset -i xx # accepts only digits now.
如果输入是foo
,则该值默认为0,因此现在只需检查范围
if (( xx >= 7 && xx <= 70 )); then : value is ok
else echo "Value must be a number from 7 to 70"
exit 1
fi
如果((xx>=7&&xx带有整数属性的变量)的一个问题是它仍然不能保护您免受无效输入的影响:
$declare-i一个成员
$aNumber=1234X
bash:1234X:值对于base太大(错误标记为“1234X”)
有关bash如何将值解释为数字的信息,请参见(向下滚动至以“整数常量遵循C语言定义”开头的段落)
根据我的经验,检查有效数字输入的最佳方法是使用面向字符串的模式匹配
如果[[$1=~^[+-]?[0-9]+$];那么
echo“输入$1是一个整数”
fi
除了扩展正则表达式之外,bash还可以在[…]]
如果[[$1==?([+-])+([0-9])];那么
echo“输入$1是一个整数”
fi
(…)
优于let
。有关详细信息,请参阅。
另外。带有整数属性的变量的一个问题是,它仍然不能保护您免受无效输入的影响:
$declare-i一个成员
$aNumber=1234X
bash:1234X:值对于base太大(错误标记为“1234X”)
有关bash如何将值解释为数字的信息,请参见(向下滚动至以“整数常量遵循C语言定义”开头的段落)
根据我的经验,检查有效数字输入的最佳方法是使用面向字符串的模式匹配
如果[[$1=~^[+-]?[0-9]+$];那么
echo“输入$1是一个整数”
fi
除了扩展正则表达式之外,bash还可以在[…]]
如果[[$1==?([+-])+([0-9])];那么
echo“输入$1是一个整数”
fi
(…)
优于let
。有关详细信息,请参阅。
另外。始终在[..]
中引用变量(在[[..]
中没有必要),但在[..]
中必须引用变量。([..]
是测试的别名。
要在为xx
输入非整数时抑制错误,您可以[“$xx”-eq”$xx“2>/dev null]
将stderr
重定向到/dev/null
(位桶…)值得为指南添加书签,尤其是陷阱:)
与花一点时间在一起是很好的。除了其他人链接的信息宝库外,单击问题下的bash
标记,然后单击stackoverflow上的bash标记wiki的“了解更多…”。@JB:我会通过执行[[$a==*[a-Za-z]*]
。检查a
是否包含任何非数字字符可以通过[$a==*[^0-9]*]]
来完成。始终在[..]
中引用变量(在[[..]]
中没有必要),但在[..]
中它是必需的。([..]
是测试的别名)。若要在为xx
输入非整数时抑制错误,您可以[“$xx”-eq“$xx”2>/dev/null]
将stderr
重定向到/dev/null
(位桶…)值得将指南和(尤其是陷阱:)
与花一点时间在一起是很好的。除了其他人链接的信息宝库外,单击问题下的bash
标记,然后单击stackoverflow上的bash标记wiki的“了解更多…”。@JB:我会通过执行[[$a==*[a-Za-z]*]
。检查a
是否包含任何非数字字符可以通过[[$a==*[^0-9]*]]
完成。注意:此方法将允许一些奇数项通过-例如,分配xx=0xdeadbeef
实际上将存储3735928559
,因为