bash getops未传递电子邮件或ip地址
我已经在这件事上绞尽脑汁有一段时间了。我想知道我做错了什么,这件事可能全是我的错。我正在ping一个IP,当它下降或上升时,它会发送一个通知。我的问题是getops。我用它来解析电子邮件地址和ip地址。它们都没有被解析。如何使用getopts解析我的两个变量我需要让脚本正常运行。提前感谢:)bash getops未传递电子邮件或ip地址,bash,getopts,Bash,Getopts,我已经在这件事上绞尽脑汁有一段时间了。我想知道我做错了什么,这件事可能全是我的错。我正在ping一个IP,当它下降或上升时,它会发送一个通知。我的问题是getops。我用它来解析电子邮件地址和ip地址。它们都没有被解析。如何使用getopts解析我的两个变量我需要让脚本正常运行。提前感谢:) 您的脚本中有两个主要错误: 首先,它是$OPTARG,而不是$OPTARGS 第二, IP= $OPTARGS | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\
您的脚本中有两个主要错误: 首先,它是
$OPTARG
,而不是$OPTARGS
第二,
IP= $OPTARGS | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';
你不能那样做。将整段内容改为以下内容:
if ! echo "$OPTARG" | grep -qE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'; then
echo_text "Please enter a valid IP"
exit 1
fi
IP="$OPTARG"
还值得注意的是,除非您使用的是一个古老的bash
,否则shell应该有一个=~
操作符(请参阅),您可以用以下内容替换外部grep
:
使用时,运算符右侧的字符串被视为扩展正则表达式,并进行相应的匹配(如regex3)。如果字符串与模式匹配,则返回值为0,否则返回值为1
您的脚本中有两个主要错误: 首先,它是
$OPTARG
,而不是$OPTARGS
第二,
IP= $OPTARGS | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';
你不能那样做。将整段内容改为以下内容:
if ! echo "$OPTARG" | grep -qE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'; then
echo_text "Please enter a valid IP"
exit 1
fi
IP="$OPTARG"
还值得注意的是,除非您使用的是一个古老的bash
,否则shell应该有一个=~
操作符(请参阅),您可以用以下内容替换外部grep
:
使用时,运算符右侧的字符串被视为扩展正则表达式,并进行相应的匹配(如regex3)。如果字符串与模式匹配,则返回值为0,否则返回值为1
请尝试将$OPTARGS用“”括起来:
e) 电子邮件=“$OPTARGS” 尝试将$OPTARGS用“”括起来:
e) 电子邮件=“$OPTARGS” 除了Adrian Frühwirth指出的问题之外,还需要将shift命令移动到循环之后。按照您编写脚本的方式,它正在删除脚本的参数,而
getopts
仍在解析它们,这将完全混淆它们
while getopts ":e:hi:" OPTIONS
do
...
done
shift $((OPTIND-1)) # This must be after the "done"
除了Adrian Frühwirth指出的问题之外,还需要将shift命令移动到循环之后。按照您编写脚本的方式,它正在删除脚本的参数,而
getopts
仍在解析它们,这将完全混淆它们
while getopts ":e:hi:" OPTIONS
do
...
done
shift $((OPTIND-1)) # This must be after the "done"
解析,不传递。谢谢,修复了不正确的语法解析,不传递。谢谢,修复了不正确的语法。对于回复,这部分有效。我不得不修改条件语句以避免语法错误。现在不管怎样它都失败了,如果我把它拿出来!测试时,它会工作,但不会实际检查IP$OPTARG。我已经在主帖中添加了新的条件语法。谢谢你的回复,这部分是有效的。我不得不修改条件语句以避免语法错误。现在不管怎样它都失败了,如果我把它拿出来!测试时,它会工作,但不会实际检查IP$OPTARG。我已经在主帖中添加了新的条件语法。