Ketika server kami muncul, kami perlu memeriksa file untuk melihat bagaimana server dikonfigurasi.
Kami ingin mencari string berikut di dalam file /etc/aws/hosts.conf kami:
MYSQL_ROLE=master
Kemudian, kami ingin menguji apakah string itu ada dan menggunakan pernyataan if / else untuk menjalankan salah satu dari dua opsi tergantung pada apakah string itu ada atau tidak.
Apa sintaks BASH untuk pernyataan if?
if [ ????? ]; then
#do one thing
else
#do another thing
fi
if
mengambil perintah dan memeriksa nilai kembaliannya.[
hanyalah sebuah perintah.if grep -q ... then .... else .... fi
sumber
Perhatikan bahwa, untuk
PIPE
menjadi perintah atau urutan perintah apa pun, maka:if PIPE ; then # do one thing if PIPE returned with zero status ($?=0) else # do another thing if PIPE returned with non-zero status ($?!=0), e.g. error fi
Sebagai catatan,
[ expr ]
adalah shell builtin † singkatan untuktest expr
.Karena
grep
kembali dengan status 0 jika ada kecocokan, dan status bukan nol jika tidak ada kecocokan, Anda dapat menggunakan:if grep -lq '^MYSQL_ROLE=master' ; then # do one thing else # do another thing fi
Perhatikan penggunaan
-l
yang hanya peduli tentang file yang memiliki setidaknya satu kecocokan (sehinggagrep
mengembalikan segera setelah menemukan satu kecocokan, tanpa perlu terus mengurai file input.)† pada beberapa platform
[ expr ]
tidak builtin, tapi eksekusi yang sebenarnya/bin/[
(yang argumen terakhir akan]
), yang mengapa[ expr ]
harus berisi kosong di sekitar kurung persegi, dan mengapa hal itu harus diikuti dengan salah satu dari daftar perintah pemisah (;
,&&
,||
,|
,&
, garis baru)sumber
-l
mubazir,grep
segera dikembalikan setelah menemukan kecocokan dengan-q
gunakan saja bash
while read -r line do case "$line" in *MYSQL_ROLE=master*) echo "do your stuff";; *) echo "doesn't exist";; esac done <"/etc/aws/hosts.conf"
sumber