Laços FOR e instruções WHILE

Introdução ao Bash Scripting

Alex Scriven

Data Scientist

Estrutura básica do laço FOR

Python:

for x in range(3):
    print(x)
0
1
2

R:

for (x in seq(3)){
    print(x)
}
[1] 1
[1] 2
[1] 3
Introdução ao Bash Scripting

Laço FOR no Bash

A estrutura básica em Bash é parecida:

for x in 1 2 3

do echo $x done
1
2
3
Introdução ao Bash Scripting

Intervalos numéricos no FOR

O Bash tem um jeito prático de criar intervalos numéricos chamado "brace expansion":

  • {START..STOP..INCREMENT}
for x in {1..5..2}

do echo $x done
1
3
5
Introdução ao Bash Scripting

Sintaxe de três expressões no FOR

Outra forma comum de escrever FOR é a sintaxe de "três expressões".

  • Coloque as três expressões entre parênteses duplos
  • A primeira parte é a expressão inicial (x=2)
  • A do meio é a condição de parada (x<=4)
  • A final é a expressão de incremento (ou decremento) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Introdução ao Bash Scripting

Expansões glob

O Bash também permite expansões por padrão em um laço for usando o símbolo *, como para arquivos em um diretório.

Por exemplo, suponha que haja dois documentos de texto na pasta /books:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Introdução ao Bash Scripting

Revisitando o shell-dentro-do-shell

Lembra de criar um shell-dentro-do-shell usando a notação $()?

Você pode chamar isso direto em um laço for!

Vamos supor uma estrutura de pastas assim:

Estrutura do diretório books

Introdução ao Bash Scripting

Shell-dentro-do-shell em um FOR

Podemos iterar sobre o resultado de uma chamada ao shell-dentro-do-shell:

for book in $(ls books/ | grep -i 'air')

do echo $book done
AirportBook.txt
FairMarketBook.txt
Introdução ao Bash Scripting

Sintaxe do WHILE

Parecido com um laço FOR, mas você define uma condição testada a cada iteração.

As iterações continuam até a condição deixar de ser verdadeira!

  • Use a palavra while em vez de for
  • Coloque a condição entre colchetes
    • Use as mesmas flags de comparação numérica de IF (como -le)
  • Várias condições podem ser encadeadas ou use colchetes duplos como em "IF", com && (AND) ou || (OR)
  • Garanta alguma mudança no código que faça parar (senão o loop pode ser infinito!)
Introdução ao Bash Scripting

Exemplo de WHILE

Um exemplo simples:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Introdução ao Bash Scripting

Cuidado com o loop infinito

Cuidado com o WHILE infinito, quando a condição de parada nunca é atingida.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # não incremente x. Ele nunca chega a 3!
    # ((x+=1)) 
done

Isso vai imprimir 1 para sempre!

Introdução ao Bash Scripting

Vamos praticar!

Introdução ao Bash Scripting

Preparing Video For Download...