- PR -

awkでビット操作

1
投稿者投稿内容
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-05-15 13:43
お世話になります。

シェルスクリプト内でビット操作をする必要があります。
あるプログラムを実行すると、リターン値は以下の仕様であり
 警告Aの時:0x01
 警告Bの時:0x02
 警告Cの時:0x04
 警告Dの時:0x08
 警告Eの時:0x16
そのリターン値をシェルスクリプト内でハンドリングする必要があります。

例えば、リターン値が0x03だったら
 echo "警告Aです。"
 echo "警告Bです。"
を標準出力します。

そこで、awkでのコーディングを検討していますが
なかなかうまくいきません。

ご存知の方、ご教示お願いします。
-----------
./aaa.exe

ret=$?

if[ 0x01ビットONの時]; then
 echo "警告Aです。"
fi

if[ 0x02ビットONの時]; then
 echo "警告Bです。"
fi

...


Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-05-15 18:34
何がどう「なかなかうまくいかない」のだろう?

./aaa.exe は awkスクリプト?
awkスクリプトの復帰値のセットの仕方だろうか?
それとも「if[ 0x01ビットONの時]; then 」の辺りのこと?
これ(↑)はawkスクリプトと関係なさそうだね?

検討しているだけではうまくいかないも何もないは当然?
paniponi-x
常連さん
会議室デビュー日: 2006/01/14
投稿数: 27
投稿日時: 2006-05-15 19:49
シェルスクリプトでうまくできないので、awkで書けるかどうかという
ことだと思いますが、使っているawkがgawkであれば可能です。

コード:
BEGIN {
       num = 13
       if (and(num, 1))
               print "bit 0 on"
       if (and(num, 2))
               print "bit 1 on"
       if (and(num, 4))
               print "bit 2 on"
       if (and(num, )
               print "bit 3 on"
}


実行結果:
bit 0 on
bit 2 on
bit 3 on

詳しくは gawk の info を。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-05-16 11:52
bash ビット演算 で検索すると でます。シェルのみで

BASH > num=13
BASH > if [ $(($num & 2)) -eq 0 ]; then echo bit off; fi
bit off

[ ] の中はスペースで 切り刻む。
気をつけて書かないとすぐに構文エラーになります。
1

スキルアップ/キャリアアップ(JOB@IT)