CSH - 检查变量是否为整数

问题描述 投票:0回答:3

已经尝试过这个,但是即使我将数字设置为 $3,它仍然出现在“非数字”声明中

if ($#argv == 3) then
   if ( $3 !~ '^[0-9]+$' ) then
      echo "Not numeric"
      exit 1
   else
      echo "Numeric"
   endif 
endif
unix scripting csh
3个回答
1
投票

强制“不要使用 csh”链接 - http://www-uxsup.csx.cam.ac.uk/misc/csh.htmlhttp://www.grymoire.com/unix/CshTop10。 txt

也就是说,你的问题是你单引号了正则表达式模式。将其更改为这样应该可以工作:

if ( $3 !~ ^[0-9]+$ ) then

0
投票

我确信有更好的方法(

($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} }}'

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“输入的数字不可接受” 结束

© www.soinside.com 2019 - 2024. All rights reserved.