Kontrollera om det finns en fil eller mapp (eller mer) med IF-loop

Jag har inte lagt något av Bash, och det är att medan jag gick in i Pythons underbara värld har jag glömt lite bort den här andra kompisen som hjälpte mig så mycket 🙂

Här lägger jag något till Bash-entusiaster, som titeln säger ... Jag kommer att visa dig hur du kontrollerar om det finns en fil eller mapp i systemet, bara genom att använda: if

Vi ska skapa en .sh-fil och ge den exekveringsbehörigheter, för detta räcker det att placera följande kommando i en terminal:

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

Det här han gjorde är att skapa filen (touch test.sh) och ger dig också körningstillstånd (chmod + x test.sh)

Låt oss sedan skriva följande i den:

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

Vad gör detta?

Enkelt 😀

I första raden - » om [-d / opt /];

Här frågar vi, existerar / opt / katalogen? Ja katalog / mapp, eftersom -d betyder katalog eller mapp.
Om det finns så skriver vi ut i terminalen «Ja, det finns det.»(Detta är rad 2 och 3)
Annars och / opt / existerar INTE, då skriver vi ut «Nej det finns inte»(Rad 4 och 5)
Sedan i sista raden (nummer 6) stänger vi if och det är det.

Relaterad artikel:
Upprätta nätverksanslutning mellan PC och Virtualbox virtuella maskiner

Gör testet, det visar dig att / opt / existerar.

Om du vill att jag ska visa dig den andra texten (den som inte finns) ändra / välja / för någon annan mapp som inte finns i ditt system, till exempel: / asd /

Som du kan se hjälper -d oss ​​att veta om katalogen finns, och nu om vi ändrar -d till -f är det att kontrollera förekomsten av filer (-d = katalog, -f = fil / fil)

Till exempel:

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

Här är listan med alternativ:

-d - »Kontrollera om det finns en viss katalog

-f - »Kontrollera om det finns en viss fil

-w - »Kontrollera om en viss fil har skrivbehörighet

-x - »Kontrollera om en viss fil har körningstillstånd.

Och det finns inte mycket mer att lägga till 🙂

Jag vet att detta kommer att vara mycket användbart och intressant för dem som gillar att programmera i Bash 😉

hälsningar


42 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Hugo sade

    Ett annat sätt att göra det utan om ... då..else:

    test -f /etc/hosts && elcomando

    Eller också

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

    Etc.

    1.    KZKG ^ Gaara sade

      Höger 😀
      ... O_O ... Är du Hugo, Hugo från Kuba? ... Använda Windows8, WTF !!!

      1.    Hugo sade

        Tja ja, jag blir bekant med detta operativsystem och om jag måste vara uppriktig är det enda jag hittat användbart är kopieringshanteraren, annars tycker jag personligen att det är ett skadedjur, särskilt dess hybridgränssnitt och tunnelbaneapplikationer. Jag gillar det mindre än Vista och 7 (om än lite effektivare än dessa), vilket jag inte heller gillade. Allt jag använder det för är att spela NFS13 och Skyrim, men det här operativsystemet tar så mycket utrymme att jag var tvungen att ta bort min Linux-partition [snif].

        Men för din sinnesfrid kommer jag att berätta att jag i förr dag hämtade Arch ISO för januari och jag planerar att ge den en smak i sin x86-64 version så snart jag får repo (kommer du att ha det?). Nu när jag såg det använder signerade paket som standard, det ger mig mer självförtroende att dyka.

        Och min far sa också till mig att han skulle skicka mig en Sony Xperia, som jag vill dra nytta av för att lära mig programmering för Android, vilket var en väntande önskan. Så lugna mig, jag har ännu inte gått till kraftens mörka sida, buahahahaha 😉

  2.   patz sade

    manstest

    1.    MSX sade

      Visst.

  3.   RAW-Basic sade

    Wenas! ..

    Vi kan skapa samma .. .. men katalogen skickas som en parameter ..

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

    Och vi kallar det som:

    ./test.sh / opt /

    Hälsning..

  4.   egen sade

    IF är inte en cykel xD

  5.   Gregory Swords sade

    Det passar mig som en handske för ett manus jag gör. Är det giltigt att använda jokertecken? Till exempel för att veta om det finns någon .mp4, kör sedan något på dem.

    om [-f * .mp4];
    .

    1.    RAW-Basic sade

      Ja, det är helt giltigt ..

      Även genom parametrar .. "* .mp4"

      1.    RAW-Basic sade

        T.ex.

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

        Om du kallar det: ./test.sh * .mp4

        Om den hittar .mp4-filer raderas den .. ..men den listar inte filerna i den katalogen ..

        1.    Gregory Swords sade

          Tack för feedback och tips! 🙂

        2.    Joaquin sade

          Du saknade f xD

          rm -rf $ 1

          Det här är mer spännande!

        3.    b1tblu3 sade

          Underbart !!!, Varje dag jag blir mer kär i Linux har Windows förflyttats till något mörkt hörn på min hårddisk, som snart ska raderas för att ge vika för Linuxs ljus.

          1.    RAW-Basic sade

            Utmärkt! .. .. ta sedan nästa steg .. och ta ut det ..

            För 6 månader sedan ca. Jag har bara GNU / Linux på alla mina maskiner och jag behöver inte mer .. .. inte W $ .. eller Vin .. ..och jag är mer än glad så .. 😉

            Och jag infekterar min omgivning .. eftersom alla ser mig med min Arch, snabb, effektiv och glad .. och de ber mig att installera Linux .. .. ja! .. 😀

        4.    Inukaze sade

          Du kan också kontrollera dem för olika tillägg, du kan använda något liknande

          #! / Bin / bash
          Katalog = $ HEM / Nedladdningar

          om [$ Directory]; sedan
          eko "Här är en lista med filtyper:"
          eko "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          med {} kan du ange flera tillägg i det här fallet, användningen av "?" , är ett jokertecken som låter dig ta "Any Character".

          Jag hoppas att du lär dig

        5.    pedro sade

          Jag rekommenderar kommandot hitta [katalog] [search_pattern] –exec [kommando] {} \

      2.    Carlos sade

        Det fungerar inte, jag lägger dessa filer i katalogen:
        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}'
        om [[-f AB.TEXT]]; sedan
        echo »Ange IF om det finns någon AB
        .TEXT "
        fi
        om [-f AB20160422.TXT]; sedan
        echo "input for a specific AB file"
        fi

        när jag satte [-f AB.TXT] ger fel
        när jag satte [[-f AB
        .TXT]] ger inget fel men kan inte hitta filen
        det fungerar bara när jag lägger in en specifik fil, till exempel:
        om [-f AB20160422.TXT]; sedan

        Jag kan inte få det att fungera med jokertecken * eller?

        1.    pedro sade

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

          KONTSTANTER

          EXIT_OK = 0
          EXIT_BAD = 66

          FETT = »\ 033 [1m»
          NC = »\ 033 [0m»
          RÖD = »\ 033 [31m»

          om [! "$ 1"];
          sedan
          eko "saknar en parameter"
          avsluta $ EXIT_BAD
          fi

          cd "$ 1"

          filer = »ls -h1 $ 1»

          för fil i $ ($ files); do
          echo -e "du kan göra vad som helst med $ BOLD $ -fil $ nc här"
          gjort

          avsluta $ EXIT_OK

  6.   MSX sade

    @KZ, berätta mer om detta: "och det beror på att jag går in i Pythons underbara värld"!

    1.    KZKG ^ Gaara sade

      HAHAHAHA nah ... lite efter lite 🙂
      Jag är fortfarande bara en nybörjare i Python, jag har knappast tid att ägna timmar och timmar åt det, så jag är långsam ja, långsam men säker i mitt lärande 😀

  7.   audoban sade

    Tack så mycket 😀 just igår tänkte jag hur man gjorde det här.

  8.   reichsk sade

    detta med ncurses är fantastiskt 🙂

  9.   Jazeco sade

    med 1 ord ... UTMÄRKT!
    Under en lång tid perfektade jag ett skript för att ladda ner från Internet, men jag hade problemet att det hämtade filerna som det begärde 1 och igen utan att kunna verifiera existensen 1ro.
    Mycket bra tuto.

  10.   zulan sade

    Fantastiskt bidrag, här från Chile uppskattas.
    Varje dag överraskar LINUX mig positivt,
    Länge leve fri programvara MIERDAAAA.

  11.   David sade

    servera för
    kontrollera om en fil kommer från en katalog

  12.   groveher sade

    Om jag vill kontrollera förekomsten av någon fil i en sökväg «/ tmp / mottagare», kör något kommando, hur skulle det vara?

    jag kommer vara väldigt tacksam

    hälsningar

  13.   John sade

    Kära, och att avgöra om IF om filen är fullbefolkad ???. Jag frågar detta för att när du fyller i filen för en överföring kan det ta det även med hälften av data.

    Hälsningar och tack för ditt svar.

  14.   Inukaze sade

    Tja, jag tror att du också bör lägga till ett exempel, till exempel "Kontrollera att det inte finns" en "fil" eller "katalog" som till exempel

    för att kontrollera att den INTE finns, använd till exempel en variabel->

    En katalog

    #! / Bin / bash
    Katalog = »$ HOME / Testkatalog»
    Fil = »$ HOME / Testfil»

    om [! -d "$ Directory"]; sedan
    eko "Det finns ingen $ Directory"
    eko "Skapa ->" $ Directory "
    mkdir "$ Directory"
    annars
    ekot "Katalog" $ Katalog "finns redan
    fi

    om [! -d "$ File"]; sedan
    eko "Fil $ existerar inte"
    eko "Skapa ->" $ File "
    tryck på "$ File"
    annars
    echo "File" $ File "finns redan
    fi

    1.    Katekyo sade

      när du gör mkdir kontrollera senare om terminalen skulle kunna skapa det eftersom det kan bryta bollarna om det är en mapp som root eller system hhah

  15.   Julius vinachi sade

    Hälsningar KZKG ^ Gaara en fråga som jag skulle göra för att använda curl. Jag skulle vilja veta hur jag gör från konsolen till ping en url för att se om den är tillgänglig till exempel http://portal.com/directorio/archivo1.php där file1 kommer att lagra ip av besök är för att övervaka ett team som jag behöver göra den pin varje halvtimme så att jag är medveten om den offentliga ip eftersom den ändras från tid till annan och jag kan inte ansluta med ssh .

    Hälsningar tack på förhand Gud välsignar dig.

    1.    KZKG ^ Gaara sade

      Hallå där,

      Först måste du säga att IP-variabeln (till exempel) är innehållet i den filen, för detta måste du:
      1. Ladda ner filen
      2. Se dess innehåll och få IP-adressen därifrån
      3. Att IP är variabeln

      Till exempel:
      Här hämtar vi filen - »wget http://portal.com/directorio/archivo1.php -o fil.html
      Sedan tilldelar vi en variabel dess innehåll: - »: $ {IP: =` cat file.html`}
      .. förutsatt att innehållet i den filen bara har IP, om inte, skulle du behöva arbeta med grep, awk eller head.

      När du väl har IP som en variabel är resten det enklaste i världen 🙂

      Om du vill, skriv till mig via e-post (kzkggaara[at]desdelinux[dot]net) Jag hjälper dig gärna

      1.    Julius vinachi sade

        Tack så mycket kzkggaara mycket tacksam.

  16.   natalia sade

    Hej, jag förstår inte mycket om datorer och jag vet inte om denna post är relaterad till det problem jag har.

    Jag kommenterar om du läser mig, även om inlägget är från för ett år sedan:
    Det visar sig att jag skapade en mapp på skrivbordet för att lagra några videor. Tja, jag raderade dessa videor för att jag inte längre behövde dem och nu säger den här mappen att den inte finns (även om den syns på mitt skrivbord).

    - Det är det första problemet jag har:
    Jag kan inte ta bort mappen.

    - Andra problemet och jag tycker viktigare:
    I ett försök att radera mappen sätter jag in en FOTOS-mapp. Nu när jag öppnar mappen som "inte existerar" är den tom och FOTONEN finns inte.

    Hur kan jag återställa bilderna? Jag har gett alternativet i mappen "Visa dolda dokument" men mappen FOTO visas inte.

    Jag hoppas att du kan veta hur det löses.
    Tack.

    1.    valdo sade

      Det finns två användare som är de viktigaste: root och your_user (natalia till exempel). De har båda personliga mappar. din_användare i / hem och rot i / (rotkatalog). Genom att högerklicka på mappen ser du vem den tillhör. Om det är root med din filhanterare med sudo eller gksu eller kdesu beroende på vilken miljö du använder går du till rotkatalogen -> root -> Desktop och du hittar förmodligen bilderna och du kan radera mappen. Vissa distros när du inte är ägare till filen eller katalogen och inte har åtkomstbehörigheter säger att katalogen / filen inte finns. Om du är ägare och inte är root, gör samma sak med filhanteraren med sudo, etc och gå till rotkatalogen -> / home -> personal_mapp -> Skrivbord och se om bilderna finns där och om du kan ta bort mappen.
      Om detta inte fungerar måste du se andra alternativ från terminalen (konsolen).

  17.   Pedro Manuel Aguayo Munoz sade

    Hej, hur mår du? Jag gör ett jobb i bash och skulle vilja veta hur man kan verifiera om det finns en katalog från tangentbordet, till exempel

    #! / Bin / bash
    läs rutt
    #Enter ~ / Desktop
    #Då försöker jag navigera i den katalogen
    cd $ sökväg
    # Jag får följande bash-meddelande: cd: ~ / Desktop: Filen eller katalogen finns inte

    Min fråga är, vad kan jag göra så att jag anger det från tangentbordet och tar det som en katalogsökväg?

  18.   Miguel sade

    Och hur kan jag veta om det finns en grupp,

  19.   heidi sade

    bra Jag har ett problem i min canaima när jag trycker på knappen cunaguaro står det att det inte finns någon fil eller katalog som det skulle göra för att lösa det problemet och resten öppnar inte cunaguaro tack tack.

  20.   Carlos sade

    Hur gör du om i BASH om filnamnet har mellanslag?
    Till exempel:
    April data.xlsx

    Att fråga om filen finns

    1.    Manuel Alcocer Jimenez sade

      Carlos, så här:

      om [["$ variabel" == Data \ månad \ av \ April.xlsx]]; sedan echo "matcha"; fi

      Du kan också:
      om [["$ variable" == 'Data för aprilmånaden.xlsx']]; sedan echo "matcha"; fi

      Ett annat alternativ:
      [[«$ Variable» == 'Data för April.xlsx']] && echo 'matches' || eko 'matchar inte'

      Vissa mörka områden på internet rekommenderar att du använder [[]] istället för [], och om du jämför siffror då: ((variabel> = 3)) && echo 'variabel är större än eller lika med 3' || echo 'variabel är mindre än 3'

      Därför för siffror:

      om ((nummer! = 4)); då är ekot "$ {number} inte 4"; annat eko "$ {number} är 4"; fi

  21.   Cesar Matheus sade

    hur du kan skapa en kod för att validera om katalogen har en specifik text, för att kunna redigera den.

    exempel:

    om (text1)

    göra ingenting

    annars

    ändra text1 till text2

  22.   Miguel sade

    En fråga, hur skulle det vara för mig att kontrollera var 15: e sekund om filen finns eller inte, tack.

  23.   flodbank sade

    Hej,
    detta:
    om [-w / home / Komun / Logs / ti]; sedan
    Ta reda på om filen är skrivbar. Men det är baserat på användarbehörigheter. Kan det göras för att ta reda på om gruppen eller de andra har behörighet?