Jika blok mengeksekusi perintah ke-2 pada false

0

Saya seorang pemula bash (seorang dev PHP menyamar sebagai sysadmin Linux).
Saya memiliki blok if berikut dalam skrip bash:

 if [ "$DAY"=="Sunday" ];
 then
 cp /Drive_D/videos_bu/daily/$TODAY /Drive_D/videos_bu/weekly/$WEEK
 printf "\n==========\nWeekly Backup - $TODAY SUCCESS!\n==========\n\n" >> $LOG
 fi

Baris printf dijalankan bahkan ketika perintah tes salah. Adakah yang bisa memberi tahu saya alasannya?

TIA

Roger

Roger Creasy
sumber

Jawaban:

7

Karena fakta bahwa Anda tidak memiliki operator, dan operan dibatasi oleh spasi, penerjemah menganggap seluruh item sebagai string, yang berbeda dari string kosong, dan ia pergi ke thencabang. Ubah kondisi Anda menjadi:

if [ "$DAY" == "Sunday" ];

untuk mendapatkan hasil yang diharapkan. Inilah pos yang bermanfaat.

CristiFati
sumber
ahhh! Terima kasih. Saya akan mencobanya. Terimakasih banyak.
Roger Creasy
BTW, saya sarankan menggunakan single =in [ ], karena lebih portabel. bash mengizinkan ==, tetapi jika Anda menulis untuk bash (bukan sembarang cangkang POSIX lama), Anda mungkin juga menggunakan [[ ]]bentuk pembersih kondisional sebagai gantinya (lihat BashFAQ # 31 ).
Gordon Davisson