sử dụng if if in linux để tìm xem thư mục có tồn tại hay không


0

Tôi có tập lệnh bash sau:

if [ -d "/$home/DB_handouts"] then
 echo "Directory DB_handouts found"
else
mkdir /$home/DB_handouts
 chmod 777 /$home/DB_handouts
fi

Chạy mã trên tạo ra một lỗi:

./file.sh: line 12: syntax error near unexpected token `else'
./file.sh: line 12: `   else'

Làm thế nào tôi có thể sửa lỗi này?


Nhân tiện, mkdir có một cách để đặt chế độ : mkdir -m 777 /$home/DB_handouts. Vì vậy, lệnh của bạn có thể được viết theo cách này:mkdir -m 700 test 2>/dev/null || echo "Directory DB_handouts found"
Sergei Kurenkov

Nếu $homelà thư mục nhà của người dùng của bạn, sau đó sử dụng $HOMEthay thế.
Rany Albeg Wein

Câu trả lời:


3

Có nhiều vấn đề với tập lệnh của bạn:

  • phải có một ;giữa ]then(như @heemayl cũng được chỉ định) hoặc thennên được đặt trên một dòng của riêng nó
  • phải có một khoảng trống giữa handouts"]
  • bạn nên (nhưng điều này không tạo ra lỗi) liên tục thụt lề hoặc sử dụng -mtùy chọn cho mkdir(như @skwlisp đã chỉ định)

cái gì đó như:

if [ -d "/$home/DB_handouts" ] 
then
  echo "Directory DB_handouts found"
else
  mkdir -m 777 /$home/DB_handouts
fi

Tất nhiên, ở trên giả định rằng /$hometồn tại, toàn bộ điều có thể dễ dàng đạt được hơn nhiều bằng cách sử dụng:

mkdir -p -m 777 /$home/DB_handouts

Với -psẽ không có khiếu nại nếu thư mục đã tồn tại.


4

Bạn cần thêm dấu chấm phẩy ( ;) giữa if [ -d "/$home/DB_handouts"]then(hoặc đặt thenvào một dòng mới):

if [ -d "/$home/DB_handouts" ]; then

Ngoài ra trong trường hợp của bạn kiểm tra nếu mkdir -psẽ làm công việc. Nhìn vào ví dụ tôi nghĩ những điều sau đây nên hoạt động:

mkdir -p /foo/bar
chmod 777 /foo/bar

sau đó, một lỗi mới xuất hiện là ./file.sh: dòng 10: [: thiếu ]',the full code is this #! / bin / bash # OUTFILE = out.xml prefix = 'u' INFILE = inputfile.txt cho i trong $ (cat $ INFILE); do usern = $ tiền tố "" $ i home = / home / "" $ usern if [-d "/ $ home / DB_handouts"]; sau đó lặp lại "Thư mục DB_handouts được tìm thấy" "" $ usern other mkdir -m 777 / $ home / DB_handouts echo "Thư mục được tạo" fi xong `
Ann

@Ann bạn cần một khoảng trống trước khi đóng ]tức làif [ -d "/$home/DB_handouts" ]; then
heemayl 30/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.