我正在将我的脚本从bash转换为dash...并且在获取函数的返回码时遇到问题。
#!/bin/sh
check_ip() {
local netbit=`echo "$1" | awk -F\/ '{print $1}'`
local netmask=`echo "$1" | awk -F\/ '{print $2}'`
if case "$netbit" in
*[!.0-9]* | *.*.*.*.* | *..* | [!0-9]* | *[!0-9] ) false ;;
*25[6-9]* | *2[6-9][0-9]* | *[3-9][0-9][0-9]* | *[0-9][0-9][0-9][0-9]* ) false;;
*.*.*.* ) true ;;
* ) false ;;
esac; then
if [ ! -z "$netmask" ] ; then
if [ "$netmask" -ge 1 ] && [ "$netmask" -le 32 ] ; then
return 0
else
return 1
fi
else
return 0
fi
else
return 1
fi
}
# this is working without the [] thing.
if check_ip "$1" ; then
echo ok
else
echo no
fi在另一台机器上查找类似的脚本,它没有@barmar建议的[]。现在都能用了。非常感谢。
发布于 2013-06-21 13:22:56
if命令根据命令的退出状态选择then或else子句。只有当您想要执行test命令中定义的测试时,才使用[;如果您只想测试某个特定命令,则可以直接使用它。
if check_ip "$ip"
then echo Good IP
else echo Bad IP
fi$!也不太可能是函数的合适参数。$!是启动的最后一个后台进程的PID,而不是IP。
发布于 2013-06-21 13:13:28
$?读取执行的最后一个命令的退出状态。
a() {
return 0;
}
b() {
return 1;
}
a;
echo $?;
b;
echo $?;将返回:
0
1https://stackoverflow.com/questions/17228065
复制相似问题