Thursday, November 21, 2024

[Bash] Lesson 29 – Kiểm tra file tồn tại trong Bash

-

Kiểm tra file tồn tại trong Bash
Trong hầu hết các trường hợp, chúng ta có thể gặp tình huống cần thực hiện một hành động để kiểm tra xem một file có tồn tại hay không.


Trong Bash, chúng ta có thể sử dụng một ‘lệnh kiểm tra’ để kiểm tra xem một file có tồn tại và xác định loại của file.
Sau đây là cú pháp của lệnh kiểm tra, và chúng ta có thể sử dụng bất kỳ lệnh nào trong các lệnh này:

test expression  
[ expression ]  
[[ expression ]]  

Chúng ta cần sử dụng lệnh ngoặc đơn ‘[‘ để làm cho tập lệnh của mình có thể sử dụng được trên tất cả các shell POSIX. Phiên bản nâng cấp của lệnh kiểm tra chứa đôi ngoặc vuông ‘[[‘ được hỗ trợ trên hầu hết các hệ thống hiện đại sử dụng Bash, Zsh và Ksh như là một shell mặc định.

Kiểm tra xem Tệp tồn tại hay không
Trong khi kiểm tra xem một file có tồn tại hay không, các toán tử file được sử dụng phổ biến nhất là -e và -f. Tùy chọn ‘-e’ được sử dụng để kiểm tra xem một file có tồn tại hay không bất kể loại, trong khi tùy chọn ‘-f’ được sử dụng để trả về giá trị true chỉ nếu file là một file thông thường (không phải là một thư mục hoặc thiết bị).

Tùy chọn phổ biến nhất để kiểm tra xem file có tồn tại hay không là sử dụng lệnh kiểm tra với ‘lệnh điều kiện if’.

Sau đây là các ví dụ để kiểm tra xem file ‘read_file.txt’ có tồn tại hay không:”

Phương pháp 1

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

Phương pháp 2

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

Phương pháp 3

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

Kết quả cho tất cả ba phương pháp sẽ như sau vì chúng ta có một file (read_file.txt) có trong thư mục:

read_file.txt exist

Nếu chúng ta muốn thực hiện một hành động cung cấp kết quả dựa trên việc file tồn tại hay không, chúng ta có thể sử dụng cấu trúc if/then như sau:

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

Kết quả

read_file.txt exist

Chúng ta cũng có thể sử dụng lệnh test mà không cần sử dụng câu lệnh if. Chúng ta có thể sử dụng bất kỳ một trong các phương pháp sau đây:

Phương pháp 1

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

Phương pháp 2

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

Phương pháp 3

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

Kết quả cho tất cả ba phương pháp sẽ giống nhau như sau vì chúng ta có một file (read_file.txt) có trong thư mục:

read_file.txt exist

Nếu có nhiều lệnh cần chạy sau toán tử &&, thì hãy bao lệnh trong ngoặc nhọn và ngăn cách bằng dấu chấm phẩy (;) hoặc AND (&&), ví dụ:

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

Khác với &&, câu lệnh sau toán tử || chỉ được thực thi khi trạng thái thoát của lệnh kiểm tra là ‘false’.

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

Kết quả

read_file.txt exist

Đây là những phương pháp thông thường được sử dụng trong Bash để kiểm tra xem file có tồn tại hay không.

Kiểm tra xem thư mục có tồn tại hay không Toán tử ‘-d’ cho phép chúng ta kiểm tra xem một file có phải là thư mục hay không.

Dưới đây là các phương pháp để kiểm tra xem thư mục ‘Javatpoint’ có tồn tại hay không:

Phương án 1

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

Phương án 2

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

Chú ý: Chúng ta cũng có thể sử dụng hai dấu ngoặc vuông ‘[[‘ thay vì một dấu ngoặc vuông ‘[‘. Đầu ra

Kết quả đối với cả hai phương pháp trên sẽ như dưới đây vì chúng ta có một thư mục (tên là Javatpoint) có trong vị trí chỉ định:

Javatpoint is a directory

Kiểm tra nếu file không tồn tại

Biểu thức kiểm tra có thể được phủ định bằng cách sử dụng dấu chấm than (! – toán tử NOT logic). Xem ví dụ dưới đây:

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

Kịch bản trên cũng có thể được viết như bên dưới:

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

Kết quả

missing_read_file.txt unavailable

Các toán tử kiểm tra tập tin

Các lệnh kiểm tra bao gồm các Toán tử Tệp tin sau đây cho phép chúng ta kiểm tra cho các loại file cụ thể:

Toán tửMô tả
-b fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một file đặc biệt dạng khối (block special file).
-c fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một file đặc biệt dạng ký tự (character special file).
-d fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một thư mục (directory).
-e fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại, bất kể loại file (node, directory, socket, vv.).
-f fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một file thường (regular file) (không phải là một thư mục hoặc thiết bị).
-G fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và cùng nhóm với người dùng đang chạy lệnh.
-h fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một liên kết tượng trưng (symbolic link).
-g fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và có cờ set-group-id (sgid) được đặt.
-k fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và có cờ sticky bit được đặt.
-L fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một liên kết tượng trưng (symbolic link).
-O fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và được sở hữu bởi người dùng đang chạy lệnh.
-p fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một ống (pipe).
-r fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và có thể đọc được.
-S fileTrả về giá trị ‘Đúng’ (True) nếu file tồn tại và là một socket.
-s FileTrả về giá trị ‘Đúng’ (“True”) nếu FILE tồn tại và có kích thước khác 0.
-u FileTrả về giá trị ‘Đúng’ (“True”) nếu FILE tồn tại và có cờ set-user-id (suid) được đặt.
-w FileTrả về giá trị ‘Đúng’ (“True”) nếu FILE tồn tại và có thể ghi được.
-x FileTrả về giá trị ‘Đúng’ (“True”) nếu FILE tồn tại và có thể thực thi được.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories