0

現在、tldp が提供する Bash-Beginners-Guide のおかげでシェルを学習しています。

現在、シェル スクリプトのスキルを向上させるためにいくつかの演習を行っています。この場合は、if ステートメントと case ステートメントの使用方法を学んでいます。

私はいくつかのコードを書いており、コードで行ったように事前に変数を設定せずにケース式で算術式を直接使用できるかどうかを知りたいです。

自己割り当ての「宿題」の解決策は望んでいませんが、シェルの構文の基本に関して啓発を得たいことに注意してください。

自由に使用できるコード:

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 に答える