Cheguei a uma seção de um livro bash que está tentando me mostrar que você pode usar uma instrução read em conjunto com um loop while para ler cada linha de um arquivo e, em seguida, capturar as duas primeiras palavras em duas variáveis. No entanto, escrevi meu próprio script para testá-lo abaixo.
$ cat hoststest
192.168.1.1 pc1 word3 word4
192.168.1.2 pc2 word3 word4
$ cat t13
#!/bin/bash
while read ip_address pc_number restofstuff
do
if [ ! -z "$ip_address" ]; then
echo "IP is $ip_address and its for $pc_number"
fi
done < "/home/john/hoststest"
$ ./t13
IP is 192.168.1.1 and its for pc1
IP is 192.168.1.2 and its for pc2
No meu teste original eu não tinha a terceira variável "restofstuff". O que aconteceu foi que, em vez da variável pc_number obter apenas pc1 ou pc2 como seu valor, pc_number estava sendo armazenado como o resto da linha. Então, adicionei essa terceira variável para não obter todo o restante da linha como parte do pc_number. O que fiz funciona agora, com essa variável "restofstuff", mas não parece que estou fazendo certo. Basicamente, fiz uma variável "morta" que não faz nada. Se eu estivesse tentando continuar usando o loop read + while, qual seria a maneira certa de fazer isso (observe, é a combinação while loop + read com a qual estou trabalhando/aprendendo, então quero manter o foco em que).
É assim que
read
funciona: se houver mais campos em sua entrada do que variáveis, a última variável recebe o campo correspondente e todas as sobras. A prática típica é nomear esta variável_
:Consulte Entendendo "IFS= read -r line" para uma discussão aprofundada sobre
read
, e Por que usar um loop de shell para processar texto é considerado uma prática ruim?