GNU/Linux >> Belajar Linux >  >> Linux

Apa yang dilakukan -e dalam bash shebang?

Pos Anda sebenarnya berisi 2 pertanyaan.

  1. -e flag menginstruksikan skrip untuk keluar karena kesalahan. Bendera lainnya

    Jika ada kesalahan maka akan langsung keluar.

  2. $? adalah status keluar dari perintah terakhir. Di Linux status keluar dari 0 berarti perintah berhasil. Status lainnya berarti terjadi kesalahan.

Untuk menerapkan jawaban ini ke skrip Anda:

egrep "^username" /etc/passwd >/dev/null

akan mencari username di /etc/passwd berkas.

  • Jika sudah ketemu maka exit status $? akan sama dengan 0 .

  • Jika tidak menemukannya, status keluar akan menjadi sesuatu yang lain (bukan 0 ). Di sini, Anda ingin mengeksekusi echo "doesn't exist" bagian dari kode.

Sayangnya ada kesalahan dalam skrip Anda, dan Anda akan menjalankan kode itu jika pengguna ada - ubah baris menjadi

if [ $? -ne 0 ]

untuk mendapatkan logika yang benar.

Namun jika pengguna tidak ada, egrep akan mengembalikan kode kesalahan, dan karena -e opsi shell akan segera keluar setelah baris itu, jadi Anda tidak akan pernah mencapai bagian kode itu.


Semua sakelar baris perintah bash didokumentasikan dalam man bash .

      -e      Exit  immediately  if a pipeline (which may consist of a
              single simple command),  a subshell command enclosed  in
              parentheses,  or one of the commands executed as part of
              a command list enclosed by  braces  (see  SHELL  GRAMMAR
              above) exits with a non-zero status.  The shell does not
              exit if the command that fails is part  of  the  command
              list  immediately  following  a  while or until keyword,
              part of the test  following  the  if  or  elif  reserved
              words,  part  of any command executed in a && or || list
              except the command following the final  &&  or  ||,  any
              command  in a pipeline but the last, or if the command's
              return value is being inverted with !.  A trap  on  ERR,
              if set, is executed before the shell exits.  This option
              applies to the shell environment and each subshell envi-
              ronment  separately  (see  COMMAND EXECUTION ENVIRONMENT
              above), and may cause subshells to exit before executing
              all the commands in the subshell.

Linux
  1. Bagaimana Perintah Keluar Bekerja Pada Terminal Unix?

  2. Apa. ~/.bashrc Perintah Lakukan??

  3. Apa yang dilakukan baris '!/bin/sh -e'?

  1. Apa arti set -e dalam skrip bash?

  2. Apa gunanya $# di Bash

  3. Apa arti sintaks |&dalam bahasa shell?

  1. Apa arti &di akhir perintah linux?

  2. Apa arti dari `! -d` dalam perintah Bash ini?

  3. Apa arti simbol panah (->) pada baris perintah?