人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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)で問題なく動作していたので、あれこれ調べるよりも先人の知恵を拝借してしまおうと思った次第です。

●質問者: P-mako
●カテゴリ:ウェブ制作
✍キーワード:bash Command Expression GT hoge
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● jouno
●30ポイント

http://cyberam.dip.jp/linux_command/shellscript/shellscript_main...

シェルスクリプト(Bash)

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


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


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


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

◎質問者からの返答

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

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


2 ●
●30ポイント

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

Manpage of BASH

URLはダミーです。


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

A=10000

B=9999

if [$A -gt $B ]; then

echo hoge

fi


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


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

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