已经尝试过这个,但是即使我将数字设置为 $3,它仍然出现在“非数字”声明中
if ($#argv == 3) then
if ( $3 !~ '^[0-9]+$' ) then
echo "Not numeric"
exit 1
else
echo "Numeric"
endif
endif
强制“不要使用 csh”链接 - http://www-uxsup.csx.cam.ac.uk/misc/csh.html 和 http://www.grymoire.com/unix/CshTop10。 txt
也就是说,你的问题是你单引号了正则表达式模式。将其更改为这样应该可以工作:
if ( $3 !~ ^[0-9]+$ ) then
我确信有更好的方法(
($3 !~ ^[0-9]+$)
对我不起作用),但我使用这个:
echo "$3" | awk '{print $1+0}'
“技巧”在于
$1+0
(无引号!),您可以强制 awk 将 $1 解释为数字。
注: 如果您想知道是否输入了非数字值,请使用:
echo "$3" | awk '{if ($1 ~ /^[0]+$/) {print "0"} else {if ($1+0 == 0) {print "Not a number"} else {print $1+0} }}'
以上建议都不适合我,所以我使用了“$?”变量以使其工作。这绝对可以改进,也可以过滤非字母字符,但我的这是供内部使用的,所以我认为过滤字母字符就足够了。
设置 ans = $< set result =
echo "$ans" | grep -Eo '[a-zA-Z ]{1,100}'
如果(“$?”==“0”)那么
echo -n“输入只能包含数字”
回声“”
出口0
结束
设置结果 =
echo "$ans" | grep -Eo '[0-9]{1,10}'
如果(“$?”==“0”)那么
echo -n“您的输入是$结果”
回声“”
别的
echo“输入的数字不可接受”
结束