Sprawdź, czy plik lub folder istnieje, czy nie (i więcej) z pętlą IF

Nic nie włożyłem Bash, i to jest to, że wchodząc do cudownego świata Pythona zapomniałem trochę o innym przyjacielu, który tak bardzo mi pomógł 🙂

Tutaj wrzucam coś entuzjastom Basha, jak mówi tytuł ... Pokażę Wam, jak sprawdzić, czy w systemie jest plik lub folder, używając tylko: if

Utworzymy plik .sh i nadamy mu uprawnienia do wykonywania, w tym celu wystarczy umieścić w terminalu następującą komendę:

dotknij test.sh && chmod + x test.sh

To, co to zrobiło, to utworzenie pliku (touch test.sh), a także daje uprawnienia do wykonywania (chmod + x test.sh)

Następnie napiszmy w nim co następuje:

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

Co to?

Proste 😀

W pierwszym wierszu - » jeśli [-d / opt /];

Tutaj pytamy, czy katalog / opt / istnieje? Tak, katalog / folder, ponieważ -d oznacza katalog lub folder.
Jeśli tak, wydrukujemy w terminalu «Tak, istnieje.»(To jest linia 2 i 3)
W przeciwnym razie i / opt / NIE istnieje, wydrukujemy «Nie, to nie istnieje»(Wiersze 4 i 5)
Następnie w ostatniej linii (numer 6) zamykamy if i to wszystko.

Podobne artykuł:
Ustanów połączenie sieciowe między komputerem a maszynami wirtualnymi Virtualbox

Wykonaj test, pokaże ci, że / opt / istnieje.

Jeśli chcesz, żebym pokazał ci inny tekst (ten, który nie istnieje) zmień / opt / na inny folder, który nie istnieje w twoim systemie, na przykład: / asd /

Jak widać, -d pomaga nam wiedzieć, czy katalog istnieje, cóż, teraz, jeśli zmienimy -d na -f, to sprawdza istnienie plików (-d = katalog, -f = plik / plik)

Na przykład:

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

Oto lista opcji:

-d - »Sprawdź, czy istnieje określony katalog

-f - »Sprawdź, czy istnieje określony plik

-w - »Sprawdź, czy określony plik ma uprawnienia do zapisu

-x - »Sprawdź, czy określony plik ma uprawnienia do wykonywania.

I cóż, nie ma nic więcej do dodania

Wiem, że będzie to bardzo przydatne i interesujące dla tych, którzy lubią programować w Bash 😉

pozdrowienia


