Saya sedang belajar pesta.
Saya ingin membuat skrip sederhana yang, jika tidak diberikan argumen, menunjukkan beberapa pesan. Dan ketika saya memberikan angka sebagai argumen, tergantung pada nilainya, itu melakukan satu atau lain hal.
Saya juga ingin mengetahui saran untuk manual online terbaik untuk pemula di bash
Terima kasih
> /dev/null
dan / atau2> /dev/null
setelah itu untuk mengirim output standar dan / atau aliran kesalahan standar terlupakan.exit 1
). Ada ketentuan lebih lanjut tentang kode pengembalian / keluar, yang dapat Anda temukan secara online dengan cepat, tetapi poin pentingnya adalah bahwa itu tidak boleh 0, yang menunjukkan keberhasilan.Jika hanya tertarik untuk bailing jika ada argumen tertentu yang hilang, Substitusi Parameter sangat bagus:
sumber
Contoh
Hasil
Detail
-z adalah operator unary karena panjang string adalah nol.
$*
adalah semua argumen. Tanda kutip untuk keamanan dan merangkum banyak argumen jika ada.Gunakan
man bash
dan cari ( / key) untuk "unary" untuk lebih banyak operator seperti ini.sumber
-z
sebagai mizzingTua tapi saya punya alasan untuk mengerjakan ulang jawabannya sekarang berkat beberapa kebingungan sebelumnya:
Ini akan menggemakan "Sesuatu" jika tidak ada argumen posisi $ 1. Namun, ini tidak memvalidasi bahwa $ 1 berisi informasi spesifik.
sumber
$#
secara eksplisit adalah jumlah bilangan bulat dari jumlah argumen; itu akan menjadi "0", dan Anda akan menggemakan "sesuatu" meskipun tidak ada argumen, atau itu akan menjadi beberapa bilangan positif, dan Anda akan menggemakan "sesuatu" dengan benar. Tetapi pemeriksaan itu sendiri tidak akan pernah melakukan apa pun, terlepas dari masukan atau kurangnya masukan yang Anda gunakan - pemeriksaan itu akan selalu melaporkan yang$#
berisi nilai. Jadi ini sepenuhnya salah dan tidak akan pernah berfungsi seperti yang diklaim.echo $#
sebagai konten skrip /tmp/test.sh, lalu jalankan di bawah / bin / bash serta / bin / sh (atau / bin / dash dan implementasi shell lain apa pun yang Anda miliki./tmp/test.sh
Akan echo "0" ke konsol, seperti yang/bin/dash /tmp/test.sh
/tmp/test.sh foo
/tmp/test.sh first second
man bash
, di bagian "Parameter Khusus", "Shell memperlakukan beberapa parameter secara khusus. Parameter ini hanya dapat direferensikan; penugasan ke parameter tersebut tidak diperbolehkan.", Dan "# Memperluas ke jumlah parameter posisi dalam desimal." Ini juga diamanatkan oleh POSIX seperti yang dijelaskan di pubs.opengroup.org/onlinepubs/9699919799/utilities/…