Saya memiliki fungsi yang mengembalikan 1 jika nomor tersebut adalah angka sepuluh digit yang valid:
valNum()
{
flag=1
if [[ $1 != [1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]; then
echo "Invalid Number"
flag=0
fi
return $flag
}
Itu dipanggil oleh:
if [[ $(valNum $num) -eq 1 ]]; then
#do something
fi
Fungsi ini berfungsi dengan baik jika nomornya valid tetapi menunjukkan kesalahan sintaksis jika memasukkan nomor yang tidak valid.
sumber
if valnum "$num"
sama denganif valnum "$num" = 0
misalnya "jika itu benar". Aturan dasar praktis dalam skrip sh adalah 0 = true / success, non-zero = false / error.if [[ $(valNum $num) -eq 1 ]]
Anda tidak dapat mengembalikan hasil sewenang-wenang dari fungsi shell. Anda hanya dapat mengembalikan kode status yang merupakan bilangan bulat antara 0 dan 255. (Meskipun Anda dapat meneruskan nilai yang lebih besar ke
return
, itu terpotong modulo 256.) Nilai harus 0 untuk menunjukkan keberhasilan dan nilai yang berbeda untuk menunjukkan kegagalan; dengan konvensi Anda harus tetap berpegang pada kode kesalahan antara 1 dan 125, karena nilai yang lebih tinggi memiliki makna khusus (perintah eksternal yang buruk untuk 126 dan 127, terbunuh oleh sinyal untuk nilai yang lebih tinggi).Karena Anda mengembalikan hasil ya-atau-tidak di sini, kode status sesuai. Karena
flag
tampaknya menunjukkan keberhasilan atau kegagalan, Anda harus menggunakan nilai konvensional 0 untuk sukses dan 1 untuk kegagalan (kebalikan dari apa yang Anda tulis). Anda kemudian dapat menggunakan fungsi Anda secara langsung dalam pernyataan if.Jika Anda perlu membedakan antara kode kegagalan, panggil fungsi secara langsung. Segera setelah itu kembali, kode kegagalan tersedia di
$?
. Anda kemudian dapat memeriksanya dengan pernyataan kasus:Jika Anda perlu menggunakan kode status nanti, simpan ke variabel lain sebelum
$?
ditimpa oleh perintah berikutnya.Apa yang Anda tulis tidak berfungsi karena substitusi perintah
$(…)
meluas ke output fungsi, yang dalam kode Anda adalah pesan kesalahan atau kosong, tidak pernah1
.Jika Anda perlu memberikan lebih banyak informasi daripada kode status yang memungkinkan dari fungsi shell, Anda memiliki dua kemungkinan:
$(valNum "$num")
sumber
Saya sendiri memiliki hasil yang bertentangan di bidang ini. Ini adalah hasil dari eksperimen empiris saya. Pertama, beberapa ' teori ' tentang perintah bash atau * nix:
Contoh:
Keluaran:
Seperti yang ditunjukkan,
ls
perintah mengembalikan kode status = 2. Ketika Anda mencoba direktori yang valid, statusnya nol ( 0 ). Tidak sama dengan hampir semua bahasa lainnya.aturan # 1 - Buat ...
Kita harus ingat bahwa kita sedang menguji kode kesalahan dalam
if
pernyataan Bash . Saya mengatur konstanta, atau Anda dapat menggunakan shelltrue
ataufalse
perintah.dan output:
Namun, saya sarankan Anda memberikan @Gilles ' suara-up ' karena jawabannya adalah yang benar. Saya hanya ingin mendapatkan sisi yang simpel pada ePaper.
Hanya satu hal lagi,
test
perintah. Ini terlihat seperti:Sebagian besar waktu. Dan misalnya:
Nol (0) benar . Mengapa? Halaman manual mengatakan bahwa satu argumen adalah ' benar ' ketika itu TIDAK-NULL.
referensi:
sumber