Jika skrip Bash Linux bergantung pada file atau direktori tertentu yang ada, itu tidak bisa hanya mengasumsikan mereka melakukannya. Perlu memeriksa bahwa mereka pasti ada. Inilah cara melakukannya.
Saat Anda menulis skrip, Anda tidak dapat membuat asumsi tentang apa yang ada dan tidak ada di komputer. Itu benar jika skrip akan didistribusikan dan dijalankan di banyak komputer yang berbeda. Cepat atau lambat, skrip akan berjalan di komputer yang tidak memenuhi asumsi Anda, dan skrip akan gagal atau berjalan tidak terduga.
Semua yang kami nilai atau buat di komputer disimpan dalam file dengan format tertentu, dan semua file itu berada dalam sebuah direktori. Skrip dapat membaca, menulis, mengganti nama, menghapus, dan memindahkan file dan direktori—semua hal yang dapat Anda lakukan di baris perintah.
Keuntungan yang Anda miliki sebagai manusia adalah Anda dapat melihat isi direktori dan mengetahui apakah ada file atau tidak—atau apakah direktori yang diharapkan memang ada. Jika skrip rusak saat memanipulasi file, itu bisa berakibat serius dan merusak.
Bash menyediakan serangkaian tes komprehensif yang dapat Anda gunakan untuk mendeteksi file dan direktori, dan menguji banyak atributnya. Memasukkan ini ke dalam skrip itu mudah, tetapi manfaatnya dalam hal ketahanan dan kontrol yang baik cukup besar.
Rentang Tes
Dengan menggabungkan pernyataan if dengan tes yang sesuai dari kumpulan besar file dan direktori tes, kita dapat dengan mudah menentukan apakah suatu file ada, apakah itu dapat dieksekusi, atau dapat ditulis, dan banyak lagi.
-b: Mengembalikan nilai true jika file adalah file khusus blok.-c: Mengembalikan nilai true jika file berkarakter khusus.- d: Mengembalikan nilai true jika "file" adalah direktori.-e: Mengembalikan nilai true jika file ada.-f: Mengembalikan nilai true jika file ada dan merupakan file biasa.-g: Mengembalikan nilai true jika file memiliki izin setgid set (chmod g+).-h: Mengembalikan nilai true jika file adalah tautan simbolik.-L: Mengembalikan nilai true jika file adalah tautan simbolik.-k: Mengembalikan nilai true jika bit lengketnya disetel (chmod +t).- p: Mengembalikan nilai true jika file adalah pipa bernama.-r: Mengembalikan nilai true jika file dapat dibaca.-s: Mengembalikan nilai true jika file ada s dan tidak kosong.-S: Mengembalikan nilai true jika file adalah soket.-t: Mengembalikan nilai true jika deskriptor file dibuka di terminal.-u: Mengembalikan nilai true jika file memiliki izin setuid yang disetel (chmod u+ ).-w: Mengembalikan nilai true jika file dapat ditulis.-x: Mengembalikan nilai true jika file dapat dieksekusi.-O: Mengembalikan nilai true jika milik Anda.-G: Mengembalikan nilai true jika dimiliki oleh grup Anda.- N: Mengembalikan nilai true jika file telah dimodifikasi sejak terakhir kali dibaca.!: Operator logika NOT.&&: Operator logika AND.||: Operator logikal OR.
Daftar dimulai dengan -b karena tes -a memiliki tidak digunakan lagi dan digantikan oleh -e test.
Menggunakan Tes dalam Skrip
Pernyataan test if file generik adalah konstruksi skrip sederhana. Perbandingan di dalam tanda kurung ganda ” [[ ]] ” menggunakan tes -f untuk menentukan apakah ada file biasa dengan nama itu.
Salin teks skrip ini ke editor dan simpan ke dalam file bernama "script1.sh", dan gunakan chmod untuk membuatnya executable.
#!/bin/bash if [[ -f $1 ]] then echo "File $1 ada." else echo "File $1 tidak dapat ditemukan." fi
Anda harus meneruskan nama file ke skrip di baris perintah.
chmod +x script1.sh
Anda harus melakukan ini dengan setiap skrip jika Anda ingin mencoba contoh lain dari artikel.
Mari coba skrip di a file teks langsung.
./script1.sh test-file.txt
File ada dan skrip melaporkan fakta itu dengan benar. Jika kami menghapus file dan mencoba lagi, pengujian akan gagal dan skrip akan melaporkannya ke us.
./script1.sh test-file.txt
Dalam situasi kehidupan nyata, skrip Anda perlu mengambil tindakan apa pun yang sesuai. Mungkin itu menandai kesalahan dan berhenti. Mungkin itu membuat file dan melanjutkan. Mungkin menyalin sesuatu dari direktori cadangan untuk mengganti file yang hilang. Itu semua tergantung pada tujuan skrip. Tapi setidaknya sekarang skrip dapat membuat keputusan berdasarkan mengetahui apakah file tersebut ada atau tidak.
The -f flag menguji apakah file tersebut ada, dan merupakan file "biasa". Dengan kata lain, itu bukan sesuatu yang tampak seperti file tetapi sebenarnya bukan, seperti file perangkat.
Kami akan menggunakan ls untuk memverifikasi bahwa file “/dev/random” ada, dan kemudian melihat apa skripnya membuatnya.
ls -lh /dev/random./script /dev/random
Karena skrip kami menguji file biasa dan “/dev/random” adalah file perangkat, pengujian gagal. Sangat sering, untuk mengetahui apakah sebuah file ada, Anda perlu memilih tes mana yang Anda gunakan dengan hati-hati, atau Anda perlu menggunakan beberapa tes.
Ini adalah "script2.sh", yang menguji file biasa dan untuk file perangkat karakter.
#!/bin/bash if [[ -f $1 ]] then echo "File $1 ada." else echo "File $1 hilang atau bukan file biasa." fi if [[ -c $1 ]] then echo "File $1 is a character device file." else echo "File $1 hilang atau bukan file khusus." fi
Jika kita menjalankan skrip ini pada file perangkat “/dev/random”, pengujian pertama gagal seperti yang diharapkan, dan pengujian kedua berhasil. Ini mengenali file sebagai file perangkat.
./script2.sh /dev/random
Sebenarnya, itu mengenalinya sebagai file perangkat karakter. Beberapa file perangkat memblokir file perangkat. Seperti yang terjadi, skrip kami tidak akan mengatasi them.
./script2.sh /dev/sda
Kami dapat menggunakan operator logika OR dan memasukkan tes lain dalam pernyataan if kedua. Kali ini, apakah file tersebut adalah file perangkat karakter atau file perangkat blok, pengujian akan menampilkan nilai true. Ini adalah “script3.sh.”
#!/bin/bash if [[ -f $1 ]] lalu echo "File $1 ada." else echo "File $1 hilang atau bukan file biasa." fi jika [[ -c $1 || -b $1 ]] lalu echo "File $1 is a character or block device file." else echo "File $1 hilang atau bukan file khusus." fi
Script ini mengenali perangkat karakter dan memblokir file perangkat.
./script3.sh /dev/random./script3.sh /dev/sda
Jika penting bagi Anda untuk membedakan antara berbagai jenis file perangkat, Anda dapat menggunakan nested if pernyataan. Ini adalah “script4.sh.”
#!/bin/bash if [[ -f $1 ]] lalu echo "File $1 ada." else echo "File $1 hilang atau bukan file biasa." fi if [[ -c $1 ]] then echo "File $1 is a character device file." else if [[ -b $1 ]] then echo "File $1 is a block device file." else echo "File $1 hilang atau bukan file perangkat." fi fi
Skrip ini mengenali dan mengkategorikan perangkat karakter dan memblokir file perangkat.
./script4.sh /dev/random./script4.sh /dev/sda
Menggunakan operator logika AND, kita dapat menguji beberapa karakteristik sekaligus. Ini adalah "script5.sh." Ia memeriksa apakah ada file dan skrip telah membaca dan menulis izin untuk itu.
#!/bin/bash if [[ -f $1 && -r $1 && -w $1 ]] then echo "File $1 ada dan kami izin baca/tulis." else echo "File $1 hilang, bukan file biasa, atau kami tidak dapat membaca/menulisnya." fi
Kami akan menjalankan skrip pada file milik kami, dan skrip milik root.
./script5.sh .bashrc./script5.sh /etc/fstab
Untuk menguji keberadaan direktori, gunakan -d uji. Ini adalah "script6.sh." Ini adalah bagian dari skrip cadangan. Hal pertama yang dilakukan adalah memeriksa apakah direktori yang diteruskan pada baris perintah ada atau tidak. Ia menggunakan operator NOT logis ! dalam pernyataan if test.
#!/bin/bash if [[ ! -d $1 ]] lalu echo "Membuat direktori cadangan:" $1 mkdir $1 if [[ ! $? -eq 0 ]] then echo "Tidak dapat membuat direktori cadangan:" $1 exit fi else echo "Direktori cadangan ada." fi # lanjutkan dengan pencadangan file echo "Mencadangkan ke: "$1
Jika direktori tidak ada, direktori akan membuatnya. Jika file pembuatan direktori, skrip keluar. Jika pembuatan direktori berhasil, atau direktori sudah ada, skrip melanjutkan dengan tindakan pencadangannya.
Kita akan menjalankan skrip, lalu memeriksa dengan opsi ls dan -d (direktori) apakah direktori cadangan ada.
./ script6.sh Documents/project-backupls -d Documents/project-backup
Direktori cadangan telah dibuat. Jika kita menjalankan skrip lagi, itu akan melaporkan bahwa direktori sudah ada.
./script6.sh
Script menemukan direktori dan melanjutkan untuk melakukan backup.
Test, Jangan Asumsikan
Cepat atau lambat, asumsi akan mengarah pada hal-hal buruk kejadian. Uji terlebih dahulu, dan bereaksilah sesuai dengan itu.
Pengetahuan adalah kekuatan. Gunakan tes untuk memberi skrip Anda pengetahuan yang mereka butuhkan.
RELATED:Cara Membiarkan Skrip Linux Mendeteksi Mereka Berjalan di Mesin Virtual
Itulah berita seputar
Cara Memeriksa Apakah Ada File di Skrip Bash Linux, semoga bermanfaat.
Disadur dari HowToGeek.com.