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ó thành tên tệp hoặc thư mục và có thể thực hiện một cái 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ó thể là các tệp cũng có dấu cách hoặc các ký tự có thể thoát được khác trong tên.
Đây là mã cơ bản của tôi dưới đây, và một vài thử nghiệm.
#!/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à đầu ra:
andy@server~ $ ./scripts/testmove.sh /home/andy/
/home/andy/ is a directory
andy@server~ $ ./scripts/testmove.sh /home/andy/blah.txt
/home/andy/blah.txt is a file
andy@server~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt
/home/andy/blah with a space.txt is not valid
andy@server~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/
/home/andy with a space/ is not valid
Tất cả những con đường đó là hợp lệ, và tồn tại.
if
-else
cấu trúc trong Bash cũng hỗ trợelif
. Chỉ cần FYI.