Tôi đang cố gắng viết một tập lệnh cực kỳ đơn giản trong Ubuntu, cho phép tôi chuyển nó hoặc tên tệp hoặc thư mục và có thể thực hiện điều gì đó cụ thể khi đó là tệp và một thứ khác khi đó là thư mục. Vấn đề tôi gặp phải là khi tên thư mục hoặc các tệp có thể quá, có dấu cách hoặc các ký tự có thể thoát khác có trong tên.Kiểm tra xem đối số đã qua có phải là tệp hoặc thư mục trong BASH
Đây là mã cơ bản của tôi ở dưới đây và một vài bài kiểm tra.
#!/bin/bash
PASSED=$1
if [ -d "${PASSED}" ] ; then
echo "$PASSED is a directory";
else
if [ -f "${PASSED}" ]; then
echo "${PASSED} is a file";
else
echo "${PASSED} is not valid";
exit 1
fi
fi
Và đây là kết quả:
[email protected]~ $ ./scripts/testmove.sh /home/andy/
/home/andy/ is a directory
[email protected]~ $ ./scripts/testmove.sh /home/andy/blah.txt
/home/andy/blah.txt is a file
[email protected]~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt
/home/andy/blah with a space.txt is not valid
[email protected]~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/
/home/andy with a space/ is not valid
Tất cả những đường dẫn có giá trị, và tồn tại.
'cấu trúc if'-'else' trong Bash cũng hỗ trợ' elif'. Chỉ là FYI. –
nên có dấu ngoặc kép ở đây: 'PASSED =" $ 1 "' –
@glenn - Thật kỳ lạ, dấu ngoặc kép không bắt buộc trong các bài tập biến. –