- - PR -
シェルスクリプトについての質問
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-10-14 14:07
こんにちは。
シェルスクリプトでいうところの list コマンドって・・・ tclsh ですよね? (間違ってたらゴメンなさい) http://www.freesoftnet.co.jp/tclkits/doc/tcl/tcl02.htm なんかにはリファレンスあります。 |
|
投稿日時: 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 14:28
うっちーさん迅速な書き込み大変ありがとうございます。
うっちーさんが教えてくださったHPを見ながら、シェルと格闘したいと思います。 リストコマンドという知識しかなくて、それがlistというつづりであっているかわかりませんが初心者の私はlistと解釈してしまいました。 1つのIPアドレスに対してはif文でシェルを作る事ができましたが、複数のIPアドレスに対してはリストコマンドを使わないと出来ないらしくて、複数のIPアドレスがのっているサブシェルにメインシェルから参照してみにいくという論理構造らしいです。 さっそく今からtcshというコマンドについて、勉強したいと思います。 tclshを使ったら、複数のアドレスにpingを行うシェルが作れるかもしれませんね。 それでは情報がわかりしだい、このスレッドに途中経過報告いたします。 返信ありがとうございます。 |
|
投稿日時: 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 14:59
れぇはさん。非武装エリアさん。返信ありがとうございます。
リストコマンドでなくともfor文でできるという情報とそのソースありがとうございます。 私はBシェルしか知らないのですが、bashを調べましたら、Linuxでは標準で組み込まれていると参考書にのってました。これなら、お二方のソースを雛型として、改良すれば出来そうで す。 斬新なアドバイスありがとうございます。 for文の方法で作ってみます。 |
|
投稿日時: 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-18 10:10
おはようございます。
いまだにリストを使ってのシェルを考えてます。 うっちーさんが教えてくださったtclshを使う方法 で考えたのですが、ティクルという別の言語らしいので、Bシェルでは作成できないと憶測しました。 リストを使う方法とは、メインのシェルとは別に、ping対象のIPアドレスだけを記述したファイルを作って、そのファイル名をlistという名前にするそうです。 そしてメインシェルの中で、そのlistファイルを参照し、pingをさせるシェルになるそうです。参考書で参照するコマンドを探してますが、どのコマンドを使ってよいものやら悩んでます。 メインシェルの中から、listファイルに入っているIPアドレスを取ってくる事ができるコマンドってどういったコマンドを使えばよいのでしょうか? よろしくお願いいたします。 |