Latest web development tutorials

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.