暫くはまったのでメモ
shellで作ったスクリプトのwhile内で利用した配列変数を
whileの外で利用しようとして、使えないという落とし穴に
はまってしまう人がいるかと・・・・Orz
whileの利用方法に問題があるんですねぇ^^;
例えば、外部ファイルをwhileで行単位に読み込んで
配列変数に入れ込み、それをwhileの外で利用したい場合に
下記2パターンで試すと片方は使えない。
1パターンは成功
2パターンは失敗
「test.txt」ファイル内容
A
B
C
「test.sh」ファイル内容
-------------------
■1パターン
#!/bin/sh
FILENAME=$1
i=0
ARRAY=()
while read line
do
ARRAY[${i}]="${line}"
((i++))
done < ${FILENAME}
echo "${ARRAY[@]}"
結果
#./test.sh test.txt
A B C
-------------------
■2パターン
#!/bin/sh
FILENAME=$1
i=0
ARRAY=()
cat ${FILENAME} | while read line
do
ARRAY[${i}]="${line}"
((i++))
done
echo "${ARRAY[@]}"
結果
#./test.sh test.txt
【空白】
-------------------
1と2の違い
<(レフトアングル)でwhileにファイルを読み込ませるか、
|(パイプ)でwhileにファイルを読み込ませるか。
結果
|(パイプ)を利用してwhileに読み込ませると、whileの
外で変数を使用しても結果は【空白】になってしまう。
いやぁ、簡単なことだけに簡単に落とし穴にはまって出てこれないというワナ。。。Orz
以上
3.12.2013
3.05.2013
[MySQL]INET_ATON, INET_NTOAの利用
とりあえずメモ
■使い方
SELECT INET_ATON('IPアドレス');
SELECT INET_NTOA(数値)
ATONの方はシングルクォーテーションでIPアドレスを括る
NTOAの方はそのまま数値を入れ込む
最初、NTOAも同様にシングルクォーテーションで括ってたらworningが返ってきて、
IPアドレスの値が「0.0.0.0」あれあれっ???ってなって、何故?みたいな~
しばらく悩む羽目に・・・・Orz
簡単なとこに落とし穴があるものです。。。
例えば、5個のテーブル結合及びIPアドレス変換とか
SELECT building.build_no, building.name, device.hostname, device_model.model_name, INET_NTOA(ip_address.ip_address)
FROM ip_address, device, device_model, isp_line, building
WHERE building.id = isp_line.building_id
AND isp_line.id = device.ispline_id
AND device_model.id = device.model_id
AND ip_address.device_id = device.id
AND ip_address.ip_address = INET_ATON('172.19.173.254');
※わかるひとはAS使ってエイリアスにした方がまとまるぽ^^;
※まぁ、IPアドレスから引っ張ってたりするんだけどね(爆
mysql>
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+
| building_no | name | hostname | model_name | INET_NTOA(ip_address.ip_address) |
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+
| マンションNo | マンション名 | 機器名みたいなぁ | 機種名みたいな | 172.16.1.3 |
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+
以上
■使い方
SELECT INET_ATON('IPアドレス');
SELECT INET_NTOA(数値)
ATONの方はシングルクォーテーションでIPアドレスを括る
NTOAの方はそのまま数値を入れ込む
最初、NTOAも同様にシングルクォーテーションで括ってたらworningが返ってきて、
IPアドレスの値が「0.0.0.0」あれあれっ???ってなって、何故?みたいな~
しばらく悩む羽目に・・・・Orz
簡単なとこに落とし穴があるものです。。。
例えば、5個のテーブル結合及びIPアドレス変換とか
SELECT building.build_no, building.name, device.hostname, device_model.model_name, INET_NTOA(ip_address.ip_address)
FROM ip_address, device, device_model, isp_line, building
WHERE building.id = isp_line.building_id
AND isp_line.id = device.ispline_id
AND device_model.id = device.model_id
AND ip_address.device_id = device.id
AND ip_address.ip_address = INET_ATON('172.19.173.254');
※わかるひとはAS使ってエイリアスにした方がまとまるぽ^^;
※まぁ、IPアドレスから引っ張ってたりするんだけどね(爆
mysql>
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+
| building_no | name | hostname | model_name | INET_NTOA(ip_address.ip_address) |
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+
| マンションNo | マンション名 | 機器名みたいなぁ | 機種名みたいな | 172.16.1.3 |
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+
以上
登録:
投稿 (Atom)