Kontrolu ĉu dosiero aŭ dosierujo ekzistas aŭ ne (kaj pli) kun IF-buklo

Mi metis nenion de Bash, kaj estas ke dum mi eniris la mirindan mondon de Python mi iom forgesis pri ĉi tiu alia amiko, kiu tiom helpis min 🙂

Ĉi tie mi metas ion al entuziasmuloj de Bash, kiel diras la titolo ... Mi montros al vi kiel kontroli ĉu dosiero aŭ dosierujo ekzistas aŭ ne en la sistemo, nur uzante: if

Ni kreos .sh-dosieron kaj donos al ĝi plenumajn permesojn, por tio sufiĉas meti la jenan komandon en terminalon:

tuŝu test.sh && chmod + x test.sh

Jen kion li faris estas krei la dosieron (tuŝotesto.sh) kaj ankaŭ donas al vi ekzekutajn permesojn (chmod + x test.sh)

Tiam ni skribu la jenon en ĝi:

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

Kion signifas ĉi tio?

Simpla 😀

En la unua linio - » se [-d / opt /];

Ĉi tie ni demandas, ĉu la dosierujo / opt ekzistas? Jes dosierujo / dosierujo, ĉar la -d signifas dosierujon aŭ dosierujon.
Tiam se ĝi ekzistos, ni presos en la terminalo «Jes, ĝi ekzistas.»(Ĉi tio estas linio 2 kaj 3)
Alie kaj / opt / NE ekzistas, tiam ni presos «Ne, ĝi ne ekzistas»(Linioj 4 kaj 5)
Tiam en la lasta linio (numero 6) ni fermas la se kaj jen.

Rilata artikolo:
Establi retan konekton inter la komputiloj kaj virtualaj virtualaj maŝinoj

Faru la teston, ĝi montros al vi, ke / opt / ekzistas.

Se vi volas, ke mi montru al vi la alian tekston (tiu kiu ne ekzistas) ŝanĝu / opt / por iu ajn alia dosierujo, kiu ne ekzistas en via sistemo, ekzemple: / asd /

Kiel vi povas vidi, -d helpas nin scii ĉu la dosierujo ekzistas, nu nun se ni ŝanĝas -d al -f estas por kontroli la ekziston de dosieroj (-d = dosierujo, -f = dosiero / dosiero)

Ekzemple:

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

Jen la listo de ebloj:

-d - »Kontrolu ĉu certa adresaro ekzistas

-f - »Kontrolu ĉu certa dosiero ekzistas

-w - »Kontrolu ĉu iu dosiero havas skribpermesojn

-x - »Kontrolu ĉu certa dosiero havas ekzekutajn permesojn.

Kaj nu, ne estas multe pli por aldoni 🙂

Mi scias, ke ĉi tio estos tre utila kaj interesa por tiuj, kiuj ŝatas programi en Bash 😉

salutoj


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

