system management
1748246 メンバー
3718 オンライン
108760 解決策
新規ポスト

letコマンドによる計算について

 
K_K
時折のアドバイザー

letコマンドによる計算について

いつも参考にさせていただいております。

現在シェルスクリプトにて日付を変数に代入し、

そこから月の数値を取り出して

さらにletコマンドによって2ヶ月前の月にするといったことを行ってます。

しかし、今月に入ってからスクリプトがうまく行かず、

調べた結果letコマンドで数値08に対して計算が出来ないことがわかりました。

webなどで原因を調査しましたが特に見つけることが出来ませんでした。

原因を知っている方がいらっしゃれば、是非お教え願えますでしょうか?

以下にスクリプトの抜粋を載せておきます。

説明不足な点やご不明な点があれば遠慮なくおっしゃってください。

よろしくお願いいたします。

↓↓↓スクリプト抜粋↓↓↓

DATE=`date +%Y%m%d%H%M%S`

MM=`echo $DATE|cut -c5-6`

let MM=MM-2 ←右辺のMMが8月(08)、と9月(09)で失敗する
3件の返信3
super32x
時折のビジター

letコマンドによる計算について

推測ですがletコマンドでは、数字の前に0(ゼロ)を付けると8進数と理解して計算していると思います。

よって8進数の08は存在しないため、エラーになっているんじゃないですかね。

DosのSETコマンドでも同じ現象でエラーが出て苦労したのを覚えています。

対策としてletコマンドではなく、exprコマンドを使用してみてはどうですか?

MM=`expr ${MM} - 2`

K_K
時折のアドバイザー

letコマンドによる計算について

super32xさん、早速のご回答誠にありがとうございます。

はい、exprを使用すると確かに実行できました。

今後はexprを使用しようと思います。

しかし、letによる計算は実は数年前から行ってました。

もちろん、去年の8月や9月も行っており当時は問題なく実行されてきました。

今年(今月)に入りなぜか出来なくってしまったのです。これらを今後は調査していこうと思います。

どうもありがとうございました。
isao
頻繁なアドバイザー

letコマンドによる計算について

以下のように変数の前に、その内容が10進数であるという基数を指定すると、letでも大丈夫です。

$ MM=08

$ echo $MM

08

$ let MM=MM-2

sh: 08: The specified number is not valid for this command.

$ echo $MM

08

$ let MM=10#${MM}-2

$ echo $MM

6

SHELLのパッチがインストールされて動作が変わったのかも知れませんね。