首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell脚本(Bash)-只接受正整数或逗号分隔的正整数

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

Stack Overflow用户
提问于 2017-09-27 12:26:06
回答 1查看 1K关注 0票数 1

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

代码语言:javascript
复制
./xyz.sh 1

代码语言:javascript
复制
./xyz.sh 1,11,124

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

$1 -命令行参数

我试过:

代码语言:javascript
复制
PARA_METERS=\`echo $1\`  
if [[  "$PARA_METERS" =~ ^([1-9]+,)*[1-9]+$ ]]; then 

代码语言:javascript
复制
echo $1|/usr/bin/perl -0777 -ne '/^([1-9]+,)*[1-9]+$/ && print' 

这在命令行上工作,但在脚本中不起作用。

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

我可以在脚本中使用Python/Perlsed/awk来检查regex和验证。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-27 12:34:06

我认为您使用正则表达式是正确的,您只需要稍微修改一下:

代码语言:javascript
复制
re='^[1-9][0-9]*(,[1-9][0-9]*)*$'
[[ $1 =~ $re ]] && echo 'it works!'

正则表达式将一个整数与一个或多个数字相匹配(不允许前导零),可选地后面跟着相同事物的任意数目,前面加上逗号。

测试一下:

代码语言:javascript
复制
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!
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46447842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档