Sebagai bagian dari skrip ini, saya harus dapat memeriksa apakah argumen pertama yang diberikan cocok dengan kata pertama file. Jika ya, keluar dengan pesan kesalahan; jika tidak, tambahkan argumen ke file. Saya mengerti cara menulis if
pernyataan, tetapi bukan cara menggunakan grep
dalam sebuah naskah. Saya mengerti bahwa grep
akan terlihat seperti ini
grep ^$1 schemas.txt
Saya merasa ini seharusnya jauh lebih mudah daripada saya membuatnya.
Saya mendapatkan pesan kesalahan “terlalu banyak argumen” di if
penyataan. Saya menghilangkan spasi di antara grep -q
dan kemudian mendapat kesalahan operator biner yang diharapkan.
if [ grep -q ^$1 schemas.txt ]
then
echo "Schema already exists. Please try again"
exit 1
else
echo "[email protected]" >> schemas.txt
fi
Jawaban yang Diterima:
grep
mengembalikan kode keluar yang berbeda jika menemukan sesuatu (nol) vs. jika tidak menemukan apa pun (bukan nol). Dalam if
pernyataan, kode keluar nol dipetakan ke "benar" dan kode keluar bukan nol dipetakan ke salah. Selain itu, grep memiliki -q
argumen untuk tidak menampilkan teks yang cocok (tetapi hanya mengembalikan kode status keluar)
Jadi, Anda dapat menggunakan grep seperti ini:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
Sebagai catatan singkat, ketika Anda melakukan sesuatu seperti if [ -z "$var" ]…
, ternyata [
sebenarnya adalah perintah yang Anda jalankan, sama seperti grep. Di sistem saya, ini adalah /usr/bin/[
. (Yah, secara teknis, shell Anda mungkin memilikinya, tetapi itu adalah pengoptimalan. Ini berperilaku seolah-olah itu adalah perintah). Cara kerjanya sama, [
mengembalikan kode keluar nol untuk true, kode keluar bukan-nol untuk false. (test
adalah hal yang sama dengan [
, kecuali untuk ]
closing penutup )