Kiểm tra xem tệp hoặc thư mục có tồn tại hay không (và hơn thế nữa) bằng vòng lặp IF

Tôi đã không đặt bất cứ điều gì của Cú đánh, và đó là khi tôi đang bước vào thế giới tuyệt vời của Python, tôi đã quên một chút về người bạn khác đã giúp tôi rất nhiều 🙂

Ở đây tôi đặt một cái gì đó cho những người đam mê Bash, như tiêu đề đã nói ... Tôi sẽ chỉ cho bạn cách kiểm tra xem có tệp hoặc thư mục nào trong hệ thống hay không, chỉ bằng cách sử dụng: if

Chúng tôi sẽ tạo một tệp .sh và cấp cho nó quyền thực thi, đối với điều này, chỉ cần đặt lệnh sau vào một terminal:

touch test.sh && chmod + x test.sh

Những gì anh ấy làm là tạo tệp (touch test.sh) và cũng cấp cho bạn quyền thực thi (chmod + x test.sh)

Sau đó, hãy viết những điều sau vào đó:

if [ -d /opt/ ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

Cái gì đây?

Đơn giản 😀

Trong dòng đầu tiên - » if [-d / opt /];

Ở đây chúng tôi hỏi, liệu thư mục / opt / có tồn tại không? Có thư mục / thư mục, vì -d có nghĩa là thư mục hoặc thư mục.
Sau đó, trong trường hợp nó tồn tại, chúng tôi sẽ in trong terminal «Vâng, nó tồn tại.»(Đây là dòng 2 và 3)
Nếu không và / opt / KHÔNG tồn tại, thì chúng tôi sẽ in «Không, nó không tồn tại»(Dòng 4 và 5)
Sau đó, ở dòng cuối cùng (số 6) chúng ta đóng if và thế là xong.

Bài viết liên quan:
Thiết lập kết nối mạng giữa PC và máy ảo Virtualbox

Làm bài kiểm tra, nó sẽ cho bạn thấy rằng / opt / không tồn tại.

Nếu bạn muốn tôi hiển thị cho bạn văn bản khác (văn bản không tồn tại), hãy thay đổi / opt / cho bất kỳ thư mục nào khác không tồn tại trong hệ thống của bạn, ví dụ: / asd /

Như bạn có thể thấy, -d giúp chúng ta biết liệu thư mục có tồn tại hay không, bây giờ nếu chúng ta thay đổi -d thành -f nó là để kiểm tra sự tồn tại của các tệp (-d = thư mục, -f = tệp / tệp)

Ví dụ:

if [ -f /etc/hosts ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

Đây là danh sách các tùy chọn:

-d - »Kiểm tra xem một thư mục nhất định có tồn tại không

-f - »Kiểm tra xem một tệp nhất định có tồn tại không

-w - »Kiểm tra xem một tệp nhất định có quyền ghi hay không

-x - »Kiểm tra xem một tệp nhất định có quyền thực thi hay không.

Và không có nhiều thứ khác để thêm vào 🙂

Tôi biết điều này sẽ rất hữu ích và thú vị cho những ai thích lập trình bằng Bash 😉

Liên quan


42 bình luận, để lại của bạn

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   Hugo dijo

    Một cách khác để làm điều đó mà không cần nếu… sau đó..else:

    test -f /etc/hosts && elcomando

    Hoặc cũng có

    test ! -f /etc/hosts && echo "no se encontró el archivo"

    Vân vân.

    1.    KZKG ^ Gaara dijo

      Đúng 😀
      … O_O… Bạn có phải là Hugo, Hugo đến từ Cuba không? … Sử dụng Windows8, WTF !!!

      1.    Hugo dijo

        Vâng, tôi đang làm quen với hệ điều hành này và nếu tôi phải nói thẳng rằng, điều duy nhất mà tôi thấy hữu ích là trình quản lý sao chép, nếu không thì cá nhân tôi cảm thấy rất khó khăn, đặc biệt là giao diện lai của nó và các ứng dụng tàu điện ngầm. Tôi thích nó ít hơn Vista và 7 (mặc dù hiệu quả hơn một chút so với những thứ này), điều mà tôi cũng không thích. Tất cả những gì tôi đang sử dụng nó là để chơi NFS13 và Skyrim, nhưng hệ điều hành này chiếm nhiều dung lượng đến mức tôi phải xóa phân vùng Linux của mình [snif].

        Tuy nhiên, để bạn yên tâm, tôi sẽ nói với bạn rằng ngày hôm trước, tôi đã tải xuống Arch ISO cho tháng 86 và tôi dự định sẽ thử nó trong phiên bản x64-XNUMX của nó, ngay sau khi tôi nhận được bản repo (bạn có chứ?). Bây giờ, như tôi đã thấy, nó sử dụng các gói đã ký theo mặc định, nó giúp tôi tự tin hơn để đi sâu.

        Và bố tôi cũng nói với tôi rằng ông ấy sẽ gửi cho tôi một chiếc Sony Xperia mà tôi muốn tận dụng để học lập trình cho Android, đó là một mong muốn đang chờ thực hiện. Bình tĩnh đi, tôi vẫn chưa đi đến mặt tối của thế lực, buahahahaha 😉

  2.   patz dijo

    kiểm tra đàn ông

    1.    msx dijo

      Chắc chắn.

  3.   RAW-Cơ bản dijo

    Wenas! ..

    Chúng ta có thể tạo cùng một ... .. nhưng thư mục được truyền dưới dạng tham số ..

    if [ -d $1 ];
    then
    echo "Sí, sí existe."
    else
    echo "No, no existe"
    fi

    Và chúng tôi gọi nó là:

    ./test.sh / opt /

    Lời chào..

  4.   tiếng savo dijo

    IF không phải là một chu kỳ xD

  5.   Gregory Swords dijo

    Nó phù hợp với tôi giống như một chiếc găng tay cho một kịch bản tôi đang làm. Sử dụng ký tự đại diện có hợp lệ không? Ví dụ: để tìm xem có .mp4 nào không, sau đó chạy thứ gì đó trên chúng.

    if [-f * .mp4];
    ...

    1.    RAW-Cơ bản dijo

      Vâng, nó hoàn toàn hợp lệ ..

      Ngay cả thông qua các tham số .. "* .mp4"

      1.    RAW-Cơ bản dijo

        Ví dụ:

        if [ -f $1 ];
        then
        rm -r $1
        else
        ls
        fi

        Nếu bạn gọi nó: ./test.sh * .mp4

        Nếu nó tìm thấy các tệp .mp4, nó sẽ xóa chúng ... ... nhưng nó không liệt kê các tệp trong thư mục đó ...

        1.    Gregory Swords dijo

          Cảm ơn vì những phản hồi và lời khuyên! 🙂

        2.    Joaquin dijo

          Bạn đã bỏ lỡ f xD

          rm -rf $ 1

          Điều này là thú vị hơn!

        3.    b1tblu3 dijo

          Thật tuyệt vời !!!, Mỗi ngày tôi yêu Linux nhiều hơn, Windows đã bị hạ xuống một góc tối nào đó trong Ổ cứng của tôi, thứ sắp bị xóa để nhường chỗ cho Linux.

          1.    RAW-Cơ bản dijo

            Tuyệt vời! .. ..thì hãy thực hiện bước tiếp theo .. và lấy nó ra ..

            6 tháng trước khoảng. Tôi chỉ có GNU / Linux trên tất cả các máy của mình và tôi không cần thêm .. .. không phải W $ .. hay Wine .. .. và tôi còn hạnh phúc hơn như vậy .. 😉

            Và tôi đang lây nhiễm cho môi trường xung quanh mình .. vì mọi người nhìn thấy tôi với Arch của tôi, nhanh chóng, hiệu quả và vui vẻ .. .. và họ yêu cầu tôi cài đặt Linux .. ..yeah! .. 😀

        4.    Inukaze dijo

          Bạn cũng có thể kiểm tra chúng để tìm các tiện ích mở rộng khác nhau, bạn có thể sử dụng một số thứ như

          #! / bin / bash
          Thư mục = $ HOME / Tải xuống

          if [$ Thư mục]; sau đó
          echo "Đây là danh sách các loại tệp:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          sử dụng {} cho phép bạn chỉ định nhiều tiện ích mở rộng trong trường hợp này, việc sử dụng "?" , là một ký tự đại diện, cho phép bạn lấy "Bất kỳ ký tự nào".

          Tôi hy vọng nó sẽ giúp bạn

        5.    pedro dijo

          Tôi khuyên bạn nên sử dụng lệnh find [directory] [search_pattern] –exec [command] {} \

      2.    Carlos dijo

        Nó không hoạt động, tôi đặt các tệp này vào thư mục:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / bin / bash
        PATH = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{print »« $ 9}'
        nếu [[-f AB.TXT]]; sau đó
        echo »Nhập IF nếu có AB
        .TXT »
        fi
        if [-f AB20160422.TXT]; sau đó
        echo "đầu vào cho một tệp AB cụ thể"
        fi

        khi tôi đặt [-f AB.TXT] đưa ra lỗi
        khi tôi đặt [[-f AB
        .TXT]] không báo lỗi nhưng không tìm thấy tệp
        nó chỉ hoạt động khi tôi đặt một tệp cụ thể, ví dụ:
        if [-f AB20160422.TXT]; sau đó

        Tôi không thể làm cho nó hoạt động với các ký tự đại diện * hoặc?

        1.    pedro dijo

          #! / usr / bin / env bash
          #.encoding = utf-8.

          NỘI DUNG

          EXIT_OK = 0
          EXIT_BAD = 66

          BOLD = »\ 033 [1m»
          NC = »\ 033 [0 phút»
          ĐỎ = »\ 033 [31 phút»

          nếu [! "$ 1"];
          sau đó
          echo "thiếu một tham số"
          thoát khỏi $ EXIT_BAD
          fi

          cd "$ 1"

          tệp = »ls -h1 $ 1»

          cho tệp trong $ ($ files); làm
          echo -e "bạn có thể làm bất cứ điều gì với $ BOLD $ file $ nc tại đây"
          thực hiện

          thoát khỏi $ EXIT_OK

  6.   msx dijo

    @KZ, hãy nói thêm về điều này: "và đó là bởi vì tôi đang bước vào thế giới tuyệt vời của Python"!

    1.    KZKG ^ Gaara dijo

      HAHAHAHA nah ... từng chút một 🙂
      Tôi vẫn chỉ là một người mới làm quen với Python, tôi hầu như không có thời gian để dành hàng giờ đồng hồ cho nó, vì vậy tôi chậm có, chậm nhưng chắc trong quá trình học của mình 😀

  7.   audoban dijo

    Cảm ơn bạn rất nhiều 😀 mới hôm qua tôi đã nghĩ cách làm điều này.

  8.   đế chế dijo

    điều này với ncurses là tuyệt vời 🙂

  9.   Jazeco dijo

    trong 1 từ… TUYỆT VỜI!
    Trong một thời gian dài, tôi đã hoàn thiện một tập lệnh để thực hiện tải xuống từ Internet, nhưng tôi gặp sự cố là nó đã tải xuống các tệp mà nó yêu cầu 1 và nhiều lần nữa mà không thể xác minh sự tồn tại của 1ro.
    Hướng dẫn rất tốt.

  10.   tổ lan dijo

    Đóng góp to lớn, ở đây từ Chile được đánh giá cao.
    Mỗi ngày LINUX đều làm tôi ngạc nhiên,
    Phần mềm miễn phí tồn tại lâu dài MIERDAAAA.

  11.   david dijo

    phục vụ cho
    kiểm tra xem tệp có phải từ một thư mục không

  12.   người trồng rừng dijo

    Nếu tôi muốn kiểm tra sự tồn tại của bất kỳ tệp nào trong đường dẫn «/ tmp / receiver», hãy thực hiện bất kỳ lệnh nào, nó sẽ như thế nào?

    Tôi sẽ rất biết ơn

    Liên quan

  13.   John dijo

    Thưa, và để xác định bằng IF nếu tệp được điền đầy đủ ???. Tôi hỏi điều này bởi vì khi bạn đang điền tệp để truyền, nó có thể lấy nó ngay cả với một nửa dữ liệu.

    Xin chào và cảm ơn vì phản hồi của bạn.

  14.   Inukaze dijo

    Tôi nghĩ bạn cũng nên thêm một ví dụ, chẳng hạn như "Kiểm tra xem không có" "tệp" hoặc "thư mục" chẳng hạn

    để kiểm tra xem nó KHÔNG tồn tại, ví dụ: sử dụng một biến->

    Thư mục

    #! / bin / bash
    Thư mục = »$ HOME / Thư mục thử nghiệm»
    Tệp = »$ HOME / Tệp kiểm tra»

    nếu [! -d "$ Thư mục"]; sau đó
    echo "Không có $ Directory"
    echo "Đang tạo ->" $ Directory "
    mkdir "$ Directory"
    khác
    echo "Thư mục" $ Directory "đã tồn tại
    fi

    nếu [! -d "$ Tệp"]; sau đó
    echo "Tệp $ không tồn tại"
    echo "Đang tạo ->" $ File "
    chạm vào "$ File"
    khác
    echo "Tệp" $ File "đã tồn tại
    fi

    1.    katekyo dijo

      khi bạn thực hiện kiểm tra mkdir sau này nếu thiết bị đầu cuối có thể tạo nó hay không vì nó có thể phá vỡ các quả bóng nếu đó là một thư mục dưới dạng thư mục gốc hoặc hệ thống.

  15.   Julius vinachi dijo

    Xin chào KZKG ^ Gaara một truy vấn như tôi sẽ làm để sử dụng curl. Tôi muốn biết cách tôi thực hiện từ bảng điều khiển đến ping url để xem liệu nó có sẵn không http://portal.com/directorio/archivo1.php Nơi file1 sẽ lưu trữ các IP truy cập, đó là để theo dõi một nhóm, tôi cần thực hiện ghim đó mỗi nửa giờ để tôi biết IP công cộng vì nó thay đổi theo thời gian và tôi không thể kết nối bằng ssh .

    Xin chào cảm ơn bạn trước Chúa phù hộ cho bạn.

    1.    KZKG ^ Gaara dijo

      Chào bạn

      Đầu tiên, bạn phải nói rằng biến IP (ví dụ) là nội dung của tệp đó, để làm được điều này, bạn phải:
      1. Tải xuống tệp
      2. Xem nội dung của nó và lấy IP từ đó
      3. IP đó là biến

      Ví dụ:
      Tại đây chúng tôi tải xuống tệp - »wget http://portal.com/directorio/archivo1.php -o tệp.html
      Sau đó, chúng tôi gán một biến nội dung của nó: - »: $ {IP: =` cat file.html`}
      .. giả sử rằng nội dung của tệp đó chỉ có IP, nếu không, bạn sẽ phải làm việc với grep, awk hoặc head.

      Khi bạn có IP là một biến, phần còn lại là thứ đơn giản nhất trên thế giới 🙂

      Nếu bạn muốn, hãy viết thư cho tôi qua email (kzkggaara[at]desdelinux[dot]net) Tôi rất sẵn lòng giúp đỡ bạn

      1.    Julius vinachi dijo

        Cảm ơn bạn rất nhiều kzkggaara rất biết ơn.

  16.   Natalia dijo

    Chào bạn, mình không hiểu lắm về tin học và không biết bài này có liên quan đến vấn đề mình gặp phải không.

    Tôi bình luận trong trường hợp bạn đọc tôi, mặc dù bài đăng từ một năm trước:
    Hóa ra là tôi đã tạo một thư mục trên máy tính để bàn của mình để lưu trữ một số video. Vâng, tôi đã xóa những video đó vì tôi không còn cần chúng nữa và bây giờ thư mục này cho tôi biết rằng nó không tồn tại (mặc dù nó hiển thị trên màn hình của tôi).

    - Đó là vấn đề đầu tiên tôi gặp phải:
    Tôi không thể xóa thư mục.

    - Vấn đề thứ hai và tôi nghĩ quan trọng hơn:
    Trong một nỗ lực để xóa thư mục, tôi đã đặt một thư mục ẢNH. Bây giờ khi tôi mở thư mục "không tồn tại" thì nó trống và ẢNH không có ở đó.

    Tôi có thể khôi phục ảnh như thế nào? Tôi đã đưa ra tùy chọn bên trong thư mục "Hiển thị tài liệu ẩn" nhưng thư mục ẢNH không xuất hiện.

    Tôi hy vọng bạn có thể biết làm thế nào nó được giải quyết.
    Cảm ơn bạn.

    1.    valdo dijo

      Có hai người dùng là người dùng chính: root và your_user (ví dụ: natalia). Cả hai đều có thư mục cá nhân. your_user trong / home và root trong / (thư mục gốc). Bằng cách nhấp chuột phải vào thư mục xem nó thuộc về ai. Nếu nó được root bằng trình quản lý tệp của bạn bằng sudo hoặc gksu hoặc kdesu tùy thuộc vào môi trường bạn sử dụng, hãy truy cập thư mục gốc -> root -> Desktop và bạn có thể sẽ tìm thấy ảnh và bạn có thể xóa thư mục. Một số bản phân phối khi bạn không phải là chủ sở hữu của tệp hoặc thư mục và không có quyền truy cập cho bạn biết thư mục / tệp không tồn tại. Nếu bạn là chủ sở hữu và bạn không phải root, hãy làm tương tự với trình quản lý tệp với sudo, v.v. và đi tới thư mục gốc -> / home -> personal_folder -> Desktop và xem ảnh có ở đó không và bạn có thể xóa thư mục hay không.
      Nếu điều này không hoạt động, bạn sẽ phải xem các tùy chọn khác từ thiết bị đầu cuối (bảng điều khiển).

  17.   Pedro Manuel Aguayo Munoz dijo

    Xin chào, bạn thế nào? Tôi đang làm một công việc ở bash và tôi muốn biết cách xác minh xem có thư mục nào được nhập từ bàn phím không, chẳng hạn

    #! / bin / bash
    đọc tuyến đường
    #Enter ~ / Máy tính để bàn
    # Sau đó, tôi cố gắng điều hướng thư mục đó
    đường dẫn cd $
    # Tôi nhận được thông báo bash sau: cd: ~ / Desktop: Tệp hoặc thư mục không tồn tại

    Câu hỏi của tôi là, tôi có thể làm gì để tôi nhập nó từ bàn phím và lấy nó làm đường dẫn thư mục?

  18.   Miguel dijo

    Và làm cách nào tôi có thể biết nếu một nhóm tồn tại,

  19.   heidi dijo

    tốt Tôi có một vấn đề trong canaima của tôi khi tôi nhấn nút cunaguaro nó nói rằng không có tệp hoặc thư mục như nó sẽ làm để giải quyết vấn đề đó và phần còn lại không mở được cunaguaro, xin cảm ơn.

  20.   Carlos dijo

    Làm thế nào để bạn thực hiện if trong BASH nếu tên tệp có khoảng trắng?
    Ví dụ:
    Dữ liệu tháng XNUMX.xlsx

    Để hỏi xem tệp có tồn tại không

    1.    Manuel Alcoholcer Jimenez dijo

      Carlos, như thế này:

      if [["$ variable" == Data \ month \ of \ April.xlsx]]; then echo 'match'; fi

      Bạn cũng có thể:
      if [["$ variable" == 'Dữ liệu của tháng April.xlsx']]; then echo 'match'; fi

      Một lựa chọn khác:
      [["$ Variable" == 'Dữ liệu của tháng April.xlsx']] && echo 'đối sánh' || echo 'không khớp'

      Ở một số khu vực tối của Internet, họ khuyên bạn nên sử dụng [[]] thay vì [] và nếu bạn định so sánh các số thì: ((biến> = 3)) && echo 'biến lớn hơn hoặc bằng 3' || echo 'biến nhỏ hơn 3'

      Do đó, đối với các số:

      if ((số! = 4)); sau đó echo "$ {number} không phải là 4"; khác echo "$ {number} là 4"; fi

  21.   Cesar Matheus dijo

    Làm thế nào bạn có thể tạo mã để xác thực nếu thư mục có một văn bản cụ thể, để có thể chỉnh sửa nó.

    ví dụ:

    if (text1)

    không làm gì cả

    khác

    thay đổi text1 thành text2

  22.   Miguel dijo

    một câu hỏi, làm thế nào nó sẽ được kiểm tra mỗi 15 giây xem tệp có tồn tại hay không, cảm ơn bạn.

  23.   bờ sông dijo

    Xin chào,
    điều này:
    if [-w / home / Komun / Logs / ti]; sau đó
    Tìm hiểu xem tệp có thể ghi được không. Nhưng nó dựa trên quyền của người dùng. Nó có thể được thực hiện để biết nếu nhóm hoặc những người khác có quyền?