Shell Process Control
Dan Java, PHP dan bahasa lainnya tidak sama, kontrol aliran sh tidak kosong, misalnya (Berikut ini adalah tulisan PHP kontrol proses):
<?php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
Dalam sh / bash mungkin tidak begitu dalam menulis, tidak ada pernyataan dieksekusi jika cabang lain, tidak menulis ini lain.
jika lain
jika
jika sintaks pernyataan:
if condition then command1 command2 id. commandN fi
Sebuah garis tunggal (untuk command prompt terminal):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
Akhir fi dibalik ejaan nanti akan menghadapi serupa.
jika lain
jika sintaks lain:
if condition then command1 command2 id. commandN else command fi
jika lain-lain jika
jika lain-jika sintaks lain:
if condition1 then command1 elif condition2 then command2 else commandN fi
Contoh berikut menentukan apakah dua variabel 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
Output:
a 小于 b
jika pernyataan lain yang sering digunakan dalam hubungannya dengan perintah uji sebagai berikut:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
Output:
两个数字相等!
untuk loop
Seperti bahasa pemrograman lain, dukungan Shell untuk loop.
Format umum untuk loop:
for var in item1 item2 id. itemN do command1 command2 id. commandN done
Sebuah garis tunggal:
for var in item1 item2 id. itemN; do command1; command2… done;
Ketika nilai variabel dalam daftar, untuk loop yang dieksekusi setelah semua perintah, nama variabel mendapatkan daftar nilai saat ini. Perintah dapat berupa valid perintah shell dan pernyataan. dalam daftar dapat mencakup string pengganti dan nama file.
dalam daftar adalah opsional, jika Anda tidak menggunakannya, untuk daur ulang parameter baris perintah lokasi.
Sebagai contoh, urutan keluaran daftar sekarang nomor:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
Output:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
Berurutan output string dari karakter:
for str in 'This is a string' do echo $str done
Output:
This is a string
sementara pernyataan
while untuk terus menjalankan serangkaian perintah, juga digunakan untuk membaca data dari file input; perintah biasanya menguji kondisi. Formatnya adalah:
while condition do command done
Berikut ini adalah dasar sementara kondisi pengujian lingkaran: jika int kurang dari atau sama dengan 5, kondisi mengembalikan nilai true. int mulai dari nol setiap kali pengolahan lingkaran, ditambah 1 int. Jalankan script di atas mengembalikan nomor 1-5, kemudian mengakhiri.
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
Menjalankan script, keluaran:
1 2 3 4 5
Gunakan digunakan Bash membiarkan perintah, yang digunakan untuk melakukan satu atau lebih ekspresi, perhitungan variabel tidak perlu menambahkan $ untuk mewakili variabel, khususnya Pembeli: Bash membiarkan perintah
.while dapat digunakan untuk membaca informasi Keyboard. Contoh berikut, informasi masukan diatur ke FILM variabel, tekan <Ctrl-D> end lingkaran.
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的电影名: ' while read FILM do echo "是的!$FILM 是一部好电影" done
Menjalankan script, output yang mirip dengan berikut:
按下 <CTRL-D> 退出 输入你最喜欢的电影名: w3cschool本教程 是的!w3cschool本教程 是一部好电影
infinite loop
Tak terbatas sintaks lingkaran:
while : do command done
atau
while true do command done
atau
for (( ; ; ))
sampai loop
sampai loop mengeksekusi serangkaian perintah sampai kondisi benar ketika berhenti.
sampai loop dan sementara loop pada pendekatan yang berlawanan.
Biasanya while sampai sirkulasi lebih baik, tetapi di beberapa titik - dan hanya dalam kasus yang jarang, sampai siklus lebih berguna.
sampai sintaks:
until condition do command done
Kondisi mungkin setiap kondisi tes, tes terjadi pada akhir siklus, dan loop dijalankan minimal sekali - perhatikan hal ini.
kasus
Shell pernyataan kasus lebih laporan pilih. Anda dapat menggunakan laporan kasus sesuai nilai dengan pola, jika pertandingan berhasil, menjalankan perintah yang sesuai. Format laporan kasus adalah sebagai berikut:
case 值 in 模式1) command1 command2 id. commandN ;; 模式2) command1 command2 id. commandN ;; esac
kerja kasus seperti yang ditunjukkan di atas. Nilai harus diikuti oleh kata dalam, masing-masing model harus menutup kurung. nilai dapat variabel atau konstan. Setelah pencocokan pola yang konsisten dengan nilai-nilai yang ditemukan, di mana semua perintah dijalankan sampai ;;.
Nilai dari setiap pertandingan akan mendeteksi pola. Setelah pencocokan pola, pola yang cocok setelah mengeksekusi perintah yang sesuai tidak lagi terus mode lainnya. Jika tidak ada pencocokan pola, gunakan tanda bintang * untuk menangkap nilai, dan kemudian berjalan di belakang perintah.
Script berikut meminta untuk 1-4, dengan masing-masing pencocokan pola:
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 isi yang berbeda, akan ada hasil yang berbeda, seperti:
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3
Keluar dari loop
Dalam siklus, dan kadang-kadang tidak memenuhi kebutuhan dipaksa keluar dari loop ketika kondisi loop akhir, Shell menggunakan dua perintah untuk mengimplementasikan fitur ini: istirahat dan melanjutkan.
perintah istirahat
mematahkan perintah memungkinkan dari semua loop (lingkaran berakhir pelaksanaan semua kembali).
Contoh berikut, script menjadi infinite loop sampai pengguna memasukkan angka yang lebih besar dari 5. Untuk keluar dari siklus ini dan kembali ke shell prompt, gunakan perintah istirahat.
#!/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
Pelaksanaan kode di atas, output adalah:
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束
terus
terus dan istirahat perintah perintah serupa, dengan satu perbedaan, itu tidak melompat keluar dari semua loop, hanya keluar dari siklus saat ini.
Untuk memodifikasi 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
Menjalankan kode ditemukan, ketika jumlah masukan lebih besar dari 5, hal ini tidak akan mengakhiri siklus, pernyataan echo "Pertandingan berakhir!" Akan pernah dieksekusi.
esac
Tata bahasa dan bahasa perbedaan dalam hal C keluarga besar, dibutuhkan esac a (kasus pada gilirannya) menandai akhir dari masing-masing cabang kasus dengan kurung kanan, diwakili oleh dua titik koma istirahat.