我有一个要求,$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脚本中处理它!
我可以在脚本中使用Python/Perl或sed/awk来检查regex和验证。
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)发布于 2017-09-27 12:34:06
我认为您使用正则表达式是正确的,您只需要稍微修改一下:
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!https://stackoverflow.com/questions/46447842
复制相似问题