Bối cảnh cho đề xuất giải pháp của tôi là câu chuyện về một người bạn, vào tuần thứ hai của công việc đầu tiên, đã xóa sạch một nửa máy chủ xây dựng. Vì vậy, nhiệm vụ cơ bản là tìm ra nếu một tập tin tồn tại, và nếu vậy, hãy xóa nó. Nhưng có một vài thác ghềnh trên sông này:
Tất cả mọi thứ là một tập tin.
Các kịch bản chỉ có sức mạnh thực sự nếu chúng giải quyết các nhiệm vụ chung
Để nói chung, chúng tôi sử dụng các biến
Chúng tôi thường sử dụng lực -f trong các tập lệnh để tránh can thiệp thủ công
Và cũng yêu -r đệ quy để đảm bảo chúng tôi tạo, sao chép và phá hủy một cách kịp thời.
Hãy xem xét kịch bản sau đây:
Chúng tôi có tệp chúng tôi muốn xóa: filesexists.json
Tên tệp này được lưu trữ trong một biến
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
Chúng tôi cũng có một biến số đường dẫn để làm cho mọi thứ thực sự linh hoạt
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
Vì vậy, hãy xem nếu -e
nó làm những gì nó được cho là. Liệu các tập tin tồn tại?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
Nó làm. Ma thuật.
Tuy nhiên, điều gì sẽ xảy ra, nếu biến tệp bị vô tình được đánh giá là nuffin '
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
Gì? Nó được cho là quay trở lại với một lỗi ... Và đây là khởi đầu của câu chuyện làm thế nào toàn bộ thư mục bị xóa do tai nạn
Một cách khác có thể là kiểm tra cụ thể những gì chúng tôi hiểu là 'tệp'
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
Vì vậy, tập tin tồn tại ...
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
Vì vậy, đây không phải là một tập tin và có lẽ, chúng tôi không muốn xóa toàn bộ thư mục đó
man test
có những điều sau đây để nói:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)