Shell脚本(bash) - 只接受正整数或逗号分隔的正整数

时间:2017-09-27 12:26:07

标签: bash shell

我有一个要求,其中$ 1应该只是一个大于零的正整数或逗号分隔的正整数列表。

./xyz.sh 1

或者

./xyz.sh 1,11,124

任何其他输入 - 脚本应退出。

$1 - 命令行参数

我试过了:

PARA_METERS=\`echo $1\`  
if [[  "$PARA_METERS" =~ ^([1-9]+,)*[1-9]+$ ]]; then 

echo $1|/usr/bin/perl -0777 -ne '/^([1-9]+,)*[1-9]+$/ && print' 

这适用于命令行,但不适用于脚本内部。

\#!/bin/bash是我正在使用的shell。我无法在shell脚本中处理它!

我可以在脚本中使用Python/Perlsed/awk来检查正则表达式并进行验证。

OS: Linux 2.6.32-358.32.3.el6.x86_64
Shell: GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

1 个答案:

答案 0 :(得分:1)

我认为你的正确行有一个正则表达式,你只需要稍微修改一下:

re='^[1-9][0-9]*(,[1-9][0-9]*)*$'
[[ $1 =~ $re ]] && echo 'it works!'

正则表达式匹配带有一个或多个数字的整数(不允许前导零),可选地后跟任意数量的相同内容,前面有逗号。

测试出来:

validate () {
    re='^[1-9][0-9]*(,[1-9][0-9]*)*$'
    [[ $1 =~ $re ]] && echo 'it works!'
}

validate 1 # it works!
validate 1,11,124 # it works!