bashの質問です。

if文の条件の記述方法が、カーネル or ディストリビューション(のバージョン)等で違うなんてことはありますか?

具体的には、
A=10000
B=9999

if [ $A -gt $B ]; then

が、
FC3(2.6.11-1.27_FC3):動作OK
RH9.0(2.4.20-8)   :動作NG

当該ステートメントのエラーメッセージは、
hoge.sh: line Y: [10000: command not found

別ステートメントでは、
hoge.sh: line YY: [: root: integer expression expected
なども発生します。

テスト環境(FC3)で問題なく動作していたので、あれこれ調べるよりも先人の知恵を拝借してしまおうと思った次第です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/28 11:02:28
  • 終了:--

回答(2件)

id:jouno No.1

jouno回答回数280ベストアンサー獲得回数02005/11/28 11:33:07

ポイント30pt

少なくとも前者は、スペースが除去されてしまった結果であるように見えます。[コマンドの代わりに、存在しない[1000コマンドをシェルは探索してしまっている。後者も、同じことが原因になっている可能性が高いです。つまり、比較には整数でなければいけませんよ、よいうエラーなので、[ 1000 -gt 999] になって、999]という文字列は整数ではない、という感じではないかと。


なので、まずファイルに適切なスペースがはさまっているかどうかを確認してください。


で、これがfedoraからredhatにもってくる過程で自動的におきてしまったとすれば、考えられるのはutf-8とEUCの文字コードの違いですが、なぜそうなるのかはちょっとわかりません。


ファイルにスペースがちゃんとはいっていれば、bashの読み取りの失敗ということになりますが、その場合は、nkfなどで文字コードを明示的にeuc-jpに変換してみてはいかがでしょうか。

id:P-mako

ご回答ありがとうございます。

なるほど文字コードの問題ですか。可能性はあります。確認してみます。

2005/11/28 17:09:41
id:zu2 No.2

回答回数19ベストアンサー獲得回数22005/11/28 14:41:15

ポイント30pt

URLはダミーです。


たぶん、前者は、if [ $A の部分の空白が抜けているのではないでしょうか。こんな感じ。

A=10000

B=9999

if [$A -gt $B ]; then

echo hoge

fi


後者は、$Aに root という文字列が入っている場合にそのメッセージが出ます。(uidを処理しようとしてユーザー名を処理してしまっているのではないでしょうか)


いずれにせよ、bashのif文の問題ではないように思います。

id:P-mako

ご回答ありがとうございました。

結論としては、$Aの切り出しにcutコマンドを使用していたのですが、それが別サーバだと上手く動作していないのが原因でした。観点ズレすぎでした(TT

結局、cutではなく、awkで正しく切り出せて、解決しました。

ありがとうございました&お騒がせしました。

2005/11/28 17:11:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません