OnWorks Linux dan Windows Online Workstations

logo

Pengehosan Dalam Talian Percuma untuk Workstation

<Sebelum | Contents [show] | Seterusnya>

Menggabungkan Ungkapan

Anda juga boleh menggabungkan ungkapan untuk membuat penilaian yang lebih kompleks. Ungkapan digabungkan dengan menggunakan operator logik. Kami melihat ini dalam Bab 17, apabila kami mengetahui tentang mencari perintah. Terdapat tiga operasi logik untuk ujian and [[]]. Mereka adalah DAN, ATAU dan BUKAN. ujian and [[]] gunakan operator yang berbeza untuk mewakili operasi ini:


Jadual 27-4: Operator Logik


Operasi test [[ ]] dan (( ))

Operasi test [[ ]] dan (( ))

DAN -a &&


gambar

OR -o ||


gambar

TIDAK ! !


gambar


Berikut ialah contoh operasi DAN. Skrip berikut menentukan sama ada integer berada dalam julat nilai:



#! / Bin / Bash


# test-integer3: tentukan sama ada integer berada dalam a

# julat nilai yang ditentukan.


MIN_VAL=1 MAX_VAL=100


INT=50

#! / Bin / Bash


# test-integer3: tentukan sama ada integer berada dalam a

# julat nilai yang ditentukan.


MIN_VAL=1 MAX_VAL=100


INT=50



jika [[ "$INT" =~ ^-?[0-9]+$ ]]; kemudian

jika [[ INT -ge MIN_VAL && INT -le MAX_VAL ]]; kemudian echo "$INT berada dalam lingkungan $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada di luar julat."

fi lain

echo "INT bukan integer." >&2 keluar 1

fi


jika [[ "$INT" =~ ^-?[0-9]+$ ]]; kemudian

jika [[ INT -ge MIN_VAL && INT -le MAX_VAL ]]; kemudian echo "$INT berada dalam lingkungan $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada di luar julat."

fi lain

echo "INT bukan integer." >&2 keluar 1

fi


Dalam skrip ini, kita menentukan sama ada nilai integer INT terletak di antara nilai-nilai MIN_VAL and MAX_VAL. Ini dilakukan dengan satu penggunaan [[]], yang merangkumi dua ungkapan yang dipisahkan oleh && pengendali. Kami juga boleh mengekod ini menggunakan ujian:


if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; kemudian echo "$INT berada dalam lingkungan $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada di luar julat."

fi

if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; kemudian echo "$INT berada dalam lingkungan $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada di luar julat."

fi


. ! operator penolakan membalikkan hasil ungkapan. Ia mengembalikan benar jika ungkapan salah, dan ia mengembalikan palsu jika ungkapan benar. Dalam skrip berikut, kami mengubah suai logik penilaian kami untuk mencari nilai INT yang berada di luar julat yang ditentukan:



#! / Bin / Bash


# test-integer4: tentukan sama ada integer berada di luar a

# julat nilai yang ditentukan.


MIN_VAL=1 MAX_VAL=100


INT=50


jika [[ "$INT" =~ ^-?[0-9]+$ ]]; kemudian

jika [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; kemudian echo "$INT berada di luar $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada dalam julat."

#! / Bin / Bash


# test-integer4: tentukan sama ada integer berada di luar a

# julat nilai yang ditentukan.


MIN_VAL=1 MAX_VAL=100


INT=50


jika [[ "$INT" =~ ^-?[0-9]+$ ]]; kemudian

jika [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; kemudian echo "$INT berada di luar $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada dalam julat."



echo "INT bukan integer." >&2 keluar 1

fi


echo "INT bukan integer." >&2 keluar 1

fi

Kami juga menyertakan kurungan di sekeliling ungkapan, untuk pengumpulan. Jika ini tidak disertakan, penolakan hanya akan digunakan pada ungkapan pertama dan bukan gabungan kedua-duanya. Mengekod ini dengan ujian akan dilakukan dengan cara ini:


jika [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; kemudian echo "$INT berada di luar $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada dalam julat."

fi

jika [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; kemudian echo "$INT berada di luar $MIN_VAL hingga $MAX_VAL."

lagi

echo "$INT berada dalam julat."

fi


Oleh kerana semua ungkapan dan pengendali digunakan oleh ujian dianggap sebagai argumen arahan oleh shell (tidak seperti [[]] and (( )) ), watak yang mempunyai makna khusus untuk menampar, Seperti <, >, (, dan ), mesti dipetik atau dilepaskan.

gambar

Melihat itu ujian and [[]] melakukan perkara yang hampir sama, yang manakah lebih baik? ujian adalah tradisional (dan sebahagian daripada POSIX), sedangkan [[]] adalah khusus kepada menampar. Adalah penting untuk mengetahui cara menggunakannya ujian, kerana ia digunakan secara meluas, tetapi [[]] jelas lebih berguna dan lebih mudah untuk dikodkan, jadi ia lebih disukai untuk skrip moden.


Mudah Alih Adalah Hobgoblin Of Little Minds

Jika anda bercakap dengan orang Unix "sebenar", anda dengan cepat mendapati bahawa ramai daripada mereka tidak begitu menyukai Linux. Mereka menganggapnya sebagai najis dan najis. Satu prinsip pengguna Unix ialah semuanya harus "mudah alih." Ini bermakna mana-mana skrip yang anda tulis seharusnya boleh dijalankan, tidak berubah, pada mana-mana sistem seperti Unix.

Orang Unix mempunyai alasan yang kukuh untuk mempercayai perkara ini. Setelah melihat apa yang dilakukan oleh sambungan proprietari kepada arahan dan cengkerang kepada dunia Unix sebelum POSIX, mereka secara semula jadi berhati-hati terhadap kesan Linux pada OS kesayangan mereka.

Tetapi mudah alih mempunyai kelemahan yang serius. Ia menghalang kemajuan. Ia memerlukan perkara sentiasa dilakukan menggunakan teknik "penyebut biasa terendah". Dalam kes pengaturcaraan shell, ini bermakna menjadikan segala-galanya serasi dengannya sh, cengkerang Bourne yang asli.



gambar

Kelemahan ini ialah alasan yang vendor perisian proprietari gunakan untuk mewajarkan sambungan proprietari mereka, hanya mereka memanggilnya "inovasi." Tetapi mereka sebenarnya hanya peranti terkunci untuk pelanggan mereka.

Alat GNU, seperti menampar, tidak mempunyai sekatan sedemikian. Mereka menggalakkan mudah alih dengan menyokong piawaian dan dengan tersedia secara universal. Anda boleh memasang menampar dan alatan GNU yang lain pada hampir semua jenis sistem, malah Windows, tanpa kos. Jadi jangan ragu untuk menggunakan semua ciri menampar. Ia benar-benar mudah alih.


Pengkomputeran Awan OS teratas di OnWorks: