Process Control Shell
E Java, PHP e outras linguagens não são os mesmos, o controle de fluxo sh não está vazio, por exemplo (O seguinte é a escrita de controle de processo PHP):
<?php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
Em sh / bash não pode ser assim, por escrito, nenhuma declaração é executado se o ramo mais, não escreva isso mais.
if else
se
se sintaxe da instrução:
if condition then command1 command2 ... commandN fi
A linha única (para a linha de comandos terminal):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
O fim da fi é revertida se a ortografia mais tarde vai encontrar similar.
if else
Se a sintaxe mais:
if condition then command1 command2 ... commandN else command fi
if else-if else
if else-se sintaxe mais:
if condition1 then command1 elif condition2 then command2 else commandN fi
Os exemplos que se seguem determinar se duas variáveis são iguais:
a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi
saída:
a 小于 b
se else são muitas vezes utilizados em conjunto com o comando de teste da seguinte forma:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
saída:
两个数字相等!
loop
Como outras linguagens de programação, o apoio Shell para loop.
O formato geral do loop for:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
Uma única linha:
for var in item1 item2 ... itemN; do command1; command2… done;
Quando o valor da variável na lista, para loop que é executado uma vez todos os comandos, nomes de variáveis obter uma lista de o valor atual. Comando pode ser qualquer válido comandos shell e declarações. na lista pode incluir a cadeia de substituição eo nome do arquivo.
na lista é opcional, se você não usá-lo, para a reciclagem de linha de comando parâmetros de localização.
Por exemplo, a ordem de saída lista atual de números:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
saída:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
Sequencialmente gera uma cadeia de caracteres:
for str in 'This is a string' do echo $str done
saída:
This is a string
while
while para executar continuamente uma série de comandos, ele também é usado para ler os dados do arquivo de entrada; comando normalmente testar condições. O formato é:
while condition do command done
O que se segue é um básicos, enquanto as condições de teste loop: se int é menor ou igual a 5, a condição retorna verdadeiro. int partir do zero cada vez que o ciclo de processamento, além de um int. Execute o script acima retorna o número 1-5, em seguida, encerrar.
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
Executar o script, a saída:
1 2 3 4 5
Use utilizado Bash deixe de comando, que é usado para executar uma ou mais expressões, cálculos variáveis não precisa adicionar US $ para representar variáveis, especificamente compradores: comando Bash vamos
.while pode ser usado para ler as informações de teclado. O exemplo a seguir, a informação de entrada está definido para o FILM variável, pressione <Ctrl-D> end loop.
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的电影名: ' while read FILM do echo "是的!$FILM 是一部好电影" done
Executar o script, uma saída semelhante ao seguinte:
按下 <CTRL-D> 退出 输入你最喜欢的电影名: w3cschool本教程 是的!w3cschool本教程 是一部好电影
loop infinito
Infinito sintaxe loop:
while : do command done
ou
while true do command done
ou
for (( ; ; ))
até ciclo
até ciclo executa uma série de comandos até condição ser verdadeira quando parado.
até loop e loop while sobre a abordagem oposta.
Normalmente, enquanto loop até que uma melhor circulação, mas em algum momento - e só em casos raros, até que o ciclo mais útil.
até sintaxe:
until condition do command done
As condições podem ser quaisquer condições de teste, o teste ocorre no final do ciclo, e o circuito executada pelo menos uma vez - observe este ponto.
caso
Shell instrução case é mais instruções SELECT. Você pode usar a instrução caso corresponder a um valor com um padrão, se o jogo for bem sucedida, executar comandos correspondentes. formato de exposição do caso é o seguinte:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
trabalho do caso, como mostrado acima. O valor deve ser seguido por uma palavra em, cada modelo deve ser parêntese de fechamento. O valor pode ser variável ou constante. Depois de combinar um padrão consistente com os valores encontrados, durante o qual todos os comandos executados até ;;.
O valor de cada jogo irá detectar um padrão. Uma vez que a correspondência de padrão, padrão de correspondência depois de executar o comando correspondente não continuar a outros modos. Se não houver nenhuma correspondência de um padrão, usar um asterisco * para capturar o valor, e depois correr atrás de comando.
O script a seguir solicita 1-4, com cada correspondência de padrões:
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
Introduzir um teor diferente, haverá diferentes resultados, tais como:
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3
Fora do circuito
No ciclo, e às vezes não atende as necessidades forçados fora do circuito quando a condição final loop, Shell usa dois comandos para implementar este recurso: break e continue.
comando de pausa
quebrar comando permite que fora de todos os loops (ciclo termina a execução de toda a parte de trás).
O exemplo a seguir, o script em um loop infinito até que o usuário entra um número maior que 5. Para sair deste ciclo e voltar para a janela de comandos, utilize o comando pausa.
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done
Implementação do código acima, a saída é:
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束
continuar
continuar e quebrar comando comando semelhante, com uma diferença, não saltar para fora de todos os loops, apenas fora do ciclo atual.
Para modificar o exemplo acima:
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done
Execute o código foi encontrado, quando o número de entrada superior a 5, neste caso, não irá terminar o ciclo, a declaração echo "Jogo é mais!" Nunca será executado.
esac
Gramaticais e linguagem diferenças no caso da família C é grande, é preciso um esac (caso é, por sua vez) marcar o fim de cada ramo caso com um parêntese direito, representado por dois pontos e vírgulas quebrar.