2017-10-11 50 views
0

正如我在标题中解释的那样,我需要终止exec。我的脚本如果输入值不是一个整数。我从位置参数获取数字。下面是代码:如果我没有得到预期的整数值,我该如何终止我的脚本? - BASH Shell脚本

a=9 
kb=0 
var=$2 
var=${var:3:1} 
if [ ${#2} -ne 4 ] 
then 
    echo "ethN is wrong" 
    exit 1 
fi 
if [ "$var" -gt 10 -o "$var" -lt 0 ] 
then 
    echo "N is wrong" 
    exit 1 
else 
    echo "N is ok" 
fi 

当我使用这个条目:

庆典lartc.sh -i ETH#

我的脚本不结束,我希望它是因为eth#中的“#”不是一个整数,这就是我想要的。 (例如有效输入:eth2,eth3等)。但是,我的终端对我说,“#”预计是一个整数。我正在验证长度,数字必须在0-9之间,我只需要验证它的类型。有任何想法吗?谢谢!

回答

0

使用=~算子来判断N是否为正整数。

stringA =~ regexp stringA匹配扩展正则表达式regexp。仅适用于bash版本3.0及更高版本。只能在[[...]]内使用。正则表达式匹配运算符不再需要在[[...]]中引用 模式。 http://tldp.org/LDP/abs/html/bashver3.html

var=${var:3} 

if [[ ! $var =~ ^[1-9][0-9]*$ ]] 
then 
    echo "ethN is wrong" 
    exit 1 
fi 
+0

谢谢大家对我的帮助,我有点忙大学,这就是为什么我现在回答,但我没有使用您的建议!这个对我来说工作得很好。 (我也测试了Quinn所说的用户并且它也工作过)谢谢大家,我们一直在摇滚! LML –

0

如果你只是想验证N的某个位置是一个整数,下面的方法应该是不错的:

#! /bin/sh 
var=$2 
result=$(echo ${var} | grep -E "eth[0-9]") 

if [ -z "${result}" ]; then 
    echo "N is wrong" 
    exit 1 
else 
    echo 'N is ok' 
fi 
0

如果你正在使用bash,为什么不只是测试对[[ $2 =~ "^eth[0-9]$" ]]?如果这是真的,你知道:

  • 输入有因为^四个大字和$
  • 前三个字母是eth
  • 最后就是一个数字

你会如果有人在systemd linux上运行此操作并尝试匹配enp4s0,请执行操作吗? :P

相关问题