GNU/Linux >> Belajar Linux >  >> Linux

Cara Memeriksa apakah File atau Direktori Ada di Bash

Sering kali saat menulis skrip Shell, Anda mungkin menemukan diri Anda dalam situasi di mana Anda perlu melakukan tindakan berdasarkan apakah file ada atau tidak.

Di Bash, Anda dapat menggunakan perintah tes untuk memeriksa apakah ada file dan menentukan jenis file.

Perintah tes mengambil salah satu dari bentuk sintaks berikut:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Jika Anda ingin skrip Anda portabel, Anda sebaiknya menggunakan [ pengujian lama] perintah, yang tersedia di semua shell POSIX. Versi baru dari perintah pengujian [[] (tanda kurung ganda) didukung di sebagian besar sistem modern yang menggunakan Bash, Zsh, dan Ksh sebagai shell default.

Periksa apakah File Ada #

Saat memeriksa apakah ada file, operator FILE yang paling umum digunakan adalah -e dan -f . Yang pertama akan memeriksa apakah file ada terlepas dari jenisnya, sedangkan yang kedua akan mengembalikan true hanya jika FILE adalah file biasa (bukan direktori atau perangkat).

Opsi yang paling mudah dibaca saat memeriksa apakah file ada atau tidak adalah dengan menggunakan test perintah dalam kombinasi dengan if penyataan. Salah satu cuplikan di bawah ini akan memeriksa apakah /etc/resolv.conf file ada:

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exists."
fi
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exists."
fi
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exists."
fi

Jika Anda ingin melakukan tindakan yang berbeda berdasarkan apakah file tersebut ada atau tidak, cukup gunakan konstruksi if/then:

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exists."
else 
    echo "$FILE does not exist."
fi
Selalu gunakan tanda kutip ganda untuk menghindari masalah saat menangani file yang berisi spasi putih di namanya.

Anda juga dapat menggunakan perintah tes tanpa pernyataan if. Perintah setelah && operator hanya akan dieksekusi jika status keluar dari perintah pengujian benar,

test -f /etc/resolv.conf && echo "$FILE exists."
[ -f /etc/resolv.conf ] && echo "$FILE exists."
[[ -f /etc/resolv.conf ]] && echo "$FILE exists."

Jika Anda ingin menjalankan serangkaian perintah setelah && operator cukup menyertakan perintah dalam tanda kurung kurawal yang dipisahkan oleh ; atau && :

[ -f /etc/resolv.conf ] && { echo "$FILE exist."; cp "$FILE" /tmp/; }

Berlawanan dengan && , pernyataan setelah || operator hanya akan dijalankan jika status keluar dari perintah pengujian false .

[ -f /etc/resolv.conf ] && echo "$FILE exist." || echo "$FILE does not exist."

Periksa apakah Direktori Ada #

Operator -d memungkinkan Anda menguji apakah suatu file adalah direktori atau bukan.

Misalnya untuk memeriksa apakah /etc/docker direktori yang ada Anda akan menggunakan:

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory."
fi
[ -d /etc/docker ] && echo "$FILE is a directory."

Anda juga dapat menggunakan tanda kurung ganda [[ bukannya satu [ .

Periksa apakah File Tidak Ada #

Mirip dengan banyak bahasa lain, ekspresi pengujian dapat dinegasikan menggunakan ! (tanda seru) logika bukan operator:

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE does not exist."
fi

Sama seperti di atas:

[ ! -f /etc/docker ] && echo "$FILE does not exist."

Periksa apakah Ada Banyak File #

Alih-alih menggunakan konstruksi if/else bersarang yang rumit, Anda dapat menggunakan -a (atau && dengan [[ ) untuk menguji apakah ada banyak file:

if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "Both files exist."
fi
if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then
    echo "Both files exist."
fi

Varian ekuivalen tanpa menggunakan pernyataan IF:

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "Both files exist."
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "Both files exist."

Operator pengujian file #

Perintah pengujian menyertakan operator FILE berikut yang memungkinkan Anda menguji jenis file tertentu:

  • -b FILE - Benar jika FILE ada dan merupakan file blok khusus.
  • -c FILE - Benar jika FILE ada dan merupakan file karakter khusus.
  • -d FILE - Benar jika FILE ada dan merupakan direktori.
  • -e FILE - Benar jika FILE ada dan merupakan file, apa pun jenisnya (node, direktori, soket, dll.).
  • -f FILE - Benar jika FILE ada dan merupakan file biasa (bukan direktori atau perangkat).
  • -G FILE - Benar jika FILE ada dan memiliki grup yang sama dengan pengguna yang menjalankan perintah.
  • -h FILE - Benar jika FILE ada dan merupakan tautan simbolis.
  • -g FILE - Benar jika FILE ada dan memiliki set-group-id (sgid ) bendera disetel.
  • -k FILE - Benar jika FILE ada dan memiliki set flag sticky bit.
  • -L FILE - Benar jika FILE ada dan merupakan tautan simbolis.
  • -O FILE - Benar jika FILE ada dan dimiliki oleh pengguna yang menjalankan perintah.
  • -p FILE - Benar jika FILE ada dan berupa pipa.
  • -r FILE - Benar jika FILE ada dan dapat dibaca.
  • -S FILE - Benar jika FILE ada dan merupakan soket.
  • -s FILE - Benar jika FILE ada dan berukuran bukan nol.
  • -u FILE - Benar jika FILE ada, dan set-user-id (suid ) bendera disetel.
  • -w FILE - Benar jika FILE ada dan dapat ditulis.
  • -x FILE - Benar jika FILE ada dan dapat dieksekusi.

Kesimpulan #

Dalam panduan ini, kami telah menunjukkan kepada Anda cara memeriksa apakah ada file atau direktori di Bash.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.


Linux
  1. Bagaimana Cara Memeriksa Kemajuan Running Cp?

  2. Bagaimana saya bisa memeriksa apakah ada direktori?

  3. Bagaimana cara memeriksa apakah ada file di direktori tertentu dalam skrip bash?

  1. Bash:Tidak ada file atau direktori seperti itu?

  2. Bagaimana cara menjalankan skrip bash?

  3. Bagaimana saya bisa menggunakan sudo untuk memeriksa apakah ada file?

  1. Bagaimana cara memeriksa sintaks sudoers

  2. Bagaimana Cara Memeriksa Substring Di Shell Script Bash?

  3. Bagaimana saya bisa memeriksa file yang ada dan menjalankan perintah jika tidak?