Bash: jalankan command2 jika command1 gagal


43

Saya ingin melakukan sesuatu seperti ini:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

Bagaimana saya harus melakukannya?


1
Anda baru saja melewatkan kata kunci "lalu" sebelum perintah "sukses gema".
glenn jackman

10
Hmmm; pseudocode Anda tampaknya mengajukan pertanyaan yang berbeda dari yang ada di judul Anda .....
mattdm

Sumber yang bagus untuk beberapa kondisi keluar scripting shell pixelbeat.org/programming/shell_script_mistakes.html
Flashman

Jawaban:


71

Ini harus melakukan apa yang Anda butuhkan:

cmd1 && cmd2 && echo success || echo epic fail

atau

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi

3
Ini berfungsi, tapi saya bingung mengapa ||tidak melihat output dari echoperintah pertama .
mlissner

1
@mlissner, if if mengharapkan untuk keluar dari kode, 0 jika perintah mana diluncurkan dan 1 jika ada kesalahan. Jangan membaca di output. Just try whoami && whoami && echo success || echo epic faildan sekarang whoami && whoareyou && echo success || echo epic fail. Saya tidak tahu apa yang Anda maksud dengan "tidak melihat output dari perintah gema pertama"
erm3nda

@ mlissner Saya pikir saya punya pertanyaan Anda, tetapi jawabannya adalah bahwa perintah gema tidak akan pernah gagal. Artinya, pengembaliannya adalah 0, yaitu benar. Jadi kondisi yang benar-benar penting hanyalahcmd1 && cmd2
Kazim Zaidi

22

Petr Uzel sangat cocok tetapi Anda juga bisa bermain dengan sihir $ ?.

$? memegang kode keluar dari perintah terakhir yang dijalankan, dan jika Anda menggunakan ini, Anda dapat menulis skrip Anda cukup fleksibel.

Pertanyaan ini sedikit menyentuh topik ini, Praktik terbaik untuk menggunakan $? di bash? .

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

Kemudian Anda juga dapat bereaksi terhadap kode keluar yang berbeda dan melakukan hal-hal yang berbeda jika Anda suka.


1
Perusahaan saya, PHP Experts, Inc., dan saya sendiri ingin mengucapkan terima kasih karena telah menjadi bagian integral dari skrip CI internal kami. Terima kasih!
Theodore R. Smith

7

Kode semu dalam pertanyaan tidak sesuai dengan judul pertanyaan.

Jika ada yang perlu benar-benar tahu cara menjalankan perintah 2 jika perintah 1 gagal, ini adalah penjelasan sederhana:

  • cmd1 || cmd2: Ini akan berjalan cmd1, dan jika terjadi kegagalan akan berjalancmd2
  • cmd1 && cmd2: Ini akan berjalan cmd1, dan jika berhasil akan berjalancmd2
  • cmd1 ; cmd2: Ini akan berjalan cmd1, dan kemudian akan berjalan cmd2, terlepas dari kegagalan atau keberhasilan menjalankan cmd1.
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.