2014年2月10日月曜日

シェルスクリプトの関数と引数を使ったサンプル


関数と引数を使ったただの平易なシェルスクリプトのサンプルである。

わざわざなぜ記録しようと思ったか。
それは、とりもなおさず一向にシェルスクリプトを覚えられないからだ。
毎回使い方を調べ、それでいてなお構文に手を焼くという無駄な反復作業にうんざりした。

奇妙な構文だから頭に入らないというわけでもないだろう。
覚える気がないのだ。深く学習する意欲がわかない。

3回は書いたであろうサンプルを自分のために残しておく。
次はない。


軽く愚痴を吐いたが、シェル自体はおもしろく、そこで動作させるスクリプトの機構には興味がわく。
シェルを、そして新しくシェルスクリプトを自作したければ足がかりにこちらが参考になる。



◆ 仕様
ホスト群にpingを打ち、疎通が取れないノードがあれば、
以下のフォーマットで出力する。
NG : host1 host2 host2


◆ コード
#!/bin/sh

LANG=C

judge() {
  if [ $1 != 0 ];then
    ng_hosts+=($2)
  fi

}

option="-c 1 -w 1"
for ip in `cat hosts_file`
do
  ping $option $ip > /dev/null 2>&1
  judge $? $ip
done


if [ ${#ng_hosts[@]} != 0 ];then
  echo "NG: ${ng_hosts[@]}"
  exit 1
else
  echo "OK"
  exit 0
fi