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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.