Kyk of daar 'n lêer of 'n lêergids bestaan ​​(al dan nie) met IF-lus

Ek het niks van geplaas nie Bash, en dit is dat ek 'n bietjie vergeet het van hierdie ander vriend wat my so baie gehelp het toe ek die wonderlike wêreld van Python betree.

Hier sit ek iets aan die Bash-entoesiaste, soos die titel sê ... Ek sal jou wys hoe om te kyk of daar 'n lêer of 'n vouer in die stelsel is, net deur gebruik te maak van: if

Ons gaan 'n .sh-lêer skep en toestemmings daarvoor gee, hiervoor moet u die volgende opdrag in 'n terminale plaas:

raak toets.sh && chmod + x toets.sh

Wat dit gedoen het, is om die lêer te skep (raaktoets.sh) en gee u ook toestemming vir uitvoering (chmod + x toets.sh)

Laat ons dan die volgende daarin skryf:

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

Wat doen dit?

Eenvoudig 😀

In die eerste reël - » as [-d / opt /];

Hier vra ons, bestaan ​​die / opt / directory? Ja gids / vouer, want die -d beteken gids of vouer.
As dit bestaan, druk ons ​​dan in die terminale «Ja, dit bestaan ​​wel.»(Dit is reël 2 en 3)
Anders en / opt / bestaan ​​NIE, dan druk ons ​​«Nee dit bestaan ​​nie»(Reëls 4 en 5)
Dan in die laaste reël (nommer 6) sluit ons die if en dit is dit.

Verwante artikel:
Maak netwerkverbinding tussen die rekenaar- en Virtualbox-virtuele masjiene

Doen die toets, dit sal u wys dat / opt / bestaan.

As u wil hê dat ek die ander teks (die een wat nie bestaan ​​nie) vir u moet wysig / kies / kies vir enige ander vouer wat nie in u stelsel bestaan ​​nie, byvoorbeeld: / asd /

Soos u kan sien, help -d ons om te weet of die gids bestaan, nou as ons -d verander na -f, is dit om die bestaan ​​van lêers na te gaan (-d = gids, -f = lêer / lêer)

Byvoorbeeld:

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

Hier is 'n lys opsies:

-d - »Kyk of daar 'n sekere gids bestaan

-f - »Kyk of daar 'n sekere lêer bestaan

-w - »Kyk of 'n sekere lêer skryftoestemmings het

-x - »Kyk of 'n sekere lêer toestemming het vir uitvoering.

En daar is nie veel meer om by te voeg nie

Ek weet dit sal baie nuttig en interessant wees vir diegene wat graag in Bash wil programmeer

Groete


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

42 kommentaar, los joune

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.

  1.   Hugo dijo

    Nog 'n manier om dit te doen sonder as ... dan ...

    test -f /etc/hosts && elcomando

    Of ook

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

    Ensovoorts

    1.    KZKG ^ Gaara dijo

      Reg 😀
      ... O_O ... Is jy Hugo, Hugo van Kuba? ... Gebruik Windows8, WTF !!!

      1.    Hugo dijo

        Nou ja, ek raak vertroud met hierdie bedryfstelsel en as ek eerlik moet wees, is die enigste ding wat ek nuttig gevind het, die kopiebestuurder, anders vind ek dit persoonlik 'n pyn, veral die hibriede koppelvlak en die metro-toepassings. Ek hou daarvan minder as die Vista en die 7 (alhoewel 'n bietjie doeltreffender as hierdie), waarvan ek ook nie hou nie. Al waarvoor ek dit gebruik, is om NFS13 en Skyrim te speel, maar hierdie bedryfstelsel neem soveel ruimte in dat ek my Linux-partisie [snif] moes verwyder.

        Vir u gemoedsrus sal ek egter noem dat ek eergister die Arch ISO vir Januarie afgelaai het en ek van plan is om dit 'n voorsmakie te gee in sy x86-64 weergawe sodra ek die repo kry (sal u dit hê?). Noudat ek standaard gesien het dat dit ondertekende pakkette gebruik, gee dit my meer vertroue om in te duik.

        En my pa het my ook vertel dat hy vir my 'n Sony Xperia sal stuur, wat ek wil benut om 'n bietjie programmering vir Android aan te leer, wat 'n hangende wens was. So bedaar, ek het nog nie na die donker kant van die mag gegaan nie, buahahahaha 😉

  2.   patz dijo

    man toets

    1.    msx dijo

      Seker nie.

  3.   RAW-Basies dijo

    Wenas! ..

    Ons kan dieselfde maak .. ..maar die gids word as parameter geslaag ..

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

    En ons noem dit as:

    ./toets.sh / opt /

    Groetnis ..

  4.   red dijo

    IF is nie 'n siklus xD nie

  5.   Gregory Swaarde dijo

    Dit pas my soos 'n handskoen vir 'n teks wat ek doen. Is dit geldig om wildcards te gebruik? Om byvoorbeeld uit te vind of daar .mp4's is, voer dan iets daarop uit.

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

    1.    RAW-Basies dijo

      Ja, dit is heeltemal geldig ..

      Selfs deur parameters .. "* .mp4"

      1.    RAW-Basies dijo

        Bv.

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

        As u dit noem: ./test.sh * .mp4

        As dit .mp4-lêers vind, word dit verwyder .. ..dit is nie 'n lys van die lêers in daardie gids nie.

        1.    Gregory Swaarde dijo

          Dankie vir die terugvoer en wenke! 🙂

        2.    Joaquin dijo

          Jy het die f xD gemis

          rm -rf $ 1

          Dit is meer opwindend!

        3.    b1tblu3 dijo

          Wonderlik !!!, Windows word elke dag verlief geraak op Linux, of die een of ander donker hoekie van my hardeskyf, wat op die punt staan ​​om uitgewis te word vir die lig van Linux.

          1.    RAW-Basies dijo

            Uitstekend! .. .. neem dan die volgende stap .. en haal dit uit ..

            6 maande gelede ongeveer Ek het net GNU / Linux op al my masjiene en ek het nie meer nodig nie .. ..nie W $ .. of Wyn nie .. ..en so is ek meer as gelukkig .. 😉

            En ek besmet my omgewing .. aangesien almal my met my Arch sien, vinnig, doeltreffend en gelukkig .. en hulle vra my om Linux te installeer .. .. ja! .. 😀

        4.    Inukaze dijo

          U kan ook kyk na verskillende uitbreidings, u kan iets soos

          #! / bin / bash
          Gids = $ HOME / Downloads

          as [$ Directory]; dan
          eggo "Hier is 'n lys met lêertipes:"
          eggo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          met behulp van {} kan u in hierdie geval meerdere uitbreidings spesifiseer, die gebruik van "?" , is 'n wildcard waarmee u "Enige karakter" kan neem.

          Ek hoop dit help jou

        5.    pedro dijo

          Ek beveel die opdrag find [directory] [search_pattern] –exec [command] {} \ aan

      2.    Carlos dijo

        Dit werk nie, ek plaas hierdie lêers in die gids:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        soek.sh

        #! / bin / bash
        PAD = / tmp / TEST
        cd $ ROETE
        ls -la | awk '{druk »« $ 9}'
        as [[-f AB.TXT]]; dan
        eggo »Voer die IF in indien daar AB is
        .TXT »
        fi
        as [-f AB20160422.TXT]; dan
        eggo "invoer vir 'n spesifieke AB-lêer"
        fi

        toe ek [-f AB.TXT] gee fout
        toe ek [[-f AB
        .TXT]] gee geen fout nie, maar kan die lêer nie vind nie
        dit werk net as ek 'n spesifieke lêer plaas, byvoorbeeld:
        as [-f AB20160422.TXT]; dan

        Ek kry dit nie om met wildcards * te werk nie, of?

        1.    pedro dijo

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

          KONSTANTE

          EXIT_OK = 0
          EXIT_BAD = 66

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

          as [! "$ 1"];
          dan
          eggo "ontbreek 'n parameter"
          verlaat $ EXIT_BAD
          fi

          cd "$ 1"

          lêers = »ls -h1 $ 1»

          vir lêer in $ ($ lêers); doen
          eggo -e "u kan alles met $ BOLD $ lêer $ nc hier doen"
          gedoen

          verlaat $ EXIT_OK

  6.   msx dijo

    @KZ, vertel meer hieroor: "en dit is omdat ek die wonderlike wêreld van Python betree"!

    1.    KZKG ^ Gaara dijo

      HAHAHAHA nah ... bietjie vir bietjie 🙂
      Ek is nog net 'n beginner in Python, ek het skaars tyd om ure en ure daaraan te wy, so ek is stadig, ja, stadig maar seker in my leer 😀

  7.   audoban dijo

    Baie dankie 😀 net gister het ek gedink hoe om dit te doen.

  8.   RykSk dijo

    dit met ncurses is wonderlik 🙂

  9.   Jazeco dijo

    in 1 woord ... UITSTEKEND!
    Ek het lank 'n script vervolmaak om downloads van die internet af te maak, maar ek het die probleem gehad dat dit die lêers wat dit 1 aangevra het, weer en weer afgelaai het sonder om die bestaan ​​1ro te kon bevestig.
    Baie goeie tuto.

  10.   zoelaan dijo

    Geweldige bydrae, hier uit Chili, word waardeer.
    Elke dag verras nog LINUX my aangenaam,
    Lank lewe Gratis sagteware MIERDAAAA.

  11.   david dijo

    bedien vir
    kyk of 'n lêer uit 'n gids kom

  12.   groeher dijo

    As ek 'n lêer in 'n pad «/ tmp / ontvangers» wil nagaan, voer 'n opdrag uit, hoe sou dit wees?

    Ek sal baie dankbaar wees

    Groete

  13.   John dijo

    Beste, en om vas te stel of die lêer volledig bevolk is ???. Ek vra dit, want as u die lêer invul vir 'n versending, kan dit selfs met die helfte van die data verg.

    Groete en dankie vir u reaksie.

  14.   Inukaze dijo

    Wel, ek dink jy moet ook 'n voorbeeld byvoeg, soos 'Kontroleer of daar geen' lêer 'of' gids 'is nie, soos byvoorbeeld

    om te kontroleer of dit NIE bestaan ​​nie, gebruik byvoorbeeld 'n veranderlike->

    'N Gids

    #! / bin / bash
    Gids = »$ HOME / Toetsgids»
    Lêer = »$ HOME / Toetslêer»

    as [! -d "$ Directory"]; dan
    eggo "Daar is geen $ Directory"
    eggo "Maak ->" $ Directory "
    mkdir "$ Directory"
    anders
    eggo "Gids" $ Directory "bestaan ​​reeds
    fi

    as [! -d "$ File"]; dan
    eggo "Lêer $ bestaan ​​nie"
    eggo "Maak ->" $ File "
    raak "$ File"
    anders
    eggo "File" $ File "bestaan ​​reeds
    fi

    1.    Katekyo dijo

      as u die mkdir later doen, kyk of die terminale dit kan skep, want dit kan die balle breek as dit 'n map is as root of stelsel

  15.   Julius vinachi dijo

    Groete KZKG ^ Gaara 'n navraag soos ek sou doen om krul te gebruik. Ek wil graag weet hoe ek van die konsole tot die ping van 'n url vaar om te sien of dit byvoorbeeld beskikbaar is http://portal.com/directorio/archivo1.php Waar lêer 1 die besoeke-IP's sal stoor, is dit vir die monitering van 'n span wat ek elke halfuur moet maak sodat ek bewus is van die openbare IP, aangesien dit van tyd tot tyd verander en ek nie met ssh kan skakel nie .

    Groete by voorbaat dankie God seën u.

    1.    KZKG ^ Gaara dijo

      Hoi hoe gaan dit

      Eerstens moet u sê dat die IP-veranderlike (byvoorbeeld) die inhoud van die lêer is, hiervoor moet u:
      1. Laai die lêer af
      2. Kyk na die inhoud daarvan en kry die IP daarvandaan
      3. Dat IP die veranderlike is

      Byvoorbeeld:
      Hier laai ons die lêer af - »wget http://portal.com/directorio/archivo1.php -o lêer.html
      Dan ken ons die inhoud aan 'n veranderlike toe: - »: $ {IP: =` cat file.html`}
      .. as jy aanneem dat die inhoud van die lêer slegs die IP het, indien nie, sal jy met grep, awk of head moet werk.

      Sodra u reeds die IP as veranderlike het, is die res die eenvoudigste ding in die wêreld 🙂

      As u my wil skryf, stuur dit na die e-pos (kzkggaara [at] desdelinux [dot] net) dat ek u graag sal help

      1.    Julius vinachi dijo

        Baie dankie kzkggaara baie dankbaar.

  16.   Natalia dijo

    Hallo, ek verstaan ​​nie veel van rekenaar nie en ek weet nie of hierdie berig verband hou met die probleem wat ek het nie.

    Ek lewer 'n opmerking as u my sou lees, al is die berig van 'n jaar gelede:
    Dit blyk dat ek 'n vouer op my lessenaar geskep het om 'n paar video's te stoor. Wel, ek het daardie video's uitgevee omdat ek dit nie meer nodig gehad het nie en nou sê hierdie gids my dat dit nie bestaan ​​nie (alhoewel dit op my lessenaar sigbaar is).

    - Dit is die eerste probleem wat ek het:
    Ek kan nie die vouer uitvee nie.

    - Tweede probleem en ek dink belangriker:
    In 'n poging om die vouer te verwyder, sit ek 'n FOTO-vouer. As ek nou die vouer oopmaak wat "bestaan ​​nie" is dit leeg en is die FOTO's nie daar nie.

    Hoe kan ek die foto's herstel? Ek het die opsie gegee in die "Verberg dokumente" -map, maar die FOTO-lêergids verskyn nie.

    Ek hoop dat u kan weet hoe dit opgelos word.
    Dankie.

    1.    Valdo dijo

      Daar is twee gebruikers wat die belangrikste is: root en jou_gebruiker (byvoorbeeld natalia). Hulle het albei persoonlike vouers. u_gebruiker in / home en root in / (root-gids). Deur regs op die lêergids te klik, kyk na wie dit behoort. As dit lêerbestuurder met sudo of gksu of kdesu gebruik, afhangende van die omgewing wat u gebruik, gaan na die hoofmap -> root -> Desktop en u sal waarskynlik die foto's vind en u kan die vouer verwyder. Sommige distros as u nie die eienaar van die lêer of gids is nie en u nie toegangsregte het nie, sê dat die gids / lêer nie bestaan ​​nie. As u die eienaar is en nie root nie, doen dieselfde met die lêerbestuurder met sudo, ens. En gaan na die hoofmap -> / home -> personal_folder -> Desktop en kyk of die foto's daar is en of u die map kan verwyder.
      As dit nie werk nie, moet u ander opsies vanaf die terminale (konsole) sien.

  17.   Pedro Manuel Aguayo Munoz dijo

    Hallo, hoe gaan dit? Ek doen 'n werk in bash en wil graag weet hoe om te verifieer of daar byvoorbeeld 'n gids vanaf die sleutelbord ingevoer is

    #! / bin / bash
    lees roete
    # Enter ~ / Desktop
    # Dan probeer ek deur die gids navigeer
    cd $ pad
    # Ek kry die volgende bash-boodskap: cd: ~ / Desktop: Die lêer of gids bestaan ​​nie

    My vraag is, wat kan ek doen om dit vanaf die sleutelbord in te voer en as 'n gidspad te gebruik?

  18.   Miguel dijo

    En hoe weet ek of daar 'n groep bestaan,

  19.   heidi dijo

    goed ek het 'n probleem in my canaima as ek op die knoppie cunaguaro druk, staan ​​daar dat daar geen lêer of 'n gids is nie, want dit sou doen om die probleem op te los, en die res maak nie cunaguaro oop nie, dankie tog.

  20.   Carlos dijo

    Hoe doen u die if in BASH as die lêernaam spasies het?
    Byvoorbeeld:
    April data.xlsx

    Om te vra of die lêer bestaan

    1.    Manuel Alcocer Jimenez dijo

      Carlos, soos hierdie:

      as [["$ veranderlike" == Data \ maand \ van \ April.xlsx]]; eggo dan 'match'; fi

      U kan ook:
      as [["$ variable" == 'Data vir die maand April.xlsx']]; eggo dan 'match'; fi

      Nog 'n opsie:
      [["$ Variable" == 'Data vir April.xlsx']] && eggo 'matches' || eggo 'stem nie ooreen nie'

      In sommige donker dele van die internet beveel hulle aan om [[]] in plaas van [] te gebruik, en as u getalle gaan vergelyk, is: ((veranderlik> = 3)) && echo 'veranderlik groter as of gelyk aan 3' || eggo 'veranderlike is minder as 3'

      Daarom, vir getalle:

      as ((getal! = 4)); eggo "$ {number} is nie 4 nie"; anders eggo "$ {number} is 4"; fi

  21.   Cesar Matheus dijo

    Hoe kan u 'n kode maak om te valideer as die gids 'n spesifieke teks het, om dit te kan redigeer?

    byvoorbeeld:

    as (teks1)

    doen niks

    anders

    verander teks1 na teks2

  22.   Miguel dijo

    'n vraag, hoe sou dit wees om elke 15 sekondes na te gaan of die lêer bestaan ​​of nie, dankie.

  23.   rivier oewer dijo

    Hallo,
    dit:
    as [-w / huis / Komun / Logs / ti]; dan
    Vind uit of die lêer skryfbaar is. Maar dit is gebaseer op gebruikerstoestemmings. Kan dit gedoen word om uit te vind of die groep of die ander toestemming het?