函数的退出代码是其最后一个命令的退出代码
考虑此示例函数来检查主机是否已启动:
is_alive() {
ping -c1 "$1" &> /dev/null
}
此函数将单个 ping 发送到第一个函数参数指定的主机。ping
的输出和错误输出都被重定向到/dev/null
,因此该函数将永远不会输出任何内容。但是 ping
命令在成功时将具有退出代码 0,在失败时将具有非零。由于这是函数的最后一个(在此示例中是唯一的)命令,ping
的退出代码将重用于函数本身的退出代码。
这个事实在条件语句中非常有用。
例如,如果主机 graucho
已启动,则使用 ssh
连接到它:
if is_alive graucho; then
ssh graucho
fi
另一个例子:反复检查直到主机 graucho
启动,然后用 ssh
连接到它:
while ! is_alive graucho; do
sleep 5
done
ssh graucho