42 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Hugo diris

    Alia maniero fari ĝin sen se ... tiam..else:

    test -f /etc/hosts && elcomando

    Aŭ ankaŭ

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

    Ktp.

    1.    KZKG ^ Gaara diris

      Prave 😀
      ... O_O ... Ĉu vi estas Hugo, Hugo el Kubo? ... Uzante Windows8, WTF !!!

      1.    Hugo diris

        Nu jes, mi konatiĝas kun ĉi tiu OS kaj se mi devas esti sincera, la sola afero, kiun mi trovis utila, estas la kopia administrilo, alie mi persone trovas ĝin malfacila, precipe ĝia hibrida interfaco kaj la metroaj aplikoj. Mi ŝatas ĝin malpli ol la Vista kaj la 7 (kvankam iom pli efika ol ĉi tiuj), kiujn ankaŭ mi ne ŝatis. Mi nur uzas ĝin por ludi NFS13 kaj Skyrim, sed ĉi tiu mastruma sistemo okupas tiom da spaco, ke mi devis forigi mian Linuksan subdiskon [snif].

        Tamen, por via trankvileco, mi diros al vi, ke antaŭhieraŭ mi elŝutis la Arch ISO por januaro kaj mi planas gustumi ĝin per sia x86-64-versio, tuj kiam mi ricevos la repon (ĉu vi havos ĝin?). Nun, kiel mi vidis, ke ĝi uzas subskribitajn pakojn defaŭlte, ĝi donas al mi pli da konfido por plonĝi.

        Kaj mia patro ankaŭ diris al mi, ke li sendos al mi Sony Xperia, kiun mi volas utiligi por lerni iom da programado por Android, kio estis pritraktata deziro. Do trankviliĝu, mi ankoraŭ ne iris al la malluma flanko de la forto, buahahahaha 😉

  2.   patz diris

    homa testo

    1.    MSX diris

      Certe

  3.   RAW-Baza diris

    Wenas! ..

    Ni povus fari la saman .. ..sed la dosierujo estas pasigita kiel parametro ..

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

    Kaj ni nomas ĝin kiel:

    ./test.sh / opt /

    Saluton ..

  4.   savi diris

    SE ne estas ciklo xD

  5.   Gregory Swords diris

    Ĝi konvenas al mi kiel ganto por skripto, kiun mi faras. Ĉu validas uzi ĵokerojn? Ekzemple, por ekscii, ĉu ekzistas .mp4-oj, tiam lanĉu ion sur ilin.

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

    1.    RAW-Baza diris

      Jes, ĝi estas tute valida ..

      Eĉ per parametroj .. "* .mp4"

      1.    RAW-Baza diris

        Ekzemple,

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

        Se vi nomas ĝin: ./test.sh * .mp4

        Se ĝi trovas .mp4-dosierojn, ĝi forigas ilin .. .. sed ĝi ne listigas la dosierojn en tiu dosierujo.

        1.    Gregory Swords diris

          Dankon pro la reagoj kaj konsiloj! 🙂

        2.    Joakimo diris

          Vi maltrafis la f xD

          rm -rf $ 1

          Ĉi tio estas pli ekscita!

        3.    b1tblu3 diris

          Mirinde !!!, Ĉiutage mi enamiĝas pli al Linukso, Vindozo estis forigita al iu malluma angulo de mia Durdisko, kiu estas forviŝota por cedi lokon al la lumo de Linukso.

          1.    RAW-Baza diris

            Bonege! .. .. tiam faru la sekvan paŝon .. kaj eliru ..

            Antaŭ 6 monatoj ĉ. Mi havas nur GNU / Linukso en ĉiuj miaj maŝinoj kaj mi ne bezonas pli .. ..ne W $ .. aŭ Wine .. ..kaj mi estas pli ol feliĉa tiel .. 😉

            Kaj mi infektas mian ĉirkaŭaĵon .. ĉar ili ĉiuj vidas min per mia Arko, rapida, efika kaj feliĉa .. ..kaj ili petas min instali Linukson .. ..jes! .. ..

        4.    Inukaze diris

          Vi ankaŭ povas kontroli ilin pri diversaj etendoj, vi povas uzi ion kiel

          #! / bin / bash
          Adresaro = $ HOME / Elŝutoj

          se [$ Adresaro]; tiam
          echo "Jen Listo de Dosieraj Tipoj:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          uzi {} permesas al vi specifi plurajn etendaĵojn ĉi-kaze, la uzon de "?" , estas ĵokero, kiu permesas al vi preni "Ajna Karaktero".

          Mi esperas, ke ĝi helpos vin

        5.    pedro diris

          Mi rekomendas la komandon find [directory] [search_pattern] –exec [command] {} \

      2.    Carlos diris

        Ĝi ne funkcias, mi metas ĉi tiujn dosierojn en la dosierujon:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        serĉu.sh

        #! / bin / bash
        PATH = / tmp / TEST
        cd $ ITINERO
        ls -la | awk '{presi »« $ 9}'
        se [[-f AB.TXT]]; tiam
        eoo »Enigu la IF se estas AB
        .TXT »
        fi
        se [-f AB20160422.TXT]; tiam
        eoa "enigo por specifa AB-dosiero"
        fi

        kiam mi metas [-f AB.TXT] donas eraron
        kiam mi metas [[-f AB
        .TXT]] ne donas eraron sed ne povas trovi la dosieron
        ĝi funkcias nur kiam mi metas specifan dosieron, ekzemple:
        se [-f AB20160422.TXT]; tiam

        Mi ne povas ekfunkciigi ĝin per ĵokeroj * aŭ?

        1.    pedro diris

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

          KONTESTANTOJ

          EXIT_OK = 0
          EXIT_BAD = 66

          AOLDDACA = »\ 033 [1m»
          NC = »\ 033 [0m»
          RUĜA = »\ 033 [31m»

          se [! "$ 1"];
          tiam
          eoo "parametro mankas"
          eliru $ EXIT_BAD
          fi

          lumdisko "$ 1"

          dosieroj = »ls -h1 $ 1»

          por dosiero en $ ($ dosieroj); faru
          echo -e "vi povas fari ĉion per $ BOLD $ dosiero $ nc ĉi tie"
          farita

          eliru $ EXIT_OK

  6.   MSX diris

    @KZ, diru pli pri ĉi tio: "kaj tio estas ĉar mi eniras la mirindan mondon de Python"!

    1.    KZKG ^ Gaara diris

      HAHAHAHA nah ... iom post iom 🙂
      Mi ankoraŭ estas nur novulo en Python, mi apenaŭ havas tempon dediĉi horojn kaj horojn al ĝi, do mi malrapide jes, malrapide sed certas pri mia lernado 😀

  7.   aŭdoban diris

    Koran dankon 😀 ĵus hieraŭ mi pensis kiel fari ĉi tion.

  8.   reiksk diris

    ĉi tio kun ncurses estas bonega 🙂

  9.   Jazeco diris

    en 1 vorto ... EKSTERA!
    Longe mi perfektigis skripton por elŝuti el interreto, sed mi havis la problemon, ke ĝi elŝutus la dosierojn, kiujn mi petis 1 kaj denove sen povi kontroli la ekziston 1ro.
    Tre bona tuto.

  10.   zulan diris

    Terura kontribuo, ĉi tie el Ĉilio estas dankita.
    Ĉiutage pli da LINUX agrable surprizas min,
    Vivu Libera Programaro MIERDAAAA.

  11.   david diris

    servi por
    kontrolu ĉu dosiero estas el dosierujo

  12.   groveher diris

    Se mi volas kontroli la ekziston de iu dosiero en vojo «/ tmp / receivers», plenumu iun komandon, kiel ĝi estus?

    Mi tre dankos

    salutoj

  13.   Johano diris

    Kara, kaj determini per IF ĉu la dosiero estas plenplena ???. Mi petas ĉi tion, ĉar kiam vi plenigas la dosieron por transdono, ĝi povas preni ĝin eĉ kun duono de la datumoj.

    Saluton kaj dankon pro via respondo.

  14.   Inukaze diris

    Nu, mi pensas, ke vi ankaŭ aldonu ekzemplon, kiel ekzemple "Kontrolu, ke ne ekzistas" a "dosiero" aŭ "dosierujo" kiel ekzemple

    por kontroli, ke ĝi NE ekzistas, ekzemple uzu variablon->

    Dosierujo

    #! / bin / bash
    Adresaro = »$ HOME / Test Directory»
    Dosiero = »$ HOME / Test File»

    se [! -d "$ Dosierujo"]; tiam
    echo "Ne ekzistas $ Dosierujo"
    eoo "Kreante ->" $ Dosierujo "
    mkdir "$ Directory"
    alia
    eoo "Dosierujo" $ Directory "jam ekzistas
    fi

    se [! -d "$ Dosiero"]; tiam
    echo "Dosiero $ ne ekzistas"
    eoo "Kreante ->" $ Dosiero "
    tuŝu "$ Dosiero"
    alia
    echo "Dosiero" $ Dosiero "jam ekzistas
    fi

    1.    Katekyo diris

      kiam vi faras la mkdir-kontrolon poste ĉu la terminalo povus krei ĝin, ĉar ĝi povas rompi la pilkojn se ĝi estas dosierujo kiel radiko aŭ sistemo hhah

  15.   Julius vinachi diris

    Salutojn KZKG ^ Gaara demandon kiel mi farus por uzi buklon. Mi ŝatus scii, kiel mi faras de la konzolo al ping-url por vidi ĉu ĝi disponeblas ekzemple http://portal.com/directorio/archivo1.php Kie dosiero1 konservos la IP-vizitojn, por monitori teamon mi bezonas fari tiun pinglon ĉiun duonhoron, por ke mi sciu pri la publika IP, ĉar ĝi ŝanĝiĝas de tempo al tempo kaj mi ne povas konekti per ssh .

    Salutojn anticipe dankon Dio benu vin.

    1.    KZKG ^ Gaara diris

      Saluton, kiel vi fartas

      Unue, vi devas diri, ke la IP-variablo (ekzemple) estas la enhavo de tiu dosiero, por tio vi devas:
      1. Elŝutu la dosieron
      2. Vidu ĝian enhavon kaj ricevu la IP de tie
      3. Tiu IP estas la variablo

      Ekzemple:
      Ĉi tie ni elŝutas la dosieron - »wget http://portal.com/directorio/archivo1.php -o dosiero.html
      Poste ni atribuas al variablo ĝian enhavon: - »: $ {IP: =` cat file.html`}
      .. supozante, ke la enhavo de tiu dosiero nur havas la IP, se ne, vi devus labori kun grep, awk aŭ head.

      Post kiam vi jam havas la IP kiel variablo, la resto estas la plej simpla afero en la mondo 🙂

      Se vi volas, skribu min al la retpoŝto (kzkggaara [ĉe] desdelinux [punkto] net), ke mi volonte helpos vin

      1.    Julius vinachi diris

        Koran dankon kzkggaara tre dankema.

  16.   natalia diris

    Saluton, mi ne multe komprenas pri komputado kaj mi ne scias, ĉu ĉi tiu eniro rilatas al la problemo, kiun mi havas.

    Mi komentas, se vi legos min, kvankam la afiŝo estas de antaŭ unu jaro:
    Rezultas, ke mi kreis dosierujon sur mia labortablo por stoki iujn filmetojn. Nu, mi forigis tiujn filmetojn, ĉar mi ne plu bezonis ilin kaj nun ĉi tiu dosierujo diras al mi, ke ĝi ne ekzistas (kvankam ĝi estas videbla sur mia labortablo).

    - Jen la unua problemo, kiun mi havas:
    Mi ne povas forigi la dosierujon.

    - Dua problemo kaj mi pensas pli grava:
    Provante forigi la dosierujon, mi metis dosierujon FOTOJ. Nun kiam mi malfermas la dosierujon kiu "ne ekzistas" ĝi estas malplena kaj la FOTOJ ne estas tie.

    Kiel mi povas retrovi la fotojn? Mi donis la opcion ene de la dosierujo "Montri kaŝitajn dokumentojn" sed la dosierujo FOTO ne aperas.

    Mi esperas, ke vi povas scii, kiel ĝi solviĝas.
    Dankon.

    1.    valdo diris

      Estas du uzantoj, kiuj estas la ĉefaj: root kaj via_uzanto (ekzemple natalia). Ili ambaŭ havas personajn dosierujojn. via_uzanto en / hejmo kaj radiko en / (radika dosierujo). Per dekstra klako sur la dosierujo vidi al kiu ĝi apartenas. Se ĝi estas root kun via dosieradministrilo uzante sudo aŭ gksu aŭ kdesu depende de la ĉirkaŭa medio kiun vi uzas iru al la radika dosierujo -> root -> Labortablo kaj vi probable trovos la fotojn kaj vi povas forigi la dosierujon. Iuj distribuoj kiam vi ne estas la posedanto de la dosiero aŭ dosierujo kaj ne havas alirpermesojn diras, ke dosierujo / dosiero ne ekzistas. Se vi estas la posedanto kaj vi ne estas radiko, faru la samon kun la dosieradministrilo kun sudo, ktp kaj iru al la radika dosierujo -> / hejmo -> persona_dosierujo -> Labortablo kaj vidu ĉu la fotoj estas tie kaj ĉu vi povas forigi la dosierujon.
      Se ĉi tio ne funkcias, vi devos vidi aliajn eblojn de la fina stacio (konzolo).

  17.   Pedro Manuel Aguayo Muñoz diris

    Saluton, kiel vi fartas? Mi faras laboron en bash kaj mi ŝatus scii kiel kontroli ĉu estas adresaro enigita de la klavaro, ekzemple

    #! / bin / bash
    legi itineron
    #Enter ~ / Labortablo
    #Tiam mi provas navigi per tiu dosierujo
    cd $ vojo
    # Mi ricevas la jenan bash-mesaĝon: cd: ~ / Labortablo: La dosiero aŭ dosierujo ne ekzistas

    Mia demando estas, kion mi povas fari, por ke mi eniru ĝin de la klavaro kaj prenu ĝin kiel dosierujan vojon?

  18.   Mikaelo diris

    Kaj kiel mi povas scii, ĉu estas grupo,

  19.   heidi diris

    bone mi havas problemon en mia canaima kiam mi premas la butonon cunaguaro ĝi diras ke ne ekzistas dosiero aŭ dosierujo kiel ĝi farus por solvi tiun problemon kaj la resto ne malfermas cunaguaron bonvolu dankon.

  20.   Carlos diris

    Kiel vi faras se en BASH se la dosiernomo havas spacojn?
    Ekzemple:
    April data.xlsx

    Por demandi, ĉu la dosiero ekzistas

    1.    Manuel Alcocer Jimenez diris

      Karlo, kiel ĉi tio:

      se [["$ variablo" == Datumoj \ monato \ de \ Aprilo.xlsx]]; tiam e echu 'kongrui'; fi

      Vi ankaŭ povas:
      if [["$ variablo" == 'Datumoj por la monato aprilo.xlsx']]; tiam e echu 'kongrui'; fi

      Alia eblo:
      [["$ Variable" == 'Datumoj por April.xlsx']] && echo 'matches' || eoo 'ne kongruas'

      Iuj malhelaj areoj de la interreto rekomendas uzi [[]] anstataŭ [], kaj se vi komparas nombrojn tiam: ((variablo> = 3)) && echo 'variablo estas pli granda ol aŭ egala al 3' || eoa 'variablo estas malpli ol 3'

      Tial, por nombroj:

      if ((nombro! = 4)); tiam eoo "$ {number} ne estas 4"; else eoo "$ {number} estas 4"; fi

  21.   Cezaro Mateus diris

    kiel vi povas krei kodon por validigi se la adresaro havas specifan tekston, por povi redakti ĝin.

    ekzemplo:

    se (teksto1)

    fari nenion

    alia

    ŝanĝi tekston1 al teksto2

  22.   Mikaelo diris

    demando, kiel estus kontroli ĉiun 15 sekundojn se la dosiero ekzistas aŭ ne, dankon.

  23.   riverbordo diris

    saluton,
    ĉi tio:
    se [-w / home / Komun / Logs / ti]; tiam
    Eksciu, ĉu la dosiero estas skribebla. Sed ĝi baziĝas sur uzaj permesoj. Ĉu oni povas fari por ekscii, ĉu la grupo aŭ la aliaj havas permesojn?