Conceitualmente, o loop for usado para percorrer uma série de itens como loop através de cada item em uma matriz ou cada arquivo em um diretório, etc. O loop while deve ser usado enquanto uma determinada condição for verdadeira, como o contador A é menor que um valor máximo ou o tempo de ping em um servidor é menor que um limite ou para sempre se você for um pouco.
O loop até é semelhante ao loop while, mas com lógica reversa. Em vez de loop, enquanto uma condição é verdadeira, você está assumindo que a condição é falsa e loop até que se torne verdadeira. Eles são reversos um do outro em expressão lógica. Escolher o loop correto entre um loop de tempo e até o loop permite que seu programa seja mais legível e compreensível por outros ou por si mesmo quando você voltar ao código algum tempo depois.
Alguns exemplos ou motivos típicos para usar um loop até que o loop possa ser, até que o usuário digite 'saída'; Faça um loop até que os dados gerados sejam maiores que o volume de dados solicitados ou até que vários arquivos que correspondem à sua pesquisa sejam encontrados.
A sintaxe básica de até o loop se parece com o seguinte:
até [condição]; fazer
Linhas de código
Mais linhas de código
feito
Agora vamos fazer alguns exemplos. O primeiro exemplo será o fator múltiplo de dois até atingir um limite de tamanho de 1000:
#!/BIN/BASH
Num = 1
até ["$ num" -gt 1000]; fazer
eco $ num
Deixe num = num*2
feito
O segundo exemplo continuará a pinar um URL até que o tempo de resposta seja superior a 100 milissegundos:
#!/BIN/BASH
Milissegundos = 0
# Vamos ping até que se torne mais lento que 1000 milissegundos
Até [$ milissegunds -gt 1000]
fazer
# Execute o ping e extraia a linha que tem o tempo de ping, que termina no tempo = xxxx ms
Saída = 'ping -c 1 google.com | Hora do grep | awk -f = 'print $ nf' '
eco "Time de ping: $ output"
# Extrair número de miliseocnds da string como inteiro
Milissegundos = 'eco $ saída | awk 'print $ 1' | awk -f. 'print $ 1' '
eco "Número de MS = $ milissegundos"
sono 1
feito
eco "O tempo de ping excedeu 1000 milissegundos"
O terceiro exemplo levará um arquivo e combinará o arquivo consigo mesmo até atingir 1 kilobyte de tamanho:
#!/BIN/BASH
Nome do arquivo = 'nome de base "$ 0"'
ECHO $ FILENAME
Tmp_file = "./tmp1 "
Target_file = "./alvo"
CAT $ FILENAME> $ TARGA_FILE
FileSize = 0
# Aumente o tamanho do arquivo até 1kb
Até [$ filesize -gt 1024]
fazer
# Adicione este arquivo ao conteúdo do arquivo de destino
CP $ TARGEN_FILE $ TMP_FILE
CAT $ tmp_file >> $ Target_file
Filesize = 'du $ target_file | awk 'print $ 1' '
eco "FileSize: $ filesize"
sono 1
feito
eco "novo tamanho de filmes atingiu a meta de 1kb"
O quarto exemplo solicitará ao usuário a entrada de seu nome até que eles digitem a saída para sair do programa:
#!/BIN/BASH
Resposta = "foo"
# Aumente o tamanho do arquivo até 1kb
Até ["$ resposta" = "Exit"]
fazer
eco -n "Digite seu nome ou 'saída' para sair deste programa:"
Leia a resposta
Se ["$ resposta" != "Exit"]; então
eco "Hello $ Response"
fi
feito
eco "Obrigado por jogar este jogo"
O ponto principal é usar ATÉ Loop para tornar seu código mais claro quando se espera que a condição seja sempre falsa e você deseja interromper sua ação de loop quando a condição se tornar verdadeira. Em outras palavras, continue fazendo loop ATÉ algum ponto no tempo. Com esta perspectiva, espero que seus scripts bash possam ser mais claros e você aprendeu algo com este artigo. Obrigado.