如果我没有得到预期的整数值,我如何终止我的脚本? - BASH Shell脚本

时间:2017-10-11 01:57:04

标签: linux 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

当我使用此条目时:

  

bash lartc.sh -i eth#

我的脚本没有结束,我想要它,因为"#"来自eth#不是一个整数,这就是我想要的。 (例如有效输入:eth2,eth3等......)。但是,我的终端告诉我"#"预计将是一个int。我验证长度并且数字必须在0-9之间,我只需要验证它的类型。有任何想法吗?谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

  • 由于^$
  • ,输入有四个字符
  • 前三个字母为eth
  • 最后一位数字

如果有人在systemd linux上运行并尝试匹配enp4s0,你会怎么做? :P

答案 2 :(得分: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