質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

3回答

2113閲覧

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

IIJaaa

総合スコア1

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2022/03/07 08:10

編集2022/03/07 08:21

LinuxのUbuntuでシェルスクリプトを用いて
自身のIPアドレス宛に2秒ごとに10回のpingを発行したいです。
また、全てのpingが正常に動作されているなら
”(IPアドレス)は正常に動作されています。”と出力するシェルを作りたいのです。
初心者なため、後半の”動作されています”の出力が出来ません。

pingで生存確認まで理解したのですが、その後の正常に動作されている場合の文字の出力方法がわかりません。
お力添えをいただけると幸いです。

どなたかお力をお貸しください。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arcxor

2022/03/07 08:13

あなたがどこまで分かっていて何が分からないのかを明確にしなければ、力を貸すことができません。 どこまでできていて何ができないのかを詳しく教えて下さい。
IIJaaa

2022/03/07 08:17

ご指摘ありがとうございます。 #!/usr/bin/bash vi shellscript.sh ここでviエディタから #! /bin/bash if ping -c 10 -i 2 IPアドレス までできています。 よろしくお願い致します。
YT0014

2022/03/07 09:17

pingのManPageには「このプログラムはネットワークのテスト・計測・管理についての使用を意図している。 このプログラムがネットワークに強いる負荷を考えれば、 ping をトラブルのないときや自動スクリプトから実行することは奨められない。」とありますので、常用される場合は慎重な判断が必要かと思われます。 https://linuxjm.osdn.jp/html/netkit/man8/ping.8.html
guest

回答3

0

ベストアンサー

Bash

1#! /bin/bash 2if ping -c 10 -i 2 IPアドレス 3then echo IPアドレス は正常に動作されています。 4fi

でしょうか。日本語が間違ってますけど、そのまま。
また、pingは10回のうち一度でも成功すれば正常終了のはずなので、「10回とも成功」の時だけ正常として扱いたいなら、終了ステータスをみるのでは駄目で、メッセージを見るしかないと思います。もしくは、

Bash

1#! /bin/bash 2success=true 3for i in {1..10} 4do 5 if ! ping -c 1 -i 2 IPアドレス 6 then success=false 7 break 8 fi 9done 10if $success 11then echo IPアドレス は正常に動作されています。 12fi

のように1回のpingを10回繰り返すか。

投稿2022/03/07 09:14

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「自身のIPアドレス」は一つとは限りませんので、loopback と IPv6 link-local を除く全てのアドレスをチェックしています。

bash

1#!/bin/bash 2 3declare -a ip_addrs=$(hostname -I) 4for addr in ${ip_addrs[@]} 5do 6 if ping -q -c 10 -i 2 $addr | grep -qE ', 0% packet loss';then 7 echo "($addr)さんは正常に動作されています。" 8 fi 9done

hostname(1)

-I, --all-ip-addresses

 Display all network addresses of the host. This option enumerates all configured addresses on all network interfaces. The loopback interface and IPv6 link-local addresses are omitted. Contrary to option -i, this option does not depend on name resolution. Do not make any assumptions about the order of the output.

投稿2022/03/07 10:21

melian

総合スコア19798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

bash

1#!/bin/bash 2 3IP_ADDRESS='127.0.0.1' 4 5RESULT=`ping $IP_ADDRESS -c 10 -i 2 | grep 'packets transmitted'` 6 7if [[ $RESULT =~ ([0-9]+)[^\S]packets[^\S]transmitted ]]; then 8 a=${BASH_REMATCH[1]} 9fi 10if [[ $RESULT =~ ([0-9]+)[^\S]packets[^\S]received ]]; then 11 b=${BASH_REMATCH[1]} 12fi 13 14if [ -n "$a" -a -n "$b" ]; then 15 if [ "$a" -eq "$b" ]; then 16 echo "${IP_ADDRESS}は正常に動作されています。" 17 else 18 echo $RESULT 19 fi 20fi

こんな感じでしょうか。

投稿2022/03/07 09:31

arcxor

総合スコア2859

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2022/03/07 09:35

grep ' 0% packet loss' で良くないですか?
arcxor

2022/03/07 09:49 編集

良くありません。100.0% ならまあ良いかもしれません。
otn

2022/03/07 10:36

質問者は全部成功(ロス無し)の時だけ成功としたいのでは?
arcxor

2022/03/07 10:41 編集

ああ、loss だから 0% ですね。すみません。 ただ、環境によってはそこの表記は小数第一位まで出るようです。 0.0% か 0% か分からなかったので上記のように書きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問