whois=`whois 100.43.81.149`
bool="$(printf %s\\n "$whois" | grep -q netname:)"
if $bool;
then
echo "netname: is available"
else
echo "netname: is not available"
fi
我正在尝试将whois
命令信息保存在whois
变量中。然后在该变量上我搜索netname:
字符串并将结果保存在bool
变量中。
但不知怎的,bool
变量总是进入true
大小写,尽管它不应该在这种情况下。
可能是什么原因导致此问题?
答案1
这里有两个主要问题:
$(
从命令获取标准输出,而不是其退出代码;if $bool
检查名称与 in 中的数据匹配的命令是否$bool
返回 0,而不是 bool 是否为 0 或 1。也就是说,如果$bool
包含“foo”,则将执行命令“foo”。
直接检查即可:
if whois 100.43.81.149 | grep -q netname:; then
...
fi
如果您必须存储退出代码而不是直接执行,请使用[ -eq ,.. ]
或非 POSIX ((
:
whois 100.43.81.149 | grep -q netname:
netname_exists=$?
if (( netname_exists == 0 )); then # Non-POSIX
if [ "$netname_exists" -eq 0 ]; then # POSIX
如果您也必须存储输出以whois
供以后使用,您可以这样做:
whois_data=$(whois 100.43.81.149)
printf '%s\n' "$whois_data" | grep -q netname: # or use <<< (non-POSIX) or <<
netname_exists=$?