我有一个要求,其中$ 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/Perl
或sed/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)
答案 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!