Kontroller, om der findes en fil eller mappe (og mere) med IF-loop

Jeg har ikke lagt noget af Bash, og det er, at når jeg kommer ind i Pythons vidunderlige verden, har jeg glemt lidt om denne anden ven, der hjalp mig så meget 🙂

Her satte jeg noget til Bash-entusiasterne, som titlen siger ... Jeg vil vise dig, hvordan du kontrollerer, om der er en fil eller mappe i systemet, bare ved hjælp af: if

Vi skal oprette en .sh-fil og give den eksekveringstilladelser, for det er det nok at placere følgende kommando i en terminal:

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

Dette, hvad han gjorde, er at oprette filen (touch test.sh) og giver dig også eksekveringstilladelser (chmod + x test.sh)

Lad os så skrive følgende i det:

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

Hvad gør dette?

Simpelt 😀

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

Her spørger vi, findes / opt / kataloget? Ja mappe / mappe, fordi -d betyder bibliotek eller mappe.
Så hvis det findes, vil vi udskrive i terminalen «Ja, det eksisterer.»(Dette er linje 2 og 3)
Ellers og / opt / findes IKKE, så udskriver vi «Nej det eksisterer ikke»(Linie 4 og 5)
Derefter lukker vi i sidste linje (nummer 6) if og det er det.

relateret artikel:
Opret netværksforbindelse mellem pc'en og Virtualbox virtuelle maskiner

Udfør testen, det viser dig, at / opt / findes.

Hvis du vil have mig til at vise dig den anden tekst (den der ikke findes) skal du ændre / vælge / til enhver anden mappe, der ikke findes i dit system, for eksempel: / asd /

Som du kan se, hjælper -d os med at vide, om mappen findes, og nu, hvis vi ændrer -d til -f, er det at kontrollere eksistensen af ​​filer (-d = bibliotek, -f = fil / fil)

For eksempel:

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

Her er listen over muligheder:

-d - »Kontroller, om der findes en bestemt mappe

-f - »Kontroller, om der findes en bestemt fil

-w - »Kontroller, om en bestemt fil har skrivetilladelser

-x - »Kontroller, om en bestemt fil har eksekveringstilladelser.

Og godt, der er ikke meget mere at tilføje 🙂

Jeg ved, at dette vil være meget nyttigt og interessant for dem, der kan lide at programmere i Bash 😉

hilsen


Indholdet af artiklen overholder vores principper for redaktionel etik. Klik på for at rapportere en fejl her.

42 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort.

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Hugo sagde han

    En anden måde at gøre det uden hvis ... så..else:

    test -f /etc/hosts && elcomando

    Eller også

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

    Etc.

    1.    KZKG ^ Gaara sagde han

      Højre 😀
      … O_O… Er du Hugo, Hugo fra Cuba? ... Brug af Windows8, WTF !!!

      1.    Hugo sagde han

        Nå ja, jeg bliver fortrolig med dette operativsystem, og hvis jeg skal være ærlig, er det eneste, jeg har fundet nyttigt, kopiadministratoren, ellers finder jeg det personligt smertefuldt, især dets hybridgrænseflade og metroapplikationerne. Jeg kan godt lide det mindre end Vista og 7 (omend lidt mere effektivt end disse), som jeg heller ikke kunne lide. Det eneste, jeg bruger det til, er at spille NFS13 og Skyrim, men dette operativsystem tager så meget plads, at jeg var nødt til at slette min Linux-partition [snif].

        For din ro i sindet vil jeg dog fortælle dig, at jeg i forgårs downloadede Arch ISO til januar, og jeg planlægger at give den en lille test i sin x86-64 version, så snart jeg får repoen (vil du har det?). Nu da jeg som standard bruger signerede pakker, giver det mig mere selvtillid til at dykke ind.

        Og min far fortalte mig også, at han ville sende mig en Sony Xperia, som jeg vil drage fordel af for at lære noget programmering til Android, hvilket var et afventende ønske. Så rolig, jeg er endnu ikke gået til den mørke side af styrken, buahahahaha 😉

  2.   patz sagde han

    mand test

    1.    MSX sagde han

      Sure.

  3.   RAW-Basic sagde han

    Wenas! ..

    Vi kunne lave den samme .. ..men biblioteket sendes som en parameter ..

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

    Og vi kalder det som:

    ./test.sh / opt /

    Hilsen..

  4.   Gemme sagde han

    IF er ikke en cyklus xD

  5.   Gregory Swords sagde han

    Det passer mig som en handske til et script, jeg laver. Er det gyldigt at bruge jokertegn? For eksempel for at finde ud af, om der er nogen .mp4s, skal du køre noget på dem.

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

    1.    RAW-Basic sagde han

      Ja, det er helt gyldigt ..

      Selv gennem parametre .. "* .mp4"

      1.    RAW-Basic sagde han

        Fx

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

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

        Hvis den finder .mp4-filer, slettes den .. .. den viser ikke filerne i den mappe ..

        1.    Gregory Swords sagde han

          Tak for feedback og tip! 🙂

        2.    Joaquin sagde han

          Du gik glip af f xD

          rm -rf $ 1

          Dette er mere spændende!

        3.    b1tblu3 sagde han

          Vidunderligt !!!, Hver dag jeg bliver mere forelsket i Linux, er Windows blevet henvist til et mørkt hjørne af min harddisk, som er ved at blive slettet for at vige for Linuxs lys.

          1.    RAW-Basic sagde han

            Fremragende! .. .. Tag derefter det næste skridt .. og få det ud ..

            6 måneder siden ca. Jeg har kun GNU / Linux på alle mine maskiner, og jeg har ikke brug for mere .. ..ikke W $ .. eller Vin .. ..og jeg er mere end glad sådan .. 😉

            Og jeg inficerer mine omgivelser .. da alle ser mig med min Arch, hurtig, effektiv og glad .. ..og de beder mig om at installere Linux .. ..yeah! .. 😀

        4.    Inukaze sagde han

          Du kan også kontrollere dem for forskellige udvidelser, du kan bruge noget lignende

          #! / Bin / bash
          Directory = $ HOME / Downloads

          hvis [$ Directory]; derefter
          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 hjælp af {} kan du angive flere udvidelser i dette tilfælde, brugen af ​​"?" , er et jokertegn, som giver dig mulighed for at tage "Enhver karakter".

          Jeg håber, det hjælper dig

        5.    pedro sagde han

          Jeg anbefaler kommandoen find [directory] [search_pattern] –exec [command] {} \

      2.    Carlos sagde han

        Det virker ikke, jeg lagde disse filer i biblioteket:
        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.TXT]]; derefter
        ekko »Indtast IF, hvis der er nogen AB
        .TXT »
        fi
        hvis [-f AB20160422.TXT]; derefter
        ekko "input til en bestemt AB-fil"
        fi

        da jeg satte [-f AB.TXT] giver fejl
        da jeg satte [[-f AB
        .TXT]] giver ikke en fejl, men kan ikke finde filen
        det fungerer kun, når jeg lægger en bestemt fil, for eksempel:
        hvis [-f AB20160422.TXT]; derefter

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

        1.    pedro sagde han

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

          KONTSTANTER

          EXIT_OK = 0
          EXIT_BAD = 66

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

          hvis [! "$ 1"];
          derefter
          ekko "mangler en parameter"
          afslut $ EXIT_BAD
          fi

          cd "$ 1"

          filer = »ls -h1 $ 1»

          til fil i $ ($ filer); gør
          ekko -e "du kan gøre alt med $ BOLD $ fil $ nc her"
          færdig

          afslut $ EXIT_OK

  6.   MSX sagde han

    @KZ, fortæl mere om dette: "og det er fordi jeg går ind i Pythons vidunderlige verden"!

    1.    KZKG ^ Gaara sagde han

      HAHAHAHA nah ... lidt efter lidt 🙂
      Jeg er stadig bare en nybegynder til Python, jeg har næppe tid til at afsætte timer og timer til det, så jeg er langsom ja, langsom men sikker i min læring

  7.   audoban sagde han

    Mange tak 😀 lige i går tænkte jeg på, hvordan man gør det.

  8.   reichsk sagde han

    dette med ncurses er fantastisk 🙂

  9.   Jazeco sagde han

    med 1 ord ... UDMÆRKET!
    I lang tid perfektionerede jeg et script til at downloade fra Internettet, men jeg havde problemet, at det downloadede de filer, det anmodede om 1 og igen uden at være i stand til at kontrollere eksistensen 1ro.
    Meget god tuto.

  10.   zulan sagde han

    Fantastisk bidrag, her fra Chile er værdsat.
    Hver dag overrasker mere LINUX mig behageligt,
    Længe leve fri software MIERDAAAA.

  11.   david sagde han

    tjene til
    kontrollere, om en fil er fra et bibliotek

  12.   groveher sagde han

    Hvis jeg vil kontrollere eksistensen af ​​en fil i en sti «/ tmp / receivers», skal du udføre en kommando, hvordan ville det være?

    Jeg vil være meget taknemmelig

    hilsen

  13.   John sagde han

    Kære, og for at afgøre, om filen er fuldt udfyldt ???. Jeg spørger dette, for når du udfylder filen til en transmission, kan det tage det selv med halvdelen af ​​dataene.

    Hilsner og tak for dit svar.

  14.   Inukaze sagde han

    Nå, jeg synes, du også skal tilføje et eksempel, såsom "Kontroller, at der ikke er" en "fil" eller "mappe" som for eksempel

    for at kontrollere, at den IKKE findes, brug f.eks. en variabel->

    Et bibliotek

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

    hvis [! -d "$ Directory"]; derefter
    ekko "Der er ingen $ Directory"
    ekko "Oprettelse ->" $ Directory "
    mkdir "$ Directory"
    andet
    ekko "Directory" $ Directory "findes allerede
    fi

    hvis [! -d "$ File"]; derefter
    ekko "Fil $ findes ikke"
    ekko "Oprettelse ->" $ File "
    tryk på "$ File"
    andet
    ekko "File" $ File "findes allerede
    fi

    1.    Katekyo sagde han

      når du gør mkdir, tjek senere, om terminalen kunne oprette det, fordi det kan bryde kuglerne, hvis det er en mappe som root eller system hhah

  15.   Julius vinachi sagde han

    Hilsen KZKG ^ Gaara en forespørgsel, som jeg ville gøre for at bruge krølle. Jeg vil gerne vide, hvordan jeg gør det fra konsollen til at pinge en url for at se, om den f.eks. Er tilgængelig http://portal.com/directorio/archivo1.php Hvor fil1 gemmer besøgets IP'er, er det til overvågning af et team, som jeg har brug for at lave den pin hver halve time, så jeg er opmærksom på den offentlige IP, da den ændrer sig fra tid til anden, og jeg kan ikke oprette forbindelse med ssh.

    Hilsner tak på forhånd Gud velsigne dig.

    1.    KZKG ^ Gaara sagde han

      Hej hvordan går det

      Først skal du sige, at IP-variablen (for eksempel) er indholdet af den fil, for dette skal du:
      1. Download filen
      2. Se dets indhold og få IP derfra
      3. At IP er variablen

      For eksempel:
      Her downloader vi filen - »wget http://portal.com/directorio/archivo1.php -o fil.html
      Derefter tildeler vi en variabel dens indhold: - »: $ {IP: =` cat file.html`}
      .. forudsat at indholdet af den fil kun har IP, hvis ikke, skal du arbejde med grep, awk eller head.

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

      Hvis du vil skrive mig til e-mailen (kzkggaara [at] desdelinux [dot] net), så hjælper jeg dig gerne

      1.    Julius vinachi sagde han

        Mange tak kzkggaara meget taknemmelig.

  16.   Natalia sagde han

    Hej, jeg forstår ikke meget om computing, og jeg ved ikke, om denne post er relateret til det problem, jeg har.

    Jeg kommenterer, hvis du læser mig, selvom indlægget er fra for et år siden:
    Det viser sig, at jeg oprettede en mappe på mit skrivebord til at gemme nogle videoer. Nå, jeg slettede disse videoer, fordi jeg ikke længere havde brug for dem, og nu fortæller denne mappe mig, at den ikke findes (selvom den er synlig på mit skrivebord).

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

    - Andet problem, og jeg synes vigtigere:
    I et forsøg på at slette mappen lagde jeg en FOTOS-mappe. Nu når jeg åbner mappen, der "ikke findes", er den tom, og FOTO'erne er ikke der.

    Hvordan kan jeg gendanne fotos? Jeg har givet muligheden inde i mappen "Vis skjulte dokumenter", men mappen FOTOS vises ikke.

    Jeg håber, du kan vide, hvordan det løses.
    Tak.

    1.    Valdo sagde han

      Der er to brugere, der er de vigtigste: root og din_bruger (fx natalia). De har begge personlige mapper. din_bruger i / hjem og rod i / (rodmappe). Ved at højreklikke på mappen, se hvem den tilhører. Hvis det er rod med din filhåndtering ved hjælp af sudo eller gksu eller kdesu afhængigt af det miljø, du bruger, skal du gå til rodmappen -> rod -> Desktop, og du vil sandsynligvis finde billederne, og du kan slette mappen. Nogle distroer, når du ikke er ejer af filen eller biblioteket, og du ikke har adgangstilladelser, fortæller dig, at kataloget / filen ikke findes. Hvis du er ejer, og du ikke er root, skal du gøre det samme med filhåndteringen med sudo osv. Og gå til rodmappen -> / home -> personal_folder -> Desktop og se om fotos er der, og om du kan slette mappen.
      Hvis dette ikke virker, bliver du nødt til at se andre muligheder fra terminalen (konsol).

  17.   Pedro Manuel Aguayo Munoz sagde han

    Hej, hvordan har du det? Jeg laver et job i bash, og jeg vil gerne vide, hvordan jeg kan kontrollere, om der er et bibliotek indtastet fra tastaturet, for eksempel

    #! / Bin / bash
    læse rute
    #Enter ~ / Desktop
    #Så prøver jeg at navigere i den mappe
    cd $ sti
    # Jeg får følgende bash-besked: cd: ~ / Desktop: Filen eller biblioteket findes ikke

    Mit spørgsmål er, hvad kan jeg gøre, så jeg indtaster det fra tastaturet og tager det som en biblioteksti?

  18.   Miguel sagde han

    Og hvordan kan jeg vide, om der findes en gruppe,

  19.   heidi sagde han

    godt Jeg har et problem i min canaima, når jeg trykker på knappen cunaguaro, der står, at der ikke er nogen fil eller mappe, som det ville gøre for at løse dette problem, og resten åbner ikke cunaguaro tak, tak.

  20.   Carlos sagde han

    Hvordan laver du if i BASH, hvis filnavnet har mellemrum?
    For eksempel:
    April data.xlsx

    At spørge, om filen findes

    1.    Manuel Alcocer Jimenez sagde han

      Carlos, sådan her:

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

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

      En anden mulighed:
      [["$ Variable" == 'Data for April.xlsx']] && echo 'matches' || ekko 'matcher ikke'

      I nogle mørke områder på internettet anbefaler de at bruge [[]] i stedet for [], og hvis du skal sammenligne tal, så: ((variabel> = 3)) && echo 'variabel er større end eller lig med 3' | | ekko 'variabel er mindre end 3'

      Derfor for tal:

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

  21.   Cesar Matheus sagde han

    Hvordan kan du oprette en kode til validering, hvis biblioteket har en bestemt tekst, for at kunne redigere den.

    eksempel:

    hvis (tekst1)

    gøre ingenting

    andet

    skift tekst1 til tekst2

  22.   Miguel sagde han

    et spørgsmål, hvordan ville det være at kontrollere hvert 15. sekund, hvis filen findes eller ikke, tak.

  23.   flodbredden sagde han

    Hej,
    dette:
    hvis [-w / home / Komun / Logs / ti]; derefter
    Find ud af, om filen er skrivbar. Men det er baseret på brugertilladelser. Kan det gøres for at finde ud af, om gruppen eller de andre har tilladelser?