logo

Bash, dosyanın mevcut olup olmadığını kontrol edin

Çoğu zaman bir dosyanın var olup olmadığını kontrol edecek bir işlem yapmamız gerekebilecek bir durumla karşılaşabiliriz.

Bash'te bir dosyanın var olup olmadığını kontrol etmek ve dosyanın türünü belirlemek için 'test komutu' kullanabiliriz.

Test komutunun sözdizimleri aşağıdadır ve bu komutlardan herhangi birini kullanabiliriz:

 test expression [ expression ] [[ expression ]] 

Betiğimizi tüm POSIX kabukları için taşınabilir hale getirmek için tek parantez '[' komutunu kullanmamız gerekiyor. Test komutunun yükseltilmiş sürümü, varsayılan kabuk olarak Bash, Zsh ve Ksh kullanan modern sistemlerin çoğunda desteklenen çift parantez '[['' içerir.

Dosyanın Var Olup Olmadığını Kontrol Edin

Bir dosyanın var olup olmadığını kontrol ederken en sık kullanılan dosya operatörleri -e ve -f'dir. '-e' seçeneği, türüne bakılmaksızın bir dosyanın var olup olmadığını kontrol etmek için kullanılırken, '-f' seçeneği yalnızca dosya normal bir dosyaysa (bir dizin veya aygıt değil) gerçek değeri döndürmek için kullanılır.

Dosyanın var olup olmadığını kontrol etmenin en yaygın seçeneği, test komutunu 'if koşullu ifadeyle' kullanmaktır.

Aşağıda 'read_file.txt' dosyasının var olup olmadığını kontrol etmeye yönelik örnekler verilmiştir:

Yöntem 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Yöntem 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Yöntem 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Çıktı

Dizinde bir dosyamız (read_file.txt) olduğundan her üç yöntemin çıktısı aşağıdaki gibi olacaktır:

dizi sıralama java
 read_file.txt exist 

Eğer dosyanın var olup olmamasına göre sonuç verecek bir işlem yapmak istiyorsak if/then yapısını şu şekilde kullanabiliriz:

Örnek

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Çıktı

 read_file.txt exist 

Test komutunu if ifadesi olmadan da kullanabiliriz. Aşağıdaki yöntemlerden herhangi birini kullanabiliriz:

Yöntem 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Yöntem 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Yöntem 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Çıktı

Dizinde bir dosyamız (read_file.txt) olduğundan her üç yöntemin çıktısı aşağıdaki gibi olacaktır:

 read_file.txt exist 

&& operatöründen sonra çalıştırılacak birkaç komut varsa, komutları noktalı virgülle (;) veya AND (&&) ayırarak küme parantezleri içine alın, yani:

Örnek

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

&&'dan farklı olarak ||'dan sonraki ifade operatörü yalnızca test komutunun çıkış durumu 'yanlış' ise yürütülür.

Örnek

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Çıktı

 read_file.txt exist 

Bunlar, dosyanın var olup olmadığını kontrol etmek için Bash'te yaygın olarak kullanılan yöntemlerdir.

Dizinin Var Olup Olmadığını Kontrol Edin

'-d' operatörü bir dosyanın dizin olup olmadığını test etmemizi sağlar.

'Javatpoint' dizininin var olup olmadığını kontrol etme yöntemleri aşağıdadır:

google ne anlama geliyor

Yöntem 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Yöntem 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Not:Tek parantez '[' yerine çift parantez '[[' de kullanabiliriz.

Çıktı

Belirtilen konumda (Javatpoint adında) bir dizine sahip olduğumuz için yukarıdaki yöntemlerin her ikisinin de çıktısı aşağıdaki gibi olacaktır:

 Javatpoint is a directory 

IF Dosyasının Mevcut Olmadığını Kontrol Edin

Test ifadesi ünlem işareti (! -mantıksal NOT operatörü) kullanılarak olumsuzlanabilir. Aşağıdaki örneğe göz atın:

Örnek

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Yukarıdaki komut dosyası aşağıdaki gibi de yazılabilir:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Çıktı

 missing_read_file.txt unavailable 

Dosya Test Operatörleri

Test komutları, belirli dosya türlerini test etmemize olanak tanıyan aşağıdaki Dosya Operatörlerini içerir:

-b Dosya İadeleri DOSYA bir blok özel dosyası olarak mevcutsa 'Doğru'.
-c Dosya İadeleri DOSYA özel bir karakter dosyası olarak mevcutsa 'Doğru'.
-d Dosya İadeleri DOSYA bir dizin olarak mevcutsa 'Doğru'.
-e Dosya İadeleri DOSYA türünden bağımsız olarak (düğüm, dizin, yuva vb.) bir dosya olarak mevcutsa 'Doğru'.
-f Dosya İadeleri DOSYA normal bir dosya olarak mevcutsa (bir dizin veya aygıt değil) 'Doğru'.
-G Dosyası Geri Dönüyor DOSYA mevcutsa ve kullanıcının komutu çalıştırdığı grupla aynı grubu içeriyorsa 'Doğru'.
-h Dosya İadeleri DOSYA sembolik bir bağlantı olarak mevcutsa 'Doğru'.
-g Dosya İadeleri DOSYA mevcutsa ve set-group-id (sgid) bayrak setini içeriyorsa 'Doğru'.
-k Dosya İadeleri DOSYA mevcutsa ve yapışkan bit bayrak seti içeriyorsa 'Doğru'.
-L Dosya İadeleri DOSYA sembolik bir bağlantı olarak mevcutsa 'Doğru'.
-O Dosya İadeleri DOSYA mevcutsa ve sahibi, komutu çalıştıran kullanıcıya aitse 'Doğru'.
-p Dosya İadeleri DOSYA bir kanal olarak mevcutsa 'Doğru'.
-r Dosya İadeleri DOSYA okunabilir bir dosya olarak mevcutsa 'Doğru'.
-S Dosyası Geri Dönüyor DOSYA bir yuva olarak mevcutsa 'Doğru'.
-s Dosya İadeleri DOSYA mevcutsa ve sıfırdan farklı bir boyuta sahipse 'Doğru'.
-u Dosya İadeleri DOSYA mevcutsa ve kullanıcı kimliğini belirle (suid) bayrağı ayarlandıysa 'Doğru'.
-w Dosya İadeleri DOSYA yazılabilir bir dosya olarak mevcutsa 'Doğru'.
-x Dosya İadeleri DOSYA yürütülebilir bir dosya olarak mevcutsa 'Doğru'.