在默认情况下,当case语句没有匹配任何模式时,bash会执行默认选项。要避免这种情况发生,可以使用一组特定的字符“;&”来代替普通的“;;”。这将导致bash跳过默认选项并继续执行下一个匹配的命令。
下面是一个示例:
#!/bin/bash
case $1 in
start)
echo "Starting service..."
;;
stop)
echo "Stopping service..."
;;
restart)
echo "Restarting service..."
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
在这个例子中,当用户在命令行上输入一个不支持的参数时,脚本将输出“Usage:”后面跟着脚本的名字和可接受的选项。如果使用默认选项,脚本将输出"Starting service..."、"Stopping service..."或"Restarting service..."之一,而不管用户输入的是什么。为了避免这种情况,我们可以使用“;&”来重写上面的代码:
#!/bin/bash
case $1 in
start)
echo "Starting service..."
;;
stop)
echo "Stopping service..."
;;
restart)
echo "Restarting service..."
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac >&2
# By adding >&2 to the end of each echp command, we can write the
# output to STDERR, instead of STDOUT. This ensures that the usage
# message is always displayed, even if the user redirects STDOUT.
# Finally, we use "exit 1" to signal an error condition and terminate
# the script immediately.
这个改进后的代码添加了“>&2”,将输出写入STDERR而不是STDOUT。这将确保
上一篇:bash脚本没有执行