Latest web development tutorials

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
    ...
    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
    ...
    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 ... itemN
do
    command1
    command2
    ...
    commandN
done

Sebuah garis tunggal:

for var in item1 item2 ... 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
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    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.