【发布时间】:2019-09-13 23:02:17
【问题描述】:
我正在启用虚拟机上的防火墙。 最初,防火墙处于屏蔽状态。 我用了两个函数
function status_firewall() {
RET_VAL=" "
STATUS=$(systemctl status firewalld)
MASKED=$(grep -e "masked" <<< $STATUS)
M_RET=$?
DEAD=$(grep -e "dead" <<< $STATUS)
D_RET=$?
logging "M_RET and D_RET: $M_RET, $D_RET"
if [ "${M_RET}" -eq "0" ]; then
RET_VAL=1
elif [ "${D_RET}" -eq "0" ]; then
RET_VAL=2
else
RET_VAL=0
fi
echo ${RET_VAL}
}
如果防火墙被屏蔽,echo 语句将打印值“1”
function check_firewall() {
FIREWALL=$(status_firewall)
logging "Firewall status in check_firewall: ${FIREWALL}"
if [ "$(status_firewall)" -eq "0" ]; then
logging "Firewalld service already running"
RET_VAL=0
elif [ "$(status_firewall)" -eq "1" ]; then
...
elif
...
fi
我得到了正确的 MASKED 和 DEAD 状态值 (0, 0) status_firewall() { ... } 但是,当检查返回值时 check_firewall() { .. } 我收到以下整数错误: 需要整数表达式
在检查返回值时: check_firewall() 它列出: 防火墙状态: ● firewalld.service 已加载:屏蔽 (/dev/null) 活跃:不活跃(死)
为什么第一个函数应该返回值“1”,但在第二个函数中,它将返回值列为命令的输出: systemctl status firewalld
【问题讨论】:
-
不要一直调用函数,使用
$FIREWALL。 -
logging是做什么的? -
你的函数都不使用返回值。他们只是写到标准输出。
-
更改脚本以使用返回码。
return 0成功,然后只是if status_firewall; then ... -
-eq比较两个整数。=比较两个字符串。
标签: bash function conditional-statements