42 komentarzy, zostaw swoje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Hugo powiedział

    Inny sposób na zrobienie tego bez jeśli… wtedy… else:

    test -f /etc/hosts && elcomando

    Albo też

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

    Itp.

    1.    KZKG ^ Gaara powiedział

      Dobrze 😀
      … O_O… Jesteś Hugo, Hugo z Kuby? … Używając Windows8, WTF !!!

      1.    Hugo powiedział

        Cóż, tak, zapoznałem się z tym systemem operacyjnym i jeśli mam być szczery, jedyne, co uznałem za przydatne, to menedżer kopiowania, w przeciwnym razie osobiście uważam go za szkodnika, zwłaszcza jego interfejs hybrydowy i aplikacje metra. Podoba mi się mniej niż Vista i 7 (choć trochę bardziej wydajne niż te), które też mi się nie podobały. Używam go tylko do grania w NFS13 i Skyrim, ale ten system operacyjny zajmuje tak dużo miejsca, że ​​musiałem usunąć moją partycję Linuksa [snif].

        Jednak dla twojego spokoju powiem ci, że przedwczoraj pobrałem Arch ISO na styczeń i planuję przetestować go w wersji x86-64, jak tylko otrzymam repozytorium (czy będziesz go miał?). Teraz, gdy zobaczyłem, że domyślnie używa podpisanych pakietów, daje mi to więcej pewności siebie.

        Mój ojciec powiedział mi też, że przyśle mi Sony Xperię, z której chcę się nauczyć programowania na Androida, czego oczekuję. Więc uspokój się, jeszcze nie przeszedłem na ciemną stronę mocy, buahahahaha 😉

  2.   paz powiedział

    test człowieka

    1.    msx powiedział

      Jasne.

  3.   RAW-podstawowy powiedział

    Wenas! ..

    Moglibyśmy zrobić to samo .. ..ale katalog jest przekazywany jako parametr ..

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

    I nazywamy to:

    ./test.sh / opt /

    Powitanie..

  4.   posiadać powiedział

    JEŻELI nie jest cyklem xD

  5.   Miecze Grzegorza powiedział

    Pasuje mi jak rękawiczka do scenariusza, który robię. Czy można używać symboli wieloznacznych? Na przykład, aby wiedzieć, czy jest jakiś plik .mp4, uruchom na nich coś.

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

    1.    RAW-podstawowy powiedział

      Tak, to jest całkowicie ważne.

      Nawet poprzez parametry .. „* .mp4”

      1.    RAW-podstawowy powiedział

        Np.

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

        Jeśli to nazwiesz: ./test.sh * .mp4

        Jeśli znajdzie pliki .mp4, usuwa je .. ..nie wyświetla listę plików w tym katalogu ..

        1.    Miecze Grzegorza powiedział

          Dzięki za opinie i wskazówki! 🙂

        2.    Joaquin powiedział

          Przegapiłeś f xD

          rm -rf $ 1

          To jest bardziej ekscytujące!

        3.    b1tblu3 powiedział

          Cudownie !!!, Każdego dnia bardziej zakochuję się w Linuksie, Windows spadł do jakiegoś ciemnego zakątka mojego dysku twardego, który ma zostać wymazany, aby ustąpić miejsca światłu Linuksa.

          1.    RAW-podstawowy powiedział

            Doskonale! .. .. potem zrób następny krok… i wyrzuć to…

            6 miesięcy temu ok. Mam tylko GNU / Linuksa na wszystkich moich maszynach i nie potrzebuję więcej… ..nie W $… ani Wina…… i jestem bardziej niż szczęśliwy… 😉

            I infekuję swoje otoczenie .. ponieważ wszyscy widzą mnie z moim Arch, szybkim, wydajnym i szczęśliwym .. .. i proszą mnie o zainstalowanie Linuksa .. .. tak! .. 😀

        4.    Inukaze powiedział

          Możesz również sprawdzić je pod kątem różnych rozszerzeń, możesz użyć czegoś takiego jak

          #! / bin / bash
          Katalog = $ HOME / Pobrane

          if [$ Directory]; następnie
          echo "Oto lista typów plików:"
          echo „mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi”
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          użycie {} umożliwia określenie wielu rozszerzeń w tym przypadku użycie znaku „?” , to symbol wieloznaczny, który umożliwia wybranie „Dowolnego znaku”.

          Mam nadzieję, że się uczyć

        5.    pedro powiedział

          Polecam polecenie znajdź [katalog] [wzorzec_wyszukiwania] –exec [polecenie] {} \

      2.    Carlos powiedział

        To nie działa, umieściłem te pliki w katalogu:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / bin / bash
        ŚCIEŻKA = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{drukuj »« $ 9}'
        jeśli [[-f AB.TEKST]]; następnie
        echo »Wprowadź IF, jeśli jest jakikolwiek AB
        .TEKST "
        fi
        jeśli [-f AB20160422.TXT]; następnie
        echo "wejście dla określonego pliku AB"
        fi

        kiedy wstawię [-f AB.TXT] zwraca błąd
        kiedy wstawię [[-f AB
        .TXT]] nie wyświetla błędu, ale nie może znaleźć pliku
        działa tylko wtedy, gdy umieszczę określony plik, na przykład:
        jeśli [-f AB20160422.TXT]; następnie

        Nie mogę zmusić go do działania z symbolami wieloznacznymi * lub?

        1.    pedro powiedział

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

          KONTSTANCI

          EXIT_OK = 0
          EXIT_BAD = 66

          BOLD = »\ 033 [1m»
          NC = »\ 033 [0m»
          RED = »\ 033 [31m»

          gdyby [! „1 $”];
          następnie
          echo "brakuje parametru"
          zakończ $ EXIT_BAD
          fi

          cd „$ 1”

          files = »ls -h1 $ 1»

          dla pliku w $ ($ files); zrobić
          echo -e "możesz zrobić wszystko z $ BOLD $ file $ nc tutaj"
          zrobić

          wyjdź $ EXIT_OK

  6.   msx powiedział

    @KZ, opowiedz o tym więcej: "a to dlatego, że wkraczam do cudownego świata Pythona"!

    1.    KZKG ^ Gaara powiedział

      HAHAHAHA nie ... krok po kroku 🙂
      Nadal jestem nowicjuszem w Pythonie, prawie nie mam czasu, aby poświęcić temu wiele godzin, więc jestem wolny tak, wolny, ale pewny w nauce 😀

  7.   Audobana powiedział

    Dziękuję bardzo 😀 dopiero wczoraj zastanawiałem się, jak to zrobić.

  8.   Rzesza Sk powiedział

    to z ncurses jest świetne 🙂

  9.   Jazeco powiedział

    jednym słowem… DOSKONAŁA!
    Przez długi czas doskonaliłem skrypt do pobierania plików z Internetu, ale miałem problem z tym, że pobierał pliki, o które prosił 1, i ponownie bez możliwości sprawdzenia istnienia 1ro.
    Bardzo dobre tuto.

  10.   Zulan powiedział

    Ogromny wkład z Chile jest doceniany.
    LINUX każdego dnia miło mnie zaskakuje,
    Niech żyje wolne oprogramowanie MIERDAAAA.

  11.   david powiedział

    służyć do
    sprawdź, czy plik pochodzi z katalogu

  12.   groveher powiedział

    Jeśli chcę sprawdzić istnienie dowolnego pliku w ścieżce «/ tmp / receivers», wykonaj dowolne polecenie, jak by to było?

    Będę bardzo wdzięczny

    pozdrowienia

  13.   John powiedział

    Szanowni Państwo, i ustalić przez JEŻELI, czy plik jest w pełni zapełniony ???. Pytam o to, bo kiedy wypełniasz plik do transmisji, może to zająć nawet połowę danych.

    Pozdrawiam i dziękuję za odpowiedź.

  14.   Inukaze powiedział

    Myślę, że powinieneś również dodać przykład, taki jak „Sprawdź, czy nie ma„ pliku ”lub„ katalogu ”, na przykład

    aby sprawdzić, czy NIE istnieje, na przykład użyj zmiennej->

    Katalog

    #! / bin / bash
    Katalog = »$ HOME / Katalog testów»
    Plik = »$ HOME / Plik testowy»

    gdyby [! -d "$ Directory"]; następnie
    echo "Nie ma katalogu $ Directory"
    echo "Tworzenie ->" $ Directory "
    mkdir „$ Directory”
    więcej
    echo "Katalog" $ Directory "już istnieje
    fi

    gdyby [! -d "$ Plik"]; następnie
    echo "Plik $ nie istnieje"
    echo "Tworzenie ->" $ File "
    dotknij „$ File”
    więcej
    echo "Plik" $ File "już istnieje
    fi

    1.    Katekyo powiedział

      kiedy wykonasz mkdir sprawdź później, czy terminal może go utworzyć ponieważ może złamać kulki, jeśli jest to folder jako root lub system hhah

  15.   Julius vinachi powiedział

    Pozdrawiam KZKG ^ Gaara zapytanie jakbym zrobił, żeby użyć curl. Chciałbym wiedzieć, jak z konsoli pingować adres URL, aby sprawdzić, czy jest na przykład dostępny http://portal.com/directorio/archivo1.php Tam, gdzie plik1 będzie przechowywał adresy IP odwiedzin, to do monitorowania zespołu muszę tworzyć ten pin co pół godziny, aby mieć świadomość publicznego adresu IP, ponieważ zmienia się od czasu do czasu i nie mogę połączyć się przez ssh .

    Pozdrowienia z góry dziękuję, niech cię Bóg błogosławi.

    1.    KZKG ^ Gaara powiedział

      Witam,

      Po pierwsze, musisz powiedzieć, że zmienna IP (na przykład) to zawartość tego pliku, w tym celu musisz:
      1. Pobierz plik
      2. Zobacz jego zawartość i uzyskaj stamtąd adres IP
      3. To IP jest zmienną

      Na przykład:
      Tutaj pobieramy plik - »wget http://portal.com/directorio/archivo1.php -o plik.html
      Następnie przypisujemy zmiennej jej zawartość: - »: $ {IP: =` cat file.html`}
      .. zakładając, że zawartość tego pliku ma tylko adres IP, jeśli nie, musiałbyś pracować z grep, awk lub head.

      Kiedy już masz adres IP jako zmienną, reszta jest najprostszą rzeczą na świecie 🙂

      Jeśli chcesz napisz do mnie na maila (kzkggaara[at]desdelinux[dot]net) Chętnie Ci pomogę

      1.    Julius vinachi powiedział

        Dziękuję bardzo kzkggaara bardzo wdzięczny.

  16.   Natalia powiedział

    Witam, nie rozumiem zbyt wiele z informatyki i nie wiem, czy ten wpis jest związany z problemem, który mam.

    Komentuję na wypadek, gdybyś mnie czytał, mimo że post pochodzi sprzed roku:
    Okazuje się, że utworzyłem folder na pulpicie do przechowywania niektórych filmów. Cóż, usunąłem te filmy, ponieważ już ich nie potrzebowałem, a teraz ten folder mówi mi, że nie istnieje (chociaż jest widoczny na moim pulpicie).

    - To jest pierwszy problem jaki mam:
    Nie mogę usunąć folderu.

    - Drugi problem i myślę, że ważniejszy:
    Próbując usunąć folder, umieściłem folder PHOTOS. Teraz, kiedy otwieram folder, który „nie istnieje”, jest pusty i nie ma tam ZDJĘĆ.

    Jak mogę odzyskać zdjęcia? Podałem opcję w folderze „Pokaż ukryte dokumenty”, ale folder ZDJĘCIA się nie pojawia.

    Mam nadzieję, że wiesz, jak to rozwiązano.
    Dziękuję.

    1.    valdo powiedział

      Jest dwóch użytkowników, którzy są głównymi użytkownikami: root i your_user (na przykład natalia). Obaj mają foldery osobiste. twój_użytkownik w / home i root w / (katalog główny). Klikając prawym przyciskiem myszy folder, zobacz, do kogo należy. Jeśli jest to root z menedżerem plików za pomocą sudo lub gksu lub kdesu, w zależności od używanego środowiska, przejdź do katalogu głównego -> root -> Pulpit, a prawdopodobnie znajdziesz zdjęcia i możesz usunąć folder. Niektóre dystrybucje, gdy nie jesteś właścicielem pliku lub katalogu i nie masz uprawnień dostępu, informują, że katalog / plik nie istnieje. Jeśli jesteś właścicielem, a nie jesteś rootem, zrób to samo z menedżerem plików za pomocą sudo itp. I przejdź do katalogu głównego -> / home -> personal_folder -> Desktop i sprawdź, czy są tam zdjęcia i czy możesz usunąć folder.
      Jeśli to nie zadziała, będziesz musiał zobaczyć inne opcje z terminala (konsoli).

  17.   Pedro Manuel Aguayo Munoz powiedział

    Witam jak się masz Wykonuję robotę w bashu i chciałbym wiedzieć jak sprawdzić czy jest katalog wpisany z klawiatury np.

    #! / bin / bash
    czytaj trasę
    #Enter ~ / Desktop
    # Następnie próbuję przejść do tego katalogu
    cd $ ścieżka
    # Otrzymuję następujący komunikat bash: cd: ~ / Pulpit: plik lub katalog nie istnieje

    Moje pytanie brzmi, co mogę zrobić, aby wprowadzić go z klawiatury i potraktować jako ścieżkę do katalogu?

  18.   Miguel powiedział

    Skąd mam wiedzieć, czy grupa istnieje,

  19.   heidi powiedział

    dobrze mam problem w mojej canaima jak wciskam przycisk cunaguaro to mówi że nie ma pliku lub katalogu jak by to zrobił by rozwiązać ten problem a reszta nie otwiera cunaguaro proszę dziękuję.

  20.   Carlos powiedział

    Jak zrobić if w BASH, jeśli nazwa pliku zawiera spacje?
    Na przykład:
    Kwiecień data.xlsx

    Aby zapytać, czy plik istnieje

    1.    Manuel Alcocer Jimenez powiedział

      Carlos, w ten sposób:

      if [["$ zmienna" == Dane \ miesiąc \ z \ April.xlsx]]; następnie echo 'match'; fi

      Możesz także:
      if [["$ zmienna" == 'Dane za kwiecień.xlsx']]; następnie echo 'match'; fi

      Inna opcja:
      [["$ Variable" == 'Dane za kwiecień.xlsx']] && echo 'dopasowuje' || echo „nie pasuje”

      W niektórych ciemnych obszarach internetu zalecają używanie [[]] zamiast [], a jeśli zamierzasz porównać liczby, to: ((zmienna> = 3)) && echo 'zmienna jest większa lub równa 3' || zmienna echo 'jest mniejsza niż 3'

      Dlatego dla liczb:

      if ((liczba! = 4)); wtedy echo "$ {numer} nie jest 4"; w przeciwnym razie echo „$ {numer} to 4”; fi

  21.   Cesar Mateusz powiedział

    Jak zrobić kod, aby sprawdzić, czy katalog ma określony tekst, aby móc go edytować.

    przykład:

    if (tekst1)

    nic nie robić

    więcej

    zmień tekst1 na tekst2

  22.   Miguel powiedział

    pytanie, jak by to było sprawdzać co 15 sekund, czy plik istnieje, czy nie, dziękuję.

  23.   Brzeg rzeki powiedział

    Cześć,
    to:
    if [-w / home / Komun / Logs / ti]; następnie
    Dowiedz się, czy plik jest zapisywalny. Ale opiera się na uprawnieniach użytkowników. Czy można to zrobić, aby dowiedzieć się, czy grupa lub inni mają uprawnienia?