mur*_*nox 3 shell-script control-flow
我有一个看起来像的 Bash 脚本
#!/bin/bash
#
FECHA=`date +%j`
if [ $FECHA -eq 40 ]
then
echo "Esta semana le toca preparar el café a Osvaldo" | mail -s 'Café' mailgroup@somedomain.mx
exit
elif [ $FECHA -eq 47 ]
then
echo "Esta semana le toca preparar el café a Berenice" | mail -s 'Café' mailgroup@somedomain.mx
exit
elif [ $FECHA -eq 54 ]
then
echo "Esta semana le toca preparar el café a Nizaá" | mail -s 'Café' mailgroup@somedomain.mx
exit
fi
Run Code Online (Sandbox Code Playgroud)
由于 crontab,它将在每周一早上 7 点运行。
实际的 Bash 脚本有更多的行,因为涉及的人更多。我认为它有效。但是......有没有办法用更少的行来制作这个脚本?
我在想:两个变量,一个用于制作咖啡的人,另一个用于日期以及将这些变量联系起来的方法。
sam*_*var 17
我认为这个case/esac结构很适合这里。
#!/bin/bash
case "`date +%j`" in
40) name=Osvaldo ;;
47) name=Berenice ;;
54) name=Nizaá ;;
*) exit ;;
esac
echo "Esta semana le toca preparar el café a ${name}" \
| mail -s 'Café' mailgroup@somedomain.mx
Run Code Online (Sandbox Code Playgroud)
注意:如果同一个人需要多次煮咖啡,您可以使用以下方法聚合测试|:
case "`date +%j`" in
12|23|40|49) name=Osvaldo ;;
10|19|30|47) name=Berenice ;;
...
Run Code Online (Sandbox Code Playgroud)
这是数组的一个很好的例子。下面是一个例子:
mapping=([40]='Osvaldo'
[47]='Berenice'
[54]='Nizaá')
echo "Esta semana le toca preparar el café a ${mapping[FECHA]}" | mail -s 'Café' mailgroup@somedomain.mx
Run Code Online (Sandbox Code Playgroud)
这完全消除了条件。