3.12.2013

[Linux]shell上のwhile内の変数をwhileの外で利用したい

暫くはまったのでメモ

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.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                   |
+-------------+--------------------------------------------+-----------------------+------------+----------------------------------+

以上

12.27.2012

[Linux]CentOS5系のアップデート方法


忘れてるのでメモ^^;

CentOS5系はバージョンによってアップデート方法が異なるとのこと。

◆OSタイプ確認(i386, x86_64等)
# uname -a

----------------------------------------------------------------------
◆レポジトリ追加

■epelレポジトリ追加
下記でreleaseされたrpmを探す
http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/

# wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -Uvh epel-release-5-4.noarch.rpm

■remiレポジトリ追加
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5.rpm

■dagレポジトリ追加
下記参照
http://dag.wieers.com/

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

※レポジトリは/etc/yum.repos.d/以下に追加追記しても大丈夫、好きな方をば~♪
----------------------------------------------------------------------


yum-updatesdの削除
# /etc/init.d/yum-updatesd stop
# yum -y remove yum-updatesd

yum-fastestmirrorのインストール
# yum --enablerepo=epel,remi,remi-test,dag list yum-fastestmirror
# yum --enablerepo=epel,remi,remi-test,dag install yum-fastestmirror

update確認
# yum --enablerepo=epel,remi,remi-test,dag check-update

CentOS5.5以下からアップデートする場合は下記のコマンドを実行
■CentOSのアップデート
# yum clean all
# yum --enablerepo=epel,remi,remi-test,dag update glibc\*
# yum --enablerepo=epel,remi,remi-test,dag update yum\* rpm\* pyth\*
# yum clean all
# yum --enablerepo=epel,remi,remi-test,dag update mkinitrd nash
# yum --enablerepo=epel,remi,remi-test,dag update selinux\*
# yum --enablerepo=epel,remi,remi-test,dag update
# more /etc/redhat-release
# shutdown -r now


CentOS5.6以上からアップデートする場合は下記のコマンドを実行
■CentOSのアップデート
# yum clean all
# yum --enablerepo=epel,remi,remi-test,dag update
# more /etc/redhat-release
# shutdown -r now

※レポジトリは随時自分用に変更~♪

以上