Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash getops未传递电子邮件或ip地址_Bash_Getopts - Fatal编程技术网

bash getops未传递电子邮件或ip地址

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}\

我已经在这件事上绞尽脑汁有一段时间了。我想知道我做错了什么,这件事可能全是我的错。我正在ping一个IP,当它下降或上升时,它会发送一个通知。我的问题是getops。我用它来解析电子邮件地址和ip地址。它们都没有被解析。如何使用getopts解析我的两个变量我需要让脚本正常运行。提前感谢:)



您的脚本中有两个主要错误:

首先,它是
$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。我已经在主帖中添加了新的条件语法。