Kawalan proses shell


Tidak seperti Java, PHP dan bahasa lain, kawalan proses sh tidak boleh kosong, seperti (berikut ialah cara menulis kawalan proses PHP):

<?php
if (isset($_GET["q"])) {
    search(q);
}
else {
    // 不做任何事情
}

Ini tidak boleh ditulis dalam sh /bash. Jika tiada pernyataan untuk dilaksanakan dalam cawangan lain, jangan tulis ini lain.


jika lain

jika

if format sintaks pernyataan:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

ditulis dalam satu baris (berkaitan dengan gesaan arahan terminal):

Fi pada akhir
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

ialah jika dieja ke belakang Anda akan menemui yang serupa kemudian.

jika lain

jika lain Format tatabahasa:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

jika lain-jika lain

jika lain-jika lain Format tatabahasa:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

Contoh berikut menentukan sama ada dua pembolehubah adalah sama:

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

Hasil keluaran:

a 小于 b

if else pernyataan sering digunakan bersama-sama dengan arahan ujian, seperti ditunjukkan di bawah:

num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi

Hasil Output:

两个数字相等!

untuk gelung

Sama seperti bahasa pengaturcaraan lain, Shell menyokong gelung.

Format umum gelung for ialah:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

Ditulis dalam satu baris:

for var in item1 item2 ... itemN; do command1; command2… done;

Apabila nilai pembolehubah berada dalam senarai, gelung for melaksanakan semua arahan sekali dan menggunakan nama pembolehubah untuk mendapatkan senarai Nilai semasa . Perintah itu boleh berupa perintah dan pernyataan shell yang sah. Senarai dalam boleh mengandungi penggantian, rentetan dan nama fail. Senarai

dalam adalah pilihan Jika ia tidak digunakan, gelung for menggunakan parameter kedudukan baris arahan.

Contohnya, keluarkan nombor dalam senarai semasa mengikut tertib:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

Hasil keluaran:

The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

Output aksara dalam rentetan mengikut urutan:

for str in 'This is a string'
do
    echo $str
done

Hasil keluaran :

This is a string

sementara pernyataan

while loop digunakan untuk melaksanakan siri arahan secara berterusan dan juga digunakan untuk membaca data daripada fail input biasanya merupakan syarat ujian . Formatnya ialah:

while condition
do
    command
done

Berikut ialah gelung semasa asas Syarat ujian ialah: jika int kurang daripada atau sama dengan 5, maka syarat itu kembali benar. int bermula dari 0 dan meningkat sebanyak 1 setiap kali gelung diproses. Jalankan skrip di atas, kembalikan nombor 1 hingga 5, dan kemudian tamatkan.

#!/bin/sh
int=1
while(( $int<=5 ))
do
        echo $int
        let "int++"
done

Jalankan skrip, output:

1
2
3
4
5

Arahan Bash let digunakan, yang digunakan untuk melaksanakan satu atau lebih ungkapan Tidak perlu menambah $ untuk mewakili pembolehubah dalam pengiraan pembolehubah . Untuk butiran, sila rujuk: Bash let command

.

While loop boleh digunakan untuk membaca maklumat papan kekunci. Dalam contoh berikut, maklumat input ditetapkan kepada FILEM pembolehubah dan menekan <Ctrl-D>

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的电影名: '
while read FILM
do
    echo "是的!$FILM 是一部好电影"
done

Jalankan skrip, outputnya adalah serupa dengan yang berikut:

按下 <CTRL-D> 退出
输入你最喜欢的电影名: w3cschoolphp中文网
是的!w3cschoolphp中文网 是一部好电影

Gelung tak terhingga

Format sintaks gelung tak terhingga:

while :
do
    command
done

atau

while true
do
    command
done

atau

for (( ; ; ))



sehingga gelung

sehingga gelung melaksanakan satu siri arahan sehingga keadaan benar dan berhenti.

Kaedah pemprosesan gelung sehingga gelung dan sambil adalah bertentangan.

Secara amnya, gelung while adalah lebih baik daripada sehingga gelung, tetapi kadangkala - dan hanya dalam kes yang jarang berlaku - sehingga gelung lebih berguna.

sehingga format sintaks:

until condition
do
    command
done

Keadaan ini boleh berupa sebarang keadaan ujian Ujian berlaku pada penghujung gelung, jadi gelung dilaksanakan sekurang-kurangnya sekali - sila ambil perhatian ini.


kes

Kenyataan kes shell ialah pernyataan berbilang pilihan. Anda boleh menggunakan penyataan kes untuk memadankan nilai dan corak Jika padanan berjaya, arahan padanan dilaksanakan. Format pernyataan kes adalah seperti berikut:

Kes
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

berfungsi seperti yang ditunjukkan di atas. Nilai mesti diikuti dengan perkataan dalam, dan setiap corak mesti berakhir dengan kurungan yang betul. Nilai boleh menjadi pembolehubah atau pemalar. Selepas padanan mendapati bahawa nilai sepadan dengan corak tertentu, semua arahan mula dilaksanakan sehingga ;;. Nilai

akan mengesan setiap corak yang sepadan. Setelah corak dipadankan, corak lain tidak akan diteruskan selepas melaksanakan arahan yang sepadan dengan corak yang sepadan. Jika tiada corak sepadan, gunakan asterisk * untuk menangkap nilai dan laksanakan arahan berikut.

Skrip berikut menggesa anda memasukkan 1 hingga 4 untuk memadankan setiap corak:

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

Masukkan kandungan yang berbeza, akan ada hasil yang berbeza, contohnya:

输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3

Pecah keluar dari gelung

Semasa proses gelung, kadangkala perlu untuk memaksa keluar gelung apabila keadaan akhir gelung tidak dicapai Shell menggunakan dua arahan untuk mencapai fungsi ini: putus dan teruskan .

arahan putus

arahan putus membenarkan pemutusan semua gelung (menamatkan pelaksanaan semua gelung berikutnya).

Dalam contoh berikut, skrip memasuki gelung tak terhingga sehingga pengguna memasukkan nombor yang lebih besar daripada 5. Untuk keluar dari gelung ini dan kembali ke gesaan shell, anda perlu menggunakan perintah 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

melaksanakan kod di atas, hasil output ialah:

输入 1 到 5 之间的数字:3
你输入的数字为 3!
输入 1 到 5 之间的数字:7
你输入的数字不是 1 到 5 之间的! 游戏结束

teruskan

perintah continue adalah serupa dengan perintah break, dengan satu perbezaan, ia tidak akan melompat keluar dari semua gelung, hanya satu kitaran semasa.

Ubah suai contoh di atas:

#!/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

Jalankan kod dan dapatkan bahawa apabila nombor yang lebih besar daripada 5 dimasukkan, gelung dalam contoh ini tidak akan berakhir, dan pernyataan gema " Permainan tamat !" tidak akan dilaksanakan.


esac

Sintaks kes sangat berbeza daripada bahasa keluarga C. Ia memerlukan esac (sebalik kes) sebagai tanda akhir, dan setiap cawangan kes menggunakan a kurungan kanan Gunakan dua titik bertitik untuk menunjukkan pecah.