Aqui está o seu script fixo para funcionar do jeito que eu acho que você quis que funcionasse:
i=1
while read line;
do
while :; do
var=$( echo $line | cut -d ':' -f$i )
i=$( expr $i + 1 )
[[ "$var" != "" ]] || break
echo $var
done
done <$1
Algumas observações:
-
i
não foi inicializado -
var
também não foi inicializado, portanto, o loop interno não seria executado nem uma vez - Não tenho certeza do que
[[ $var -ne '0' ]]
testa, mas acho que é melhor comparar$var
com uma string vazia. - Como consequência, se houver um campo enpty (ou seja, dois dois pontos consecutivos), esse script terminará lá
Uma maneira mais robusta de fazer o mesmo é:
while read line; do
num_fields=$(echo $line|awk -F':' '{print NF}')
for (( i=1; i <= num_fields; i++ )); do
var=$( echo $line | cut -d ':' -f$i )
echo $var
done
done <$1