Sjekk om en fil eller mappe eksisterer eller ikke (og mer) med IF-loop

Jeg har ikke lagt noe av Bash, og det er at når jeg kommer inn i den fantastiske verdenen til Python, har jeg glemt litt om denne andre vennen som hjalp meg så mye 🙂

Her legger jeg noe til Bash-entusiaster, som tittelen sier ... Jeg skal vise deg hvordan du sjekker om en fil eller mappe finnes i systemet, bare ved å bruke: if

Vi skal lage en .sh-fil og gi den utførelsestillatelser, for dette er det nok å sette følgende kommando i en terminal:

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

Hva dette gjorde er å opprette filen (berøringstest.sh) og gir deg også gjennomføringstillatelser (chmod + x test.sh)

La oss så skrive følgende i den:

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

Hva gjør dette?

Enkelt 😀

I første linje - » hvis [-d / opt /];

Her spør vi, eksisterer / opt / katalogen? Ja katalog / mappe, fordi -d betyr katalog eller mappe.
Så hvis den eksisterer, vil vi skrive ut i terminalen «Ja, den eksisterer.»(Dette er linje 2 og 3)
Ellers og / opt / eksisterer IKKE, så skriver vi ut «Nei det eksisterer ikke»(Linje 4 og 5)
Så i siste linje (nummer 6) lukker vi if og det er det.

Relatert artikkel:
Opprett nettverkstilkobling mellom PC-en og virtuelle virtuelle maskiner

Gjør testen, den viser deg at / opt / eksisterer.

Hvis du vil at jeg skal vise deg den andre teksten (den som ikke eksisterer), endre / opt / for en annen mappe som ikke finnes i systemet ditt, for eksempel: / asd /

Som du kan se, hjelper -d oss ​​å vite om katalogen eksisterer, og hvis vi endrer -d til -f, er det å sjekke eksistensen av filer (-d = katalog, -f = fil / fil)

For eksempel:

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

Her er listen over alternativer:

-d - »Sjekk om det finnes en viss katalog

-f - »Sjekk om en bestemt fil eksisterer

-w - »Sjekk om en bestemt fil har skrivetillatelser

-x - »Sjekk om en bestemt fil har kjøringstillatelser.

Og vel, det er ikke mye mer å legge til 🙂

Jeg vet at dette vil være veldig nyttig og interessant for de som liker å programmere i Bash 😉

Hilsen


Innholdet i artikkelen følger våre prinsipper for redaksjonell etikk. Klikk på for å rapportere en feil her.

42 kommentarer, legg igjen dine

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Hugo sa

    En annen måte å gjøre det uten om ... da..else:

    test -f /etc/hosts && elcomando

    Eller også

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

    Etc.

    1.    KZKG ^ Gaara sa

      Høyre 😀
      ... O_O ... Er du Hugo, Hugo fra Cuba? ... Bruker Windows8, WTF !!!

      1.    Hugo sa

        Vel ja, jeg blir kjent med dette operativsystemet, og hvis jeg må være ærlig, er det eneste jeg har funnet nyttig, kopiadministratoren, ellers synes jeg det personlig er et skadedyr, spesielt dets hybridgrensesnitt og metroapplikasjonene. Jeg liker det mindre enn Vista og 7 (om enn litt mer effektivt enn disse), som jeg ikke likte heller. Det eneste jeg bruker det til er å spille NFS13 og Skyrim, men dette operativsystemet tar så mye plass at jeg måtte slette Linux-partisjonen [snif].

        For din sjelefred vil jeg imidlertid fortelle deg at jeg i forgårs lastet ned Arch ISO for januar, og jeg planlegger å gi den en smakebit i x86-64-versjonen så snart jeg får repoen (vil du ha den? Nå som jeg så det bruker signerte pakker som standard, gir det meg mer selvtillit til å dykke.

        Og faren min fortalte meg også at han ville sende meg en Sony Xperia, som jeg vil benytte meg av for å lære litt programmering for Android, som var et ventende ønske. Så rolig, jeg har ennå ikke gått til den mørke siden av styrken, buahahahaha 😉

  2.   patz sa

    mannstest

    1.    MSX sa

      Jada.

  3.   RAW-Basic sa

    Wenas! ..

    Vi kan lage den samme .. ..men katalogen sendes som en parameter ..

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

    Og vi kaller det som:

    ./test.sh / opt /

    Hilsen..

  4.   egen sa

    IF er ikke en syklus xD

  5.   Gregorio Espadas sa

    Det passer meg som en hanske til et skript jeg holder på med. Er det gyldig å bruke jokertegn? For eksempel for å finne ut om det er noen .mp4s, kjør deretter noe på dem.

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

    1.    RAW-Basic sa

      Ja, det er helt gyldig ..

      Selv gjennom parametere .. "* .mp4"

      1.    RAW-Basic sa

        Eg

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

        Hvis du kaller det: ./test.sh * .mp4

        Hvis den finner .mp4-filer, sletter den dem ... ... men den viser ikke filene i den katalogen ...

        1.    Gregorio Espadas sa

          Takk for tilbakemeldingene og tipsene! 🙂

        2.    Joaquin sa

          Du savnet f xD

          rm -rf $ 1

          Dette er mer spennende!

        3.    b1tblu3 sa

          Fantastisk !!!, Hver dag jeg blir mer forelsket i Linux, har Windows blitt henvist til et mørkt hjørne av harddisken min, som er i ferd med å bli slettet for å vike for lyset fra Linux.

          1.    RAW-Basic sa

            Utmerket! .. .. ta neste steg .. og få det ut ..

            For 6 måneder siden ca. Jeg har bare GNU / Linux på alle maskinene mine, og jeg trenger ikke mer .. ..ikke W $ .. eller Vin .. ..og jeg er mer enn glad sånn ..

            Og jeg smitter omgivelsene mine .. siden alle ser meg med min Arch, rask, effektiv og lykkelig .. ..og de ber meg om å installere Linux .. ..yeah! .. 😀

        4.    Inukaze sa

          Du kan også sjekke dem for forskjellige utvidelser, du kan bruke noe sånt

          #! / Bin / bash
          Katalog = $ HJEM / Nedlastinger

          hvis [$ Directory]; deretter
          ekko "Her er en liste over filtyper:"
          ekko "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          ved hjelp av {} kan du spesifisere flere utvidelser i dette tilfellet, bruk av "?" , er et jokertegn som lar deg ta "Any Character".

          Jeg håper det hjelper deg

        5.    pedro sa

          Jeg anbefaler kommandoen finn [katalog] [search_pattern] –exec [kommando] {} \

      2.    Carlos sa

        Det fungerer ikke, jeg la disse filene 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}'
        hvis [[-f AB.TEKST]]; deretter
        ekko »Angi IF hvis det er noen AB
        .TEKST "
        fi
        hvis [-f AB20160422.TXT]; deretter
        ekko "input for a specific AB file"
        fi

        da jeg satte [-f AB.TXT] gir feil
        da jeg satte [[-f AB
        .TXT]] gir ingen feil, men finner ikke filen
        det fungerer bare når jeg legger en bestemt fil, for eksempel:
        hvis [-f AB20160422.TXT]; deretter

        Jeg kan ikke få det til å fungere med jokertegn * eller?

        1.    pedro sa

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

          KONSTANTER

          EXIT_OK = 0
          EXIT_BAD = 66

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

          hvis [! "$ 1"];
          deretter
          ekko "mangler en parameter"
          avslutte $ EXIT_BAD
          fi

          cd "$ 1"

          filer = »ls -h1 $ 1»

          for fil i $ ($ files); gjøre
          ekko -e "du kan gjøre hva som helst med $ BOLD $ fil $ nc her"
          gjort

          avslutte $ EXIT_OK

  6.   MSX sa

    @KZ, fortell mer om dette: "og det er fordi jeg går inn i den fantastiske verdenen til Python"!

    1.    KZKG ^ Gaara sa

      HAHAHAHA nah ... litt etter litt 🙂
      Jeg er fortsatt bare en nybegynner i Python, jeg har knapt tid til å vie timer og timer til det, så jeg er treg, ja, treg, men sikker i læringen min 😀

  7.   Audoban sa

    Tusen takk 😀 bare i går tenkte jeg hvordan jeg skulle gjøre dette.

  8.   ReichSk sa

    dette med ncurses er flott 🙂

  9.   jazeco sa

    med 1 ord ... UTMERKET!
    I lang tid perfeksjonerte jeg et skript for å lage nedlastinger fra Internett, men jeg hadde problemet at det lastet ned filene det ba om 1 og igjen uten å kunne bekrefte eksistensen 1ro.
    Veldig bra tuto.

  10.   zulan sa

    Fantastisk bidrag, her fra Chile, blir verdsatt.
    Hver dag overrasker LINUX meg hyggelig,
    Leve gratis programvare MIERDAAAA.

  11.   david sa

    server for
    sjekk om en fil er fra en katalog

  12.   Grovher sa

    Hvis jeg vil sjekke eksistensen av en fil i en bane «/ tmp / mottakere», kan du utføre en hvilken som helst kommando, hvordan ville det være?

    Jeg vil være veldig takknemlig

    Hilsen

  13.   Juan sa

    Kjære, og å avgjøre om HVIS om filen er fullbefolket ???. Jeg spør dette fordi når du fyller filen for en overføring, kan det ta det med halvparten av dataene.

    Hilsen og takk for svaret ditt.

  14.   Inukaze sa

    Vel, jeg tror du også bør legge til et eksempel, for eksempel "Sjekk at det ikke er" en "fil" eller "katalog" som for eksempel

    for å sjekke at den IKKE eksisterer, bruk for eksempel en variabel->

    En katalog

    #! / Bin / bash
    Directory = »$ HOME / Test Directory»
    Fil = »$ HOME / Testfil»

    hvis [! -d "$ Directory"]; deretter
    ekko "Det er ingen $ Directory"
    ekko "Opprette ->" $ Directory "
    mkdir "$ Directory"
    ellers
    ekko "Katalog" $ Directory "eksisterer allerede
    fi

    hvis [! -d "$ File"]; deretter
    ekko "Filen $ eksisterer ikke"
    ekko "Opprette ->" $ File "
    trykk på "$ File"
    ellers
    ekko "File" $ File "eksisterer allerede
    fi

    1.    Katekyo sa

      når du gjør mkdir, sjekk senere om terminalen kan opprette den fordi den kan knuse ballene hvis det er en mappe som root eller system hhah

  15.   Julius vinachi sa

    Hilsen KZKG ^ Gaara et spørsmål hvordan jeg ville gjort for å bruke krøll. Jeg vil gjerne vite hvordan jeg gjør det fra konsollen til ping en url for å se om den er tilgjengelig for eksempel http://portal.com/directorio/archivo1.php Hvor file1 skal lagre IP-ene for besøk, er det for å overvåke et team som jeg trenger å lage den pin hver halvtime, slik at jeg er klar over den offentlige IP siden den endrer seg fra tid til annen, og jeg kan ikke koble til med ssh.

    Hilsen takk på forhånd Gud velsigne deg.

    1.    KZKG ^ Gaara sa

      Hei, hvordan har du det?

      Først må du si at IP-variabelen (for eksempel) er innholdet i den filen, for dette må du:
      1. Last ned filen
      2. Se innholdet og få IP derfra
      3. At IP er variabelen

      For eksempel:
      Her laster vi ned filen - »wget http://portal.com/directorio/archivo1.php -o fil.html
      Deretter tildeler vi en variabel innholdet: - »: $ {IP: =` cat file.html`}
      .. forutsatt at innholdet i den filen bare har IP, hvis ikke, må du jobbe med grep, awk eller head.

      Når du har IP-en som variabel, er resten den enkleste tingen i verden 🙂

      Hvis du vil skrive meg til e-posten (kzkggaara [at] desdelinux [dot] net) så hjelper jeg deg gjerne

      1.    Julius vinachi sa

        Tusen takk kzkggaara veldig takknemlig.

  16.   Natalia sa

    Hei, jeg forstår ikke mye om databehandling, og jeg vet ikke om denne oppføringen er relatert til problemet jeg har.

    Jeg kommenterer i tilfelle du leser meg, selv om innlegget er fra for et år siden:
    Det viser seg at jeg opprettet en mappe på skrivebordet mitt for å lagre noen videoer. Vel, jeg slettet disse videoene fordi jeg ikke lenger trengte dem, og nå forteller denne mappen meg at den ikke eksisterer (selv om den er synlig på skrivebordet mitt).

    - Det er det første problemet jeg har:
    Jeg kan ikke slette mappen.

    - Andre problem, og jeg tror viktigere:
    I et forsøk på å slette mappen, setter jeg en FOTO-mappe. Nå når jeg åpner mappen "eksisterer ikke", er den tom og FOTOENE mangler.

    Hvordan kan jeg gjenopprette bildene? Jeg har gitt muligheten i mappen "Vis skjulte dokumenter", men mappen FOTO vises ikke.

    Jeg håper du kan vite hvordan det løses.
    Takk.

    1.    Valdo sa

      Det er to brukere som er de viktigste: root og your_user (for eksempel natalia). De har begge personlige mapper. din_bruker i / hjem og rot i / (rotkatalog). Ved å høyreklikke på mappen, se hvem den tilhører. Hvis det er root med filbehandleren din ved hjelp av sudo eller gksu eller kdesu, avhengig av miljøet du bruker, gå til rotkatalogen -> root -> Desktop, og du vil sannsynligvis finne bildene, og du kan slette mappen. Noen distroer når du ikke er eier av filen eller katalogen og ikke har tilgangstillatelser, forteller at katalogen / filen ikke eksisterer. Hvis du er eieren og ikke er root, gjør det samme med filbehandleren med sudo, etc og gå til rotkatalogen -> / home -> personal_folder -> Desktop og se om bildene er der og om du kan slette mappen.
      Hvis dette ikke fungerer, må du se andre alternativer fra terminalen (konsollen).

  17.   Pedro Manuel Aguayo Muñoz sa

    Hei, hvordan har du det? Jeg gjør en jobb i bash og vil gjerne vite hvordan jeg kan kontrollere om det er skrevet inn en katalog fra tastaturet, for eksempel

    #! / Bin / bash
    lese rute
    #Enter ~ / Desktop
    # Så prøver jeg å navigere i katalogen
    cd $ sti
    # Jeg får følgende bash-melding: cd: ~ / Desktop: Filen eller katalogen eksisterer ikke

    Spørsmålet mitt er: Hva kan jeg gjøre slik at jeg skriver inn det fra tastaturet og tar det som en katalogbane?

  18.   Miguel sa

    Og hvordan kan jeg vite om en gruppe eksisterer,

  19.   heidy sa

    bra Jeg har et problem i canaimaen min når jeg trykker på knappen cunaguaro, det står at det ikke er noen fil eller katalog som det ville gjort for å løse det problemet, og resten åpner ikke cunaguaro takk.

  20.   Carlos sa

    Hvordan gjør du if in BASH hvis filnavnet har mellomrom?
    For eksempel:
    April data.xlsx

    Å spørre om filen eksisterer

    1.    Manuel Alcocer Jimenez sa

      Carlos, slik:

      hvis [["$ variable" == Data \ måned \ av \ April.xlsx]]; deretter ekko 'match'; fi

      Du kan også:
      hvis [["$ variable" == 'Data for april måned.xlsx']]; deretter ekko 'match'; fi

      Et annet alternativ:
      [["$ Variable" == 'Data for April.xlsx']] && echo 'matches' || ekko 'stemmer ikke overens'

      I noen mørke områder på internett anbefaler de å bruke [[]] i stedet for [], og hvis du skal sammenligne tall da: ((variabel> = 3)) && echo 'variabel er større enn eller lik 3' | | ekko 'variabel er mindre enn 3'

      Derfor, for tall:

      hvis ((tall! = 4)); deretter ekko "$ {number} er ikke 4"; ellers ekko "$ {number} er 4"; fi

  21.   Cesar Mateus sa

    hvordan du kan lage en kode for å validere hvis katalogen har en bestemt tekst, for å kunne redigere den.

    eksempel:

    hvis (tekst1)

    gjør ingenting

    ellers

    endre tekst1 til tekst2

  22.   Miguel sa

    et spørsmål, hvordan ville det være å sjekke hvert 15. sekund om filen eksisterer eller ikke, takk.

  23.   elvebredden sa

    Hei,
    dette:
    hvis [-w / home / Komun / Logs / ti]; deretter
    Finn ut om filen er skrivbar. Men det er basert på brukertillatelser. Kan det gjøres for å finne ut om gruppen eller de andre har tillatelser?