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 akhirif [ $(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:
Kescase 值 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.