0

感谢 tldp 提供的 Bash-Beginners-Guide,我目前正在学习 shell。

目前我正在做一些练习来提高我的 Shell 脚本技能,在这种情况下,我正在学习如何使用 if 和 case 语句。

我已经编写了一些代码,想知道是否可以直接在 case 表达式中使用算术表达式,而无需像我在代码中那样事先设置变量。

请注意,我不想为自己分配的“作业”提供解决方案,而是希望获得有关 Shell 语法基础的启发。

代码,免费使用:

echo "Starting exercise 2..."
day=`date +%e`
year=`date +%Y`
echo "Number of days in this month: $day days"
echo "Calculating leap years:"
calc1=$[$year % 400]
case $calc1 in
0) echo "$leap";;
*) 
    calc2=$[$year % 100]
    case $calc2 in
        0) echo "$noleap" ;;
        *) 
            calc3=$[$year % 4]
            case $calc3 in
            0) echo "$leap" ;;
            *) echo "$noleap" ;;
        esac
esac

jump 和 noleap 只是一些字符串,它们对我的问题无关紧要。

我想摆脱那些 calc* 变量并执行以下操作:

case $[$year % 400] in
    0) echo "$noleap";;
    ...

这可能吗?

请注意,我是一个绝对的初学者,我 2 天前开始学习 Shell。

编辑:我想我回答了我自己的问题。好像

case $[arithmetic expression] in

作品。然而,还需要验证。

Edit2:修复了不相关的错误 noleap -> year%400 情况下的跳跃。

4

1 回答 1

1

尝试算术扩展:case $(($year%400)) in .... 这种语法几乎可以在变量扩展可以使用的任何地方使用,包括双引号。

于 2012-06-27T20:02:13.800 回答