Horoscope RSSスクリプトをUnix/Linuxプロジェクトの紹介として書いているところ、授業が終わった後も教授が修正できなかった問題が発生しました。実際の日付を確認する方法として使用する方法を理解できなかったので、ユーザー入力をMMDD形式の標準の数値にすることで基本的な計算を試してみようと思いました。彼によると、スクリプトは整数ではなく8進コードとして入力を読み取っているようです。これがスクリプトのサンプルです。
Elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
Elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit
これは必要最低限のものです。RSSの部分を取り出しました。 「olddate」は、私の読み取りプロンプトからの予想される入力です。 1121から1131、1200から1222、0100から0120は機能しますが、1221から1232の間は機能しません。カプリコーンでは、先頭に0を付けずに113を配置したため、これが問題であると考えました。私はまた、牡羊座(-gt 0320 && -lt 0332)を与えるはずの0323が私に水瓶座(日付は-gt 0119 && -lt 0132 || -gt 0200 && -lt 0219)を与えるという問題に遭遇しました0417も機能しない(Ariesの他の日付範囲、-gt 0400 && -lt 0420)。
BASHが入力を実際の数値として解釈するにはどうすればよいですか?彼は入力として「userdate」を期待するように読み取りプロンプトを変更してから、
olddate=`printf '%d\n' "$userdate"`
しかし、それはうまくいきませんでした。これで私を助けることができる誰にも前もって感謝します!
次のように、bashで数値を特定の基数に強制的に変換できます。
_$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100
_
一般に、形式は$((base#value))
です。