Lebih
Periksa jumlah argumen yang dilewatkan ke sebuah Bash script
Saya ingin saya Bash script untuk mencetak pesan kesalahan jika diperlukan hitungan argumen ini tidak terpenuhi.
Saya mencoba kode berikut:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Untuk beberapa alasan yang tidak diketahui I've mendapat error berikut:
test: line 4: [2: command not found
Apa yang saya lakukan salah?
659
9
Sama seperti yang lain perintah sederhana,
[ ... ]
atautes
membutuhkan ruang-ruang di antara argumen.Atau
Saran
Ketika di Bash, lebih memilih menggunakan
[[ ]]
bukan seperti itu doesn't melakukan firman membelah dan path ekspansi ke variabel yang mengutip mungkin tidak diperlukan kecuali's bagian dari sebuah ekspresi.Ini juga memiliki beberapa fitur lain seperti dikutp kondisi pengelompokan, pencocokan pola (extended pencocokan pola dengan
extglob
) dan regex yang cocok.Berikut ini contoh cek jika argumen yang valid. Hal ini memungkinkan argumen tunggal atau dua.
Untuk murni ekspresi aritmatika, dengan menggunakan
(( ))
untuk beberapa orang, mungkin masih lebih baik, tetapi mereka masih mungkin di[[ ]]
dengan operator aritmatika sepertieq
,-ne
,-lt
,le
,-gt
, atau-ge
dengan menempatkan ekspresi sebagai satu argumen string:Itu akan membantu jika anda akan perlu untuk menggabungkan dengan fitur-fitur lain
[[ ]]
juga.Keluar script
It's juga logis untuk membuat script exit ketika tidak valid parameter yang dilewatkan ke dalamnya. Ini telah menyarankan di comments oleh ekangas tapi seseorang diedit ini jawaban untuk memilikinya dengan
-1
sebagai nilai kembali, jadi saya mungkin juga melakukannya dengan benar.-1
meskipun diterima oleh Bash sebagai argumen untukkeluar
tidak secara eksplisit didokumentasikan dan tidak tepat untuk digunakan sebagai saran umum.64
adalah juga yang paling formal nilai sejak itu's didefinisikan dalamsysexits.h
dengan#define EX_USAGE 64 /* penggunaan baris perintah error */
. Sebagian besar alat-alat sepertils
juga kembali2
pada argumen yang tidak valid. Aku juga digunakan untuk kembali2
di script saya tapi akhir-akhir ini saya tidak lagi benar-benar peduli, dan hanya digunakan1
pada semua kesalahan. Tapi let's hanya tempat2
di sini, karena itu's paling umum dan mungkin tidak OS-spesifik.Referensi
Itu mungkin ide yang baik untuk menggunakan ekspresi aritmatika jika anda're berurusan dengan angka-angka.
Pada []: !=, =, == ... adalah string operator perbandingan dan -eq, -gt.... adalah aritmatika biner orang-orang.
Saya akan menggunakan:
Atau:
Jika anda're hanya tertarik pada bailing jika suatu argumen yang hilang, Parameter Substitusi adalah:
Sederhana satu kapal yang bekerja dapat dilakukan dengan menggunakan:
Ini rusak:
Berpikir untuk catatan:
Check out ini bash cheatsheet, hal ini dapat membantu banyak.
Untuk memeriksa panjang dari argumen yang dilewatkan dalam, anda menggunakan
"$#"
Untuk menggunakan array argumen dilewatkan dalam, anda menggunakan
"$@"
Contoh memeriksa suhu udara, dan iterasi akan sama: `` myFunc() { jika [[ "$#" -gt 0 ]]; kemudian untuk arg di "$@"; melakukan echo $arg dilakukan fi }
myFunc "$@" ``
Ini articled membantu saya, tetapi telah hilang beberapa hal untuk saya dan situasi saya. Mudah-mudahan ini akan membantu seseorang.
Dalam kasus anda ingin berada di sisi yang aman, saya sarankan untuk menggunakan getopts.
Berikut ini adalah contoh kecil:
lihat lebih detail di sini untuk contoh http://wiki.bash-hackers.org/howto/getopts_tutorial
Di sini sederhana satu liners untuk memeriksa jika hanya satu parameter yang diberikan jika tidak keluar script:
Anda harus menambahkan spasi di antara kondisi pengujian:
Saya harap ini membantu.