Saya memiliki skrip bash dengan yang berikut:
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
Script ini tidak akan berjalan tanpa -e. Apa yang -e
dilakukan untuk skrip ini? Juga, apa yang $?
dilakukan dalam konteks ini?
-e
di halaman manual (saya benar-benar ingin melihat alamat jawaban ini).$?
berisi kode keluar terakhir (kodeegrep
proses yang muncul di atas).-e
didokumentasikan di bawahset
.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
if
dan[
. Script ini tidak akan bekerja dengan-e
, karena jikagrep
tidak menemukan apa-apa kemudian di bawah-e
script akan mengakhiri sana. Tanpa-e
, Anda mendapat pesan mundur: status ($?
) dari 0 berarti bahwa grep memang menemukan pengguna. Perhatikan bahwa ini seharusnya `grep '^ nama pengguna:', omong-omong (bagaimana jika ada pengguna lain dengan nama yang lebih panjang?).#/bin/bash -e
memiliki efek yang sama seperti#/bin/bash
pada baris # 1 danset -e
pada baris # 2?Jawaban:
Kesalahan keluar. Lebih banyak bendera
Jika ada kesalahan itu akan segera keluar.
$? adalah status keluar dari perintah masa lalu. Di Linux status keluar dari 0 berarti bahwa perintah itu berhasil. Status lain apa pun berarti kesalahan terjadi.
egrep "^ username" / etc / passwd> / dev / null Akan mencari nama pengguna di bawah file / etc / passwd. Jika menemukannya maka status keluar $? akan sama dengan 0. Jika tidak menemukannya status keluar akan menjadi sesuatu yang lain (bukan 0), maka Anda akan "gema tidak ada".
sumber
if egrep "^username" /etc/passwd >/dev/null
.set
diperlukan? : - /-e
diberikan ke bash sebagai argumen baris perintah. Semua opsi yang tercantum di bawahset
juga diterima oleh bash di baris perintahnya - catat kalimat pertama di bagian Opsi pada halaman manual.Semua sakelar baris perintah bash didokumentasikan di
man bash
.sumber
set
diperlukan? : - /Script Anda salah, karena
keluar dari status 0 - rata-rata - semuanya OK, dalam kasus grep berarti "OK, temukan string". status keluar! = 0 berarti ada yang salah, dalam kasus grep 1 berarti, "tidak ditemukan", 2 berarti "tidak dapat membuka input" ...
sumber