Shell Process Control
E Java, PHP e altri linguaggi non sono le stesse, il controllo di flusso sh non è vuota, per esempio (che segue è la scrittura di controllo del processo PHP):
<?php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
In sh / bash non può essere così in forma scritta, nessuna dichiarazione viene eseguito se il ramo altro, non scrivere questo altro.
se altro
se
se sintassi dell'istruzione:
if condition then command1 command2 ... commandN fi
Una singola linea (per la riga di comando del terminale):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
La fine del fi è invertita se la grafia in seguito incontrerà simile.
se altro
se la sintassi altro:
if condition then command1 command2 ... commandN else command fi
if else-if else
if else-if sintassi altro:
if condition1 then command1 elif condition2 then command2 else commandN fi
I seguenti esempi determinare se due variabili sono uguali:
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
uscita:
a 小于 b
se else sono spesso usati in combinazione con comando di test come segue:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
uscita:
两个数字相等!
per il ciclo
Come altri linguaggi di programmazione, il supporto di Shell per il ciclo.
Il formato generale del ciclo for:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
Una sola riga:
for var in item1 item2 ... itemN; do command1; command2… done;
Quando il valore della variabile nella lista, per ciclo che viene eseguito una volta tutti i comandi, i nomi delle variabili ottenere un elenco del valore corrente. Comando può essere qualsiasi comandi di shell e dichiarazioni valide. in lista può includere la stringa di sostituzione e il nome del file.
in lista è opzionale, se non ne fanno uso, per il riciclaggio parametri della riga di comando di localizzazione.
Ad esempio, l'ordine di uscita attuale elenco di numeri:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
uscita:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
Sequenziale genera una stringa di caratteri:
for str in 'This is a string' do echo $str done
uscita:
This is a string
while
ciclo while per eseguire continuamente una serie di comandi, è anche usato per leggere i dati dal file di input; comando di solito Condizioni di prova. Il formato è:
while condition do command done
Quanto segue è una base, mentre condizioni di prova ciclo: se int è inferiore o uguale a 5, la condizione restituisce true. int inizia da zero ogni momento al trattamento ciclo, più 1 int. Eseguire lo script precedente restituisce il numero 1-5, poi terminare.
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
Eseguire lo script, uscita:
1 2 3 4 5
Utilizzare utilizzato Bash lasciare il comando, che viene utilizzato per eseguire una o più espressioni, calcoli di variabili non hanno bisogno di aggiungere $ per rappresentare variabili, in particolare gli acquirenti: comando bash lascia
.while può essere utilizzato per leggere le informazioni di tastiera. Il seguente esempio, le informazioni ingresso è impostato al film variabile, premere <Ctrl-D> end loop.
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的电影名: ' while read FILM do echo "是的!$FILM 是一部好电影" done
Eseguire lo script, output simile al seguente:
按下 <CTRL-D> 退出 输入你最喜欢的电影名: w3cschool本教程 是的!w3cschool本教程 是一部好电影
Infinite loop
sintassi ciclo infinito:
while : do command done
o
while true do command done
o
for (( ; ; ))
fino ad anello
Ciclo until esegue una serie di comandi finché la condizione è vera quando fermato.
fino loop e while sull'approccio opposta.
Solitamente mentre ciclo finché migliore circolazione, ma ad un certo punto - e solo in casi rari, finché il ciclo più utile.
fino sintassi:
until condition do command done
Le condizioni possono essere qualsiasi condizioni di test, il test si verifica alla fine del ciclo, e il ciclo eseguito almeno una volta - si prega di notare questo punto.
caso
istruzione case Shell è più istruzioni SELECT. È possibile utilizzare l'istruzione caso corrisponde a un valore con un modello, se la partita va a buon fine, i comandi corrispondenti eseguire. formato istruzione case è il seguente:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
lavori caso, come indicato sopra. Il valore deve essere seguito da una parola, ogni modello deve essere la chiusura parentesi. Il valore può essere variabile o costante. Dopo che corrispondono a un modello coerente con i valori trovati, durante il quale tutti i comandi eseguiti fino ;;.
Il valore di ogni partita rileverà un modello. Una volta che il pattern matching, pattern matching dopo l'esecuzione del comando corrispondente più continuare ad altre modalità. Se non vi è corrispondenza di un modello, utilizzare un asterisco * per acquisire il valore, e quindi eseguire il comando dietro.
Il seguente script richiede 1-4, con ogni pattern matching:
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
Inserire un contenuto diverso, ci saranno risultati diversi, come ad esempio:
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3
Fuori del loop
Nel ciclo, e, talvolta, non soddisfa le esigenze costretta ad uscire dal ciclo quando la condizione di fine ciclo, Shell utilizza due comandi per implementare questa funzione: pausa e continuare.
comando break
rompere comando permette di tutti i cicli (loop termina l'esecuzione di tutti indietro).
Il seguente esempio, lo script in un ciclo infinito fino a quando l'utente inserisce un numero maggiore di 5. Per uscire da questo ciclo e tornare al prompt della shell, utilizzare il comando break.
#!/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
L'attuazione del codice di cui sopra, l'output è:
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束
continuare
continuare e comando comando simile rompere, con una differenza, non saltare fuori tutti i loop, appena fuori del ciclo corrente.
Per modificare l'esempio precedente:
#!/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
Eseguire stato trovato il codice, quando il numero di ingresso superiore a 5, questo caso non si concluderà il ciclo, l'istruzione echo "gioco è finito!" Non verrà mai eseguita.
esac
Grammatica e della lingua differenze nel caso della famiglia C è grande, ci vuole un esac (caso è a sua volta) segnare la fine di ogni ramo caso con una parentesi destra, rappresentata da due punti e virgola rompono.