#!/bin/bash
COUNT=100
SIZE=100
INTERVAL=0.2
for myHost in `cat /files0/home/singhtr/input`
do
echo $myHost
ping -i $INTERVAL -q -n -s $SIZE -c $COUNT $myHost|grep -i packet
done
入力ファイル:
# cat input
4.2.2.2 abc ATT
8.8.8.8 def BCC
以下のように入力ファイルから複数の値を印刷する方法
予想出力:
IP of the device: 4.2.2.2
Device Name: abc
customer name:ATT
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
など。
bash / shellスクリプトでこれを達成したいと思います。
答え1
#!/bin/bash
while read myHost
do
COUNT=100
SIZE=100
INTERVAL=0.2
IP=$(echo $myHost | cut -d " " -f1)
NAME=$(echo $myHost | cut -d " " -f2)
CUSTOMER=$(echo $myHost | cut -d " " -f3)
PING=$(ping -i $INTERVAL -q -n -s $SIZE -c $COUNT $IP | grep -i packet)
echo "IP of the device: $IP"
echo "Device name: $NAME"
echo "Customer name: $CUSTOMER"
echo "$PING"
echo ""
done < /files0/home/singhtr/input
これが問題に対する考えられる解決策の1つです。出力したいものをcut
選択してください。その後、field
簡単なコマンドでecho
出力します。一度に 1 行ずつファイルを読み取るには、次のようにします。
while read LINE
do
...
done < FILE
編集する
定期的にスクリプトを実行するには、スクリプトの作成を検討する必要があります。入力して現在ログインしているユーザーを表示cronjob
できます。スケジュールをスケジュールするには:crontab -l
cronjobs
cronjob
$ crontab -e
crontabを編集します。たとえば、次のように挿入します。
*/15 * * * * /path/to/script >> /path/to/log_\`date +%s\` 2>&1
cronjob
これにより、15分ごとにその場所で実行され、Unixタイムスタンプサフィックス(1549883612など)を含むファイルで発生する可能性のあるエラー/path/to/script
と出力を記録するスクリプトが生成されます。/path/to/log_
答え2
まあ... Bashの詳細を習得する必要があります。 :-) 今数百ヤード離れています。
これにより開始されます。
#!/bin/bash
echo ----- reading one field at a time
for myhost in `cat ips`
do
echo $myhost
done
echo
echo ----- reading and printing one line at a time
while read line
do
echo $line
done < ips
echo ----- separating fields
while read line
do
ip=$( cut -d' ' -f1 <<< "$line" )
dev=$( cut -d' ' -f2 <<< "$line" )
cust=$( cut -d' ' -f3 <<< "$line" )
echo IP of device: $ip
echo device name: $dev
echo customer name: $cust
#do your ping here
echo
done < ips
関連する詳細は以下で確認できます。
$人カット
$ man bash -> "SHELL BUILTIN COMMANDS"セクション、コマンドのサブセクション
"<<<"情報:
$ man bash - >「ここに文字列」セクション
または、ここでは文字列の代わりにecho $line ...を使用してください(<<<)。
echo $ line | cut -d '' -f1など