web-dev-qa-db-ja.com

bashスクリプトは変数でcutコマンドを使用し、結果を別の変数に保存します

このようなコンテンツとしてIPアドレスを持つconfig.txtファイルがあります

10.10.10.1:80
10.10.10.13:8080
10.10.10.11:443
10.10.10.12:80

IPごとにpingそのファイルのアドレスにしたい

#!/bin/bash
file=config.txt

for line in `cat $file`
do
  ##this line is not correct, should strip :port and store to ip var
  ip=$line|cut -d\: -f1
  ping $ip
done

私は初心者です。このような質問には申し訳ありませんが、自分で見つけることができませんでした。

20
CodingYourLife

Awkソリューションは私が使用するものですが、bashの問題を理解したい場合は、スクリプトの改訂版を以下に示します。

_#!/bin/bash -vx

##config file with ip addresses like 10.10.10.1:80
file=config.txt

while read line ; do
  ##this line is not correct, should strip :port and store to ip var
  ip=$( echo "$line" |cut -d\: -f1 )
  ping $ip
done < ${file}
_

次のようにトップラインを書くことができます

_for line in $(cat $file) ; do ...
_

$ ipに割り当てられた値を取得するには、コマンド置換$( ... )が必要でした

ファイルからの行の読み取りは、通常_while read line ... done < ${file}_パターンを使用するとより効率的であると見なされます。

これがお役に立てば幸いです。

37
shellter

以下を使用して、ループやカットなどを回避できます。

awk -F ':' '{system("ping " $1);}' config.txt

ただし、config.txtのスニペットを投稿する方が良いでしょう

7
anubhava