Maneiras diferentes de ler o arquivo em scripts bash usando o loop while
- 1120
- 263
- Ms. Travis Schumm
Este artigo é sobre como ler arquivos em scripts bash usando um enquanto loop. Ler um arquivo é uma operação comum na programação. Você deve estar familiarizado com métodos diferentes e qual método é mais eficiente para usar. Em Bash, uma única tarefa pode ser alcançada de várias maneiras, mas sempre há uma maneira ideal de realizar a tarefa e devemos segui -la.
Antes de ver como ler o conteúdo do arquivo usando enquanto loop, Uma cartilha rápida sobre como o loop funciona. Enquanto o loop avalia uma condição e itera sobre um determinado conjunto de códigos quando a condição é verdadeira.
Enquanto [condição] faça o bloco de código feito
Vamos quebrar enquanto loop sintaxe.
- enquanto loop deve começar com um tempo a palavra -chave seguida por uma condição.
- A doença deve ser fechado dentro [] ou [[]]. A condição deve sempre retornar verdadeira para que o loop seja executado.
- O bloco real de código será colocado entre fazer e feito.
Número = 0 enquanto [[$ número -le 10]] faça eco "Bem -vindo $ número vezes" ((número ++)) feitoEnquanto loop
Este é um exemplo muito simples, onde o laço executa até NÚMERO não é maior que 10 e imprime a declaração de eco.
Juntamente com enquanto Vamos usar o ler comando para ler o conteúdo de uma linha de arquivo por linha. Abaixo está a sintaxe de como enquanto e ler Os comandos são combinados. Agora existem maneiras diferentes de passar o arquivo como entrada e veremos todos eles.
# Sintaxe enquanto a variável lida faz código feito
Tubulação no Linux
Normalmente usaremos o comando CAT para visualizar o conteúdo do arquivo do terminal. Além disso, vamos colocar a saída do comando gato para outros comandos como Grep, classificação, etc.
Da mesma forma, usaremos o comando gato Aqui para ler o conteúdo do arquivo e transmitir -o para um enquanto laço. Para demonstração, estou usando /etc/passwd arquivo, mas não é aconselhável mexer com este arquivo, então pegue uma cópia de backup deste arquivo e jogue com ele se desejar.
gato /etc /passwd | Enquanto leia Lread do eco $ lread feitoTubulação no Linux
Vamos quebrar o que acontecerá quando o código acima for enviado.
- gato /etc /passwd lerá o conteúdo do arquivo e o passará como entrada através do tubo.
- ler O comando lê cada linha passada como entrada do comando CAT e o armazena no Lread variável.
- ler O comando lerá o conteúdo do arquivo até EOL é interpretado.
Você também pode usar outros comandos como cabeça, cauda e tubar -o para o loop.
Cabeça -n 5 /etc /passwd | Enquanto leia Lread do eco $ lread feitoComando de cabeça
Redirecionamento de entrada no Linux
Podemos redirecionar o conteúdo do arquivo para enquanto loop Usando o operador de redirecionamento de entrada (<)
.
Enquanto leia Lread do eco $ lread feito < /etc/passwd | head -n 5Redirecionamento de entrada
Você também pode armazenar o nome do arquivo em uma variável e passá -lo por um operador de redirecionamento.
Filename = "/etc/passwd" enquanto lia lread do eco $ lread feito < $FILENAMEArmazenar o nome do armazenamento em variável
Você também pode passar os nomes de arquivos como um argumento para o seu script.
Enquanto leia Lread do eco $ lread feito < $1 | head -n 5Armazenar o nome do arquivo como argumento
Separador de campo interno
Você pode trabalhar com diferentes tipos de formatos de arquivo (CSV, TXT, JSON) e você pode dividir o conteúdo do arquivo com base em um delimitador personalizado. Nesse caso, você pode usar “Separador de campo interno (IFS)”Para dividir o conteúdo do arquivo e armazená -lo em variáveis.
Deixe -me demonstrar como funciona. Dê uma olhada no /etc/passwd arquivo que tem um cólon (:)
Como delimitador. Agora você pode dividir cada palavra de uma linha e armazená -la em uma variável separada.
No exemplo abaixo, estou dividindo /etc/passwd Arquive com um cólon como meu separador e armazenando cada divisão em diferentes variáveis.
enquanto ifs = ":" Leia a b c d e f g do echo $ a echo $ b echo $ c echo $ d echo $ e echo $ f echo $ g done done doado < /etc/passwdSeparador de campo interno
Eu exibi apenas uma linha dividida na captura de tela acima, considerando o tamanho da captura de tela.
Linhas vazias no Linux
Linhas vazias não são ignoradas quando você laço através do conteúdo do arquivo. Para demonstrar isso, criei um arquivo de amostra com o conteúdo abaixo. Existem 4 linhas e poucas linhas vazias, liderando espaço em branco, espaço em branco, caracteres de guia na linha 2 e alguns caracteres de fuga (\ n e \ t).
Arquivo com linhas vaziasEnquanto leia Lread do eco $ lread feito < testfileLinha em branco não ignorada
Veja o resultado, a linha em branco não é ignorada. Além disso, uma coisa interessante a ser observada é como os espaços brancos são aparados pelo ler comando. Uma maneira simples de ignorar linhas em branco ao ler o conteúdo do arquivo é usar o operador de teste com o -z
sinalizador que verifica se o comprimento da string é zero. Agora vamos repetir o mesmo exemplo, mas desta vez com um operador de teste.
Enquanto leia Lread, faça se [[ ! -z $ lread]] então echo $ lread fi feito < testfileLinhas em branco ignoradas
Agora, da saída, você pode ver linhas vazias são ignoradas.
Escapar de personagens
Escape personagens como \ n
, \ t
, \ c
não será impresso ao ler um arquivo. Para demonstrar isso, estou usando o mesmo arquivo de amostra que tem poucos caracteres de fuga.
Enquanto leia Lread do eco $ lread feito < testfileEscape Character in Linux
Você pode ver nos caracteres de escape de saída perderam seu significado e somente n e t são impressos em vez de \ n
e \ t
. Você pode usar -r
Para evitar a interpretação da barra de barragem.
Enquanto leia -r lread do eco $ lread feito < testfileEvite a interpretação da barra de barra
É isso para este artigo. Gostaríamos muito de ouvir de você se houver algum feedback ou dicas. Seu feedback é o que nos ajuda a criar um conteúdo melhor. Continue lendo e continue apoiando.
- « LFCA Aprenda comandos básicos de gerenciamento de arquivos no Linux - Parte 2
- Diferentes maneiras de usar o comando da coluna no Linux »