bash-скрипт использует команду cut в переменной и сохраняет результат в другой переменной - PullRequest
18 голосов
/ 15 марта 2012

У меня есть config.txt файл с IP-адресами в виде содержимого, подобного этому

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

Я хочу пинговать каждый ip адрес в этом файле

#!/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

Я новичок, извините за такой вопрос, но сам не смог его найти.

Ответы [ 2 ]

36 голосов
/ 15 марта 2012

Я бы использовал решение awk, но если вы хотите понять свои проблемы с bash, вот пересмотренная версия вашего скрипта.

##config file with ip addresses like 10.10.10.1:80
#!/bin/bash -vx
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}.

Надеюсь, это поможет.

7 голосов
/ 15 марта 2012

Вы можете избежать петли, обрезки и т. Д., Используя:

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

Однако было бы лучше, если вы разместите фрагмент вашего config.txt

...