Mou*_*inX 28 bash shell-script case
我想做这样的事情,在星期五,输出适用于两个匹配的条件:
#!/bin/bash
#!/bin/bash
NOW=$(date +"%a")
case $NOW in
Mon)
echo "Mon";;
Tue|Wed|Thu|Fri)
echo "Tue|Wed|Thu|Fri";;
Fri|Sat|Sun)
echo "Fri|Sat|Sun";;
*) ;;
esac
Run Code Online (Sandbox Code Playgroud)
正如上面的代码所写,周五唯一的输出是:
周二|周三|周四|周五
周五的预期产量:
周二|周三|周四|周五
周五|周六|周日
我的理解是,通常只执行与表达式匹配的第一个模式对应的命令。
有没有办法为其他匹配的模式执行命令?
编辑:我不是在寻找失败行为,但这也是一件值得了解的好事。谢谢钢刀。
ste*_*ver 52
你可以使用;;&连词。来自man bash:
Run Code Online (Sandbox Code Playgroud)Using ;;& in place of ;; causes the shell to test the next pattern list in the statement, if any, and execute any associated list on a successful match.
前任。给予
$ cat myscript
#!/bin/bash
NOW=$(date -d "$1" +"%a")
case $NOW in
Mon)
echo "Mon";;
Tue|Wed|Thu|Fri)
echo "Tue|Wed|Thu|Fri";;&
Fri|Sat|Sun)
echo "Fri|Sat|Sun";;
*) ;;
esac
Run Code Online (Sandbox Code Playgroud)
然后
$ ./myscript thursday
Tue|Wed|Thu|Fri
$ ./myscript friday
Tue|Wed|Thu|Fri
Fri|Sat|Sun
$ ./myscript saturday
Fri|Sat|Sun
Run Code Online (Sandbox Code Playgroud)
有关更多信息(包括其他 shell 中的等效项),请参阅