Android

Bagaimana untuk menyemak sama ada fail atau direktori wujud dalam bash

How to Check if a File or Directory Exist Using Bash

How to Check if a File or Directory Exist Using Bash

Isi kandungan:

Anonim

Banyak kali ketika menulis skrip Shell, anda mungkin mendapati diri anda dalam situasi di mana anda perlu melakukan tindakan berdasarkan apakah ada file atau tidak.

Di Bash, anda boleh menggunakan arahan ujian untuk memeriksa apakah ada fail dan tentukan jenis fail.

Perintah ujian mengambil salah satu bentuk sintaks yang berikut:

test EXPRESSION]

Periksa sama ada Fail ada

Apabila menyemak jika ada fail, pengendali FILE yang paling biasa digunakan ialah -e dan -f . Yang pertama akan memeriksa sama ada fail wujud tanpa mengira jenisnya, sementara yang kedua akan kembali benar hanya jika FILE adalah fail biasa (bukan direktori atau peranti).

Opsyen yang paling boleh dibaca apabila memeriksa sama ada fail wujud atau tidak adalah dengan menggunakan arahan ujian dalam kombinasi dengan pernyataan jika. Mana-mana coretan di bawah akan memeriksa sama ada fail /etc/resolv.conf ada:

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

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

Sekiranya anda ingin melakukan tindakan yang berlainan berdasarkan sama ada fail itu ada atau tidak semestinya gunakan if / then construct:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Sentiasa gunakan sebut harga berganda untuk mengelakkan masalah apabila berurusan dengan fail yang mengandungi ruang putih di dalam nama mereka.

Anda juga boleh menggunakan arahan ujian tanpa pernyataan jika. Perintah selepas pengendali & & akan dilaksanakan hanya jika status exit arahan ujian adalah benar, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

Berbanding dengan && , pernyataan selepas || pengendali hanya akan dilaksanakan jika status keluar perintah ujian adalah false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Semak apakah Direktori ada

Pengendali -d membolehkan anda menguji sama ada fail adalah direktori atau tidak.

Contohnya untuk memeriksa sama ada direktori /etc/docker wujud, anda akan menggunakan:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Anda juga boleh menggunakan pendakap ganda , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Periksa sama ada Fail Tidak Ada

Serupa dengan banyak bahasa lain, ungkapan ujian boleh dikalahkan menggunakan ! (tanda seru) operator tidak logik:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

Sama seperti di atas:

&& echo "$FILE does not exist"

Periksa jika Pelbagai Fail Ada

Daripada menggunakan bersarang rumit jika / sebaliknya anda boleh menggunakan -a (atau && dengan ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Varian setaraf tanpa menggunakan pernyataan IF:

&& echo "both files exist"

] && echo "both files exist"

Pengendali ujian fail

Perintah ujian termasuk pengendali FILE berikut yang membolehkan anda menguji jenis fail tertentu:

  • -b FILE - Benar jika FILE wujud dan merupakan fail khas blok. -c FILE - Benar jika FILE wujud dan merupakan fail aksara khas. -d FILE - Benar jika FILE ada dan direktori. -e FILE - Benar jika FILE wujud dan merupakan fail, tanpa mengira jenis (nod, direktori, soket, dan lain-lain). -f FILE - Benar jika FILE wujud dan merupakan fail biasa (bukan direktori atau peranti). -G FILE - Benar jika FILE wujud dan mempunyai kumpulan yang sama dengan pengguna yang menjalankan perintah tersebut. -h FILE - Benar jika FILE wujud dan merupakan pautan simbolik. -g FILE - Benar jika FILE wujud dan menetapkan set-kumpulan-id (sgid) bendera. -k FILE - Benar jika FILE wujud dan mempunyai set bendera kecil melekat. -L FILE - Benar jika FILE wujud dan merupakan pautan simbolik. -O FILE - Benar jika FILE wujud dan dimiliki oleh pengguna yang menjalankan arahan. -p FILE - Benar jika FILE wujud dan merupakan paip. -r FILE - Benar jika FILE wujud dan boleh dibaca. -S FILE - Benar jika FILE ada dan soket. -s FILE - Benar jika FILE wujud dan mempunyai saiz nonzero. -u FILE - Benar jika bendera wujud dan set-user-id (suid) ditetapkan. -w FILE - Benar jika FILE wujud dan boleh ditulis. -x FILE - Benar jika FILE wujud dan boleh laksana.

Kesimpulannya

Dalam panduan ini, kami telah menunjukkan kepada anda bagaimana untuk menyemak sama ada fail atau direktori ada menggunakan Bash.

terminal bash