- PR -

シェルスクリプトについての質問

投稿者投稿内容
ビギナー
常連さん
会議室デビュー日: 2004/10/14
投稿数: 40
投稿日時: 2004-10-14 13:45
初めまして。最近シェルスクリプトの勉強をはじめました。課題はpingを複数の指定のアドレスに送って、エラーかどうか判断するシェルです。
listコマンドを使うそうです。

30%位はできたと思いますが、肝心なlistコマンドをどう使ったらよいやらわかりません。
参考書とネットで探してみましたが、listコマンドの情報がありませんでした。ヒントやヒントとなる情報が書いてあるURLをご存知の方がいらっしゃればどうかよろしくお願いいたします。

eagle% cat ping7.sh
#!/usr/bin/sh

ping 10.9.**.*
ping 10.9.**.*
省略

if [ $? -eq 0 ] #条件式1

then
#条件式1が真の時の処理1
elif
sleep 180;

ping 10.9.**.*
ping 10.9.**.*
省略


[ $? -eq 0 ] #条件式2
then
echo "All IP is alive" #条件式2が真の時の処理2
elif
sleep 180;

ping 10.9.**.*
ping 10.9.**.*
省略

[ $? -eq 0 ] #条件式3
then
echo "All IP is alive" #条件式3が真の時の処理3
else
logger -p user.error "IP Adress Link down"
fi
うっちー
常連さん
会議室デビュー日: 2004/08/12
投稿数: 32
投稿日時: 2004-10-14 14:07
こんにちは。

シェルスクリプトでいうところの
list コマンドって・・・ tclsh ですよね?
(間違ってたらゴメンなさい)

http://www.freesoftnet.co.jp/tclkits/doc/tcl/tcl02.htm

なんかにはリファレンスあります。
非武装エリア
大ベテラン
会議室デビュー日: 2004/03/03
投稿数: 202
お住まい・勤務地: 日本・たこ部屋
投稿日時: 2004-10-14 14:17
#!/bin/sh

ID="192.168.1.1 172.16.1.1 192.168.1.2"

for i in $ID
do
echo -n "${i} : "
/bin/ping -c 1 $i > /dev/null
if [ $? -eq 0 ]
then
echo OK
else
echo False
fi
done

ビギナー
常連さん
会議室デビュー日: 2004/10/14
投稿数: 40
投稿日時: 2004-10-14 14:28
うっちーさん迅速な書き込み大変ありがとうございます。

うっちーさんが教えてくださったHPを見ながら、シェルと格闘したいと思います。

リストコマンドという知識しかなくて、それがlistというつづりであっているかわかりませんが初心者の私はlistと解釈してしまいました。

1つのIPアドレスに対してはif文でシェルを作る事ができましたが、複数のIPアドレスに対してはリストコマンドを使わないと出来ないらしくて、複数のIPアドレスがのっているサブシェルにメインシェルから参照してみにいくという論理構造らしいです。

さっそく今からtcshというコマンドについて、勉強したいと思います。
tclshを使ったら、複数のアドレスにpingを行うシェルが作れるかもしれませんね。

それでは情報がわかりしだい、このスレッドに途中経過報告いたします。
返信ありがとうございます。
れぇは
会議室デビュー日: 2003/03/12
投稿数: 13
投稿日時: 2004-10-14 14:43
listでなくてもforでまわしてあげればできますよ
bashの場合ですが/etc/hostsに書かれたIPへPINGする場合で
私はこんな感じに書いておいてあります

#!/bin/bash
HOST=`cut -f 1 /etc/hosts | tr -s '\n' '\t'`
for PING in $HOST
do
ping -c 3 -w 3 $PING > /dev/null
if [ $? = 0 ]
then
echo -en "$PING\t:"
echo -en "\033[1;32m"
echo -n " UP"
echo -en "\033[0;39m\n"
else
echo -en "$PING\t:"
echo -en "\033[1;31m"
echo -n " DOWN"
echo -en "\033[0;39m\n"
fi
done
ビギナー
常連さん
会議室デビュー日: 2004/10/14
投稿数: 40
投稿日時: 2004-10-14 14:59
れぇはさん。非武装エリアさん。返信ありがとうございます。
リストコマンドでなくともfor文でできるという情報とそのソースありがとうございます。

私はBシェルしか知らないのですが、bashを調べましたら、Linuxでは標準で組み込まれていると参考書にのってました。これなら、お二方のソースを雛型として、改良すれば出来そうで
す。

斬新なアドバイスありがとうございます。
for文の方法で作ってみます。

ビギナー
常連さん
会議室デビュー日: 2004/10/14
投稿数: 40
投稿日時: 2004-10-15 10:35
こんにちは。皆様のアドバイスのおかげでfor文とloggerコマンドを使ってのシェルはできました。ありがとうございます。

本日はレベルアップを目指しまして、listコマンドとloggerコマンドを使って、for+loggerコマンドを使ったシェルと機能が同じシェルを作りたいと思います。

昨日のfor+loggerコマンドのシェルです。


eagle% cat ping10.sh
#!/usr/bin/sh

ID="10.14.234.86 10.14.234.29"

for i in $ID
do
ping -c 1 $i
if [ $? -eq 0 ]
then
echo
else
logger -p user.error "$i IP Adress Link Down "
fi
done
eagle%
ビギナー
常連さん
会議室デビュー日: 2004/10/14
投稿数: 40
投稿日時: 2004-10-18 10:10
おはようございます。
いまだにリストを使ってのシェルを考えてます。

うっちーさんが教えてくださったtclshを使う方法
で考えたのですが、ティクルという別の言語らしいので、Bシェルでは作成できないと憶測しました。

リストを使う方法とは、メインのシェルとは別に、ping対象のIPアドレスだけを記述したファイルを作って、そのファイル名をlistという名前にするそうです。

そしてメインシェルの中で、そのlistファイルを参照し、pingをさせるシェルになるそうです。参考書で参照するコマンドを探してますが、どのコマンドを使ってよいものやら悩んでます。

メインシェルの中から、listファイルに入っているIPアドレスを取ってくる事ができるコマンドってどういったコマンドを使えばよいのでしょうか?

よろしくお願いいたします。

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