Я бы использовал решение 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}
.
Надеюсь, это поможет.