あなたの得意なプログラミング言語は?
と問われたときに、bashと答えそうになります。
シェルスクリプトで割といろんなことができますが、
いつも忘れてしまう構文を書いておきます。
自分がいつもわすれるのは、「配列」です。
今日紹介するのは、厳密には配列ではないですが、
bash(よりいうならば、Bourne shell)だとよくやる
構文を、自分のメモの意味を含めて書き留めます。
外部ファイルに読み込みたいリストを作成し、
それをシェルスクリプと内で配列的に扱う例です。
といった感じです。
肝になるのは、
です。
ファイルディスクリプタをつかって、
外部ファイルを読み込んでいます。
いつもファイルディスクリプタの使い方を忘れます。
あとは
のように
変数(擬似的な配列から変数に代入している)に代入して
あつかっています。(例だとechoしているだけ)
ファイルディスクリプタの使い方をおぼえると
(自分も使いこなせてないですが)
bashで意外となんでもできることがわかります。
次回は、本当の配列の使い方です。
と問われたときに、bashと答えそうになります。
シェルスクリプトで割といろんなことができますが、
いつも忘れてしまう構文を書いておきます。
自分がいつもわすれるのは、「配列」です。
今日紹介するのは、厳密には配列ではないですが、
bash(よりいうならば、Bourne shell)だとよくやる
構文を、自分のメモの意味を含めて書き留めます。
外部ファイルに読み込みたいリストを作成し、
それをシェルスクリプと内で配列的に扱う例です。
#!/bin/bash
SERVERLIST=server.list
if [ -f "${SERVERLIST}" ]; then
echo "SERVERLIST FILE $FILE NOT FOUNT ! ";
exit;
if
## INPUT CHECK
FILE="$@"
if [ ! -f "${FILE}" ]; then
echo "INPUT FILE $FILE NOT FOUND !";
exit;
if
exec 3<&0 < $SERVERLIST
i=0
while read SERVER
do
i=`expr $i + 1`
eval SERVER_$i=$SERVER
done
for seq in `seq 1 $i`
do
eval SERV=\$SERVER_$seq
echo $SERV;
done
といった感じです。
肝になるのは、
exec 3<$0 < $SERVERLIST
です。
ファイルディスクリプタをつかって、
外部ファイルを読み込んでいます。
いつもファイルディスクリプタの使い方を忘れます。
あとは
eval SERV=\$SERVER_$seq
のように
変数(擬似的な配列から変数に代入している)に代入して
あつかっています。(例だとechoしているだけ)
ファイルディスクリプタの使い方をおぼえると
(自分も使いこなせてないですが)
bashで意外となんでもできることがわかります。
次回は、本当の配列の使い方です。


