Праверце, ці існуе файл альбо папка (і больш) з цыклам IF

Я нічога не ставіў Біць, і гэта тое, што, калі я ўваходжу ў дзівосны свет Python, я крыху забыўся пра гэтага іншага сябра, які мне так дапамог 🙂

Тут я паклаў нешта для аматараў Bash, як гаворыцца ў назве ... Я пакажу вам, як праверыць, ці ёсць у сістэме файл ці папка, проста выкарыстоўваючы: if

Мы збіраемся стварыць файл .sh і даць яму дазволы на выкананне, для гэтага дастаткова змясціць наступную каманду ў тэрмінал:

сэнсарны test.sh && chmod + x test.sh

Гэта тое, што ён зрабіў, гэта стварыць файл (сэнсарны тэст.ш), а таксама даць вам дазволы на выкананне (chmod + x test.sh)

Тады давайце напішам у ім наступнае:

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

Што гэта?

Просты 😀

У першым радку - » калі [-d / opt /];

Тут мы пытаемся, ці існуе каталог / opt /? Ды каталог / тэчка, таму што -d азначае каталог альбо тэчку.
Тады, калі яна існуе, мы надрукуем у тэрмінале «Так, яно сапраўды існуе.»(Гэта радкі 2 і 3)
У адваротным выпадку і / opt / НЕ існуе, тады мы надрукуем «Не, гэта не існуе»(Радкі 4 і 5)
Затым у апошнім радку (нумар 6) мы закрываем if і ўсё.

звязаныя артыкулы:
Усталюйце сеткавае злучэнне паміж ПК і віртуальнымі машынамі Virtualbox

Зрабіце тэст, ён пакажа вам, што / opt / сапраўды існуе.

Калі вы хочаце, каб я паказаў вам іншы тэкст (той, які не існуе), зменіце / абярыце / любую іншую тэчку, якая не існуе ў вашай сістэме, напрыклад: / asd /

Як бачыце, -d дапамагае нам даведацца, ці існуе каталог, а цяпер, калі мы зменім -d на -f, гэта праверыць наяўнасць файлаў (-d = каталог, -f = файл / файл)

Напрыклад:

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

Вось спіс варыянтаў:

-d - »Праверце, ці існуе пэўны каталог

-f - »Праверце, ці існуе пэўны файл

-w - »Праверце, ці ёсць у пэўным файле дазволы на запіс

-x - »Праверце, ці ёсць у пэўнага файла дазволы на выкананне.

Ну і няма чаго яшчэ шмат дадаць 🙂

Я ведаю, што гэта будзе вельмі карысна і цікава для тых, хто любіць праграмаваць на Bash 😉

прывітанне


Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

42 каментарыяў, пакіньце свой

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.

  1.   Х'юга сказаў

    Іншы спосаб зрабіць гэта без, калі… тады .. акрамя гэтага:

    test -f /etc/hosts && elcomando

    Ці таксама

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

    І г.д.

    1.    KZKG ^ Гаара сказаў

      Справа 😀
      ... O_O ... Вы Гюго, Уга з Кубы? ... Выкарыстоўваючы Windows8, WTF !!!

      1.    Х'юга сказаў

        Ну так, я знаёмлюся з гэтай АС, і калі мне трэба быць шчырым, адзінае, што мне падалося карысным, гэта дыспетчар капіравання, інакш я асабіста балюча, асабліва яго гібрыдны інтэрфейс і прыкладанні метро. Мне падабаецца менш, чым Vista і 7 (хаця і больш эфектыўныя, чым гэтыя), якія мне таксама не спадабаліся. Усё, для чаго я яго выкарыстоўваю, - гэта гуляць у NFS13 і Skyrim, але гэтая АС займае так шмат месца, што мне прыйшлося выдаліць раздзел Linux [snif].

        Аднак для вашага спакою я скажу вам, што пазаўчора я загрузіў Arch Arch за студзень і планую паспрабаваць яго ў версіі x86-64, як толькі атрымаю рэпа (ці будзе ў вас? Цяпер, калі я бачыў, што па змаўчанні ён выкарыстоўвае падпісаныя пакеты, гэта дае мне больш упэўненасці ў апусканні.

        І мой бацька таксама сказаў мне, што прышле мне Sony Xperia, якой я хачу скарыстацца, каб вывучыць праграмаванне для Android, чаго не чакалі. Так што супакойцеся, я яшчэ не перайшоў на цёмны бок сілы, буахахахаха 😉

  2.   патц сказаў

    тэст на чалавека

    1.    MSX сказаў

      Вядома.

  3.   RAW-Basic сказаў

    Венас! ..

    Мы маглі б зрабіць той самы ... але каталог перадаецца як параметр ..

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

    І мы называем гэта як:

    ./test.sh / opt /

    Прывітанне ..

  4.   саво сказаў

    Калі гэта не цыкл xD

  5.   Грэгарыё Эспадас сказаў

    Мне падыходзіць як пальчатка сцэнарыя, якім я займаюся. Ці правільна выкарыстоўваць падстаноўныя знакі? Напрыклад, каб даведацца, ці ёсць .mp4, запусціце што-небудзь на іх.

    калі [-f * .mp4];
    ...

    1.    RAW-Basic сказаў

      Так, гэта цалкам сапраўдна ..

      Нават праз параметры .. "* .mp4"

      1.    RAW-Basic сказаў

        Напрыклад,

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

        Калі вы называеце гэта: ./test.sh * .mp4

        Калі ён знаходзіць файлы .mp4, ён выдаляе іх ... ... але файлаў у гэтым каталогу няма ў спісе ...

        1.    Грэгарыё Эспадас сказаў

          Дзякуй за водгукі і парады! 🙂

        2.    Хаакін сказаў

          Вы прапусцілі f xD

          rm -rf $ 1

          Гэта больш захапляльна!

        3.    b1tblu3 сказаў

          Цудоўна !!!, з кожным днём я ўсё больш улюбляюся ў Linux, Windows перамяшчаецца ў нейкі цёмны куток майго цвёрдага дыска, які вось-вось будзе сцёрты, каб уступіць свет Linux.

          1.    RAW-Basic сказаў

            Выдатна! .. .. затым зрабіце наступны крок .. і дастаньце ..

            6 месяцаў таму прыблізна У мяне толькі GNU / Linux на ўсіх маіх машынах, і мне не трэба больш .. ..не W $ .. ці Wine .. ..і я больш чым задаволены .. 😉

            І я заражаю наваколле .. бо ўсе бачаць мяне з маім Arch, хуткім, эфектыўным і шчаслівым .. ..і просяць усталяваць Linux .. .. так! .. 😀

        4.    Інукадзэ сказаў

          Вы таксама можаце праверыць іх на наяўнасць розных пашырэнняў, вы можаце выкарыстоўваць нешта накшталт

          #! / Bin / Баш
          Каталог = $ HOME / Загрузкі

          калі [$ Каталог]; потым
          echo "Вось спіс тыпаў файлаў:"
          рэха "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          выкарыстанне {} дазваляе ўказаць некалькі пашырэнняў у гэтым выпадку, выкарыстанне "?" , з'яўляецца падстаноўным знакам, які дазваляе ўзяць "Любы знак".

          Спадзяюся, гэта вам дапаможа

        5.    Пэдра сказаў

          Я рэкамендую каманду знайсці [каталог] [шаблон_пашукі] –exec [каманда] {} \

      2.    Карлас сказаў

        Гэта не працуе, я змяшчаю гэтыя файлы ў каталог:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / Bin / Баш
        ШЛЯХ = / tmp / TEST
        CD $ МАРШРУТ
        ls -la | awk '{раздрукаваць »« $ 9} »
        калі [[-f AB.TXT]]; потым
        echo »Калі ласка, увядзіце IF, калі ёсць AB
        .TXT »
        fi
        калі [-f AB20160422.TXT]; потым
        echo "увод для пэўнага файла AB"
        fi

        калі я стаўлю [-f AB.TXT] дае памылку
        калі я стаўлю [[-f AB
        .TXT]] не дае памылкі, але не можа знайсці файл
        гэта працуе толькі тады, калі я стаўлю пэўны файл, напрыклад:
        калі [-f AB20160422.TXT]; потым

        Я не магу прымусіць яго працаваць з заменамі * ці?

        1.    Пэдра сказаў

          #! / usr / bin / env bash
          #.кадаванне = utf-8.

          КАНСТАНТЫ

          EXIT_OK = 0
          EXIT_BAD = 66

          ШРЫСТКІ = »\ 033 [1м»
          NC = »\ 033 [0 м»
          ЧЫРВОНЫ = »\ 033 [31м»

          калі [! "$ 1"];
          затым
          echo "адсутнічае параметр"
          выхад $ ​​EXIT_BAD
          fi

          CD "$ 1"

          файлы = »ls -h1 $ 1»

          для файла ў $ ($ files); рабіць
          echo -e "тут вы можаце зрабіць што-небудзь з $ BOLD $ file $ nc"
          зроблены

          выйдзіце $ EXIT_OK

  6.   MSX сказаў

    @KZ, раскажы пра гэта больш: "і гэта таму, што я ўваходжу ў дзівосны свет Python"!

    1.    KZKG ^ Гаара сказаў

      ХАХАХАХА, не ... патроху 🙂
      Я ўсё яшчэ проста пачатковец у Python, наўрад ці ў мяне ёсць час, каб прысвяціць яму гадзіны і гадзіны, таму я павольны, павольны, але ўпэўнены ў сваім навучанні 😀

  7.   Аўдабан сказаў

    Вялікі дзякуй 😀 учора я думаў, як гэта зрабіць.

  8.   РэйхСк сказаў

    гэта з ncurses выдатна 🙂

  9.   язэка сказаў

    адным словам ... ЦУРНА!
    Доўгі час я ўдасканальваў сцэнар для загрузкі з Інтэрнэту, але ў мяне была праблема, што ён загружаў файлы, якія ён запытваў 1, і зноў, не маючы магчымасці праверыць існаванне 1ro.
    Вельмі добрае Tuto.

  10.   зулан сказаў

    Велізарны ўклад, тут з Чылі высока ацэнены.
    Кожны дзень усё больш LINUX мяне прыемна здзіўляе,
    Няхай жыве Вольнае праграмнае забеспячэнне MIERDAAAA.

  11.   Дэвід сказаў

    служыць для
    праверыць, ці файл з каталога

  12.   Гроўхер сказаў

    Калі я хачу праверыць наяўнасць любога файла ў шляху «/ tmp / прымачы», выканайце любую каманду, як гэта можа быць?

    Буду вельмі ўдзячны

    прывітанне

  13.   Джон сказаў

    Паважаны, і каб вызначыць IF, ці цалкам файл запоўнены ???. Я пытаюся пра гэта, таму што калі вы запаўняеце файл для перадачы, ён можа прыняць яго нават з паловай дадзеных.

    Прывітанне і дзякуй за адказ.

  14.   Інукадзэ сказаў

    Ну, я думаю, вам варта дадаць прыклад, напрыклад, "Праверце, ці няма" "файла" ці "каталога", як напрыклад

    каб праверыць, ці не існуе, напрыклад, выкарыстоўвайце зменную->

    Каталог

    #! / Bin / Баш
    Каталог = »$ HOME / Каталог тэстаў»
    Файл = »$ HOME / Тэставы файл»

    калі [! -d "$ Каталог"]; тады
    рэха "Няма $ каталога"
    рэха "Стварэнне ->" $ Каталог "
    mkdir "Каталог $"
    яшчэ
    echo "Каталог" $ Каталог "ужо існуе
    fi

    калі [! -d "$ Файл"]; тады
    рэха "Файл $ няма"
    рэха "Стварэнне ->" Файл $ "
    націсніце "$ File"
    яшчэ
    echo "Файл" $ File "ужо існуе
    fi

    1.    Катэкё сказаў

      калі вы робіце mkdir праверыць пазней, ці зможа тэрмінал стварыць яго, таму што ён можа разбіць шарыкі, калі гэта тэчка як каранёвая альбо сістэмная hhah

  15.   Хуліё Віначы сказаў

    Прывітанне KZKG ^ Gaara запыт, як я мог бы зрабіць, каб выкарыстоўваць завітак. Я хацеў бы ведаць, як я раблю з кансолі пінг-адрасу, каб даведацца, ці даступная яна, напрыклад http://portal.com/directorio/archivo1.php Там, дзе file1 будзе захоўваць IP-адрасы візітаў, для кантролю за камандай мне трэба рабіць гэту шпільку кожныя паўгадзіны, каб я быў у курсе агульнадаступнага IP, бо час ад часу ён мяняецца, і я не магу падключыцца праз ssh.

    Вітаю вас загадзя дзякуй Бог дабраславіць вас.

    1.    KZKG ^ Гаара сказаў

      Добры дзень, такія,

      Па-першае, вы павінны сказаць, што зменная IP (напрыклад) з'яўляецца зместам гэтага файла, для гэтага вам трэба:
      1. Загрузіце файл
      2. Прагледзець яго змест і атрымаць IP адтуль
      3. Гэта IP з'яўляецца зменнай

      Напрыклад:
      Тут мы загружаем файл - »wget http://portal.com/directorio/archivo1.php -o файл.html
      Затым мы прыпісваем яе змест зменнай: - »: $ {IP: =` cat file.html`}
      .. мяркуючы, што змест гэтага файла мае толькі IP, калі няма, вам прыйдзецца працаваць з grep, awk ці head.

      Пасля таго, як у вас ужо ёсць IP у якасці зменнай, астатняе - самая простая рэч у свеце world

      Калі вы хочаце, напішыце мне на электронны ліст (kzkggaara [at] desdelinux [dot] net), што я з радасцю вам дапамагу

      1.    Хуліё Віначы сказаў

        Вялікі дзякуй kzkggaara вельмі ўдзячны.

  16.   Наталля сказаў

    Прывітанне, я мала што разумею ў вылічэннях, і не ведаю, ці звязаны гэты пост з маёй праблемай.

    Я каментую, калі вы мяне прачытаеце, нягледзячы на ​​тое, што паведамленне было год таму:
    Аказваецца, я стварыў на працоўным стале тэчку для захоўвання некалькіх відэа. Ну, я выдаліў гэтыя відэа, таму што яны мне больш не патрэбныя, і цяпер гэтая тэчка кажа мне, што яна не існуе (хаця яна бачная на маім працоўным стале).

    - Гэта першая праблема ў мяне:
    Я не магу выдаліць тэчку.

    - Другая праблема, і я лічу больш важнай:
    У спробе выдаліць тэчку я паставіў тэчку ФОТА. Цяпер, калі я адкрываю папку, якая "не існуе", яна пустая, і ФОТА няма.

    Як я магу аднавіць фатаграфіі? Я даў магчымасць у тэчцы "Паказаць схаваныя дакументы", але тэчка ФОТА не з'яўляецца.

    Спадзяюся, вы можаце ведаць, як гэта вырашаецца.
    Дзякуй.

    1.    Валдо сказаў

      Ёсць два галоўныя карыстальнікі: root і your_user (напрыклад, Natalia). У іх абодвух ёсць асабістыя папкі. your_user у / home і root у / (каранёвы каталог). Пстрыкнуўшы правай кнопкай мышы на тэчцы, вы ўбачыце, каму яна належыць. Калі ў вашым файлавым мэнэджары гэта root, выкарыстоўваючы sudo, gksu або kdesu, у залежнасці ад асяроддзя, якое вы выкарыстоўваеце, перайдзіце ў каранёвы каталог -> root -> Desktop, і вы, верагодна, знойдзеце фатаграфіі і зможаце выдаліць тэчку. Некаторыя дыстрыбутывы, калі вы не з'яўляецеся уладальнікам файла ці каталога і ў вас няма правоў доступу, паведамляюць, што каталог / файл не існуе. Калі вы з'яўляецеся ўладальнікам, і вы не з'яўляецеся адміністратарам root, зрабіце тое ж самае з дыспетчарам файлаў з sudo і г.д. і перайдзіце ў каранёвую дырэкторыю -> / home -> personal_folder -> Desktop і паглядзіце, ці ёсць фатаграфіі і ці можна іх выдаліць тэчку.
      Калі гэта не працуе, вам давядзецца ўбачыць іншыя параметры з тэрмінала (кансолі).

  17.   Пэдра Мануэль Агуаё Муньёс сказаў

    Прывітанне, як справы? Я раблю працу ў bash, і я хацеў бы ведаць, як праверыць, ці ёсць каталог, уведзены з клавіятуры, напрыклад

    #! / Bin / Баш
    прачытаць маршрут
    # Увайсці ~ / Працоўны стол
    # Тады я спрабую арыентавацца ў гэтым каталогу
    cd $ шлях
    # Я атрымліваю наступнае паведамленне bash: cd: ~ / Desktop: Файл ці каталог не існуе

    Маё пытанне ў тым, што я магу зрабіць, каб я ўвёў яго з клавіятуры і прыняў як шлях да каталога?

  18.   Мігель сказаў

    І як я магу ведаць, ці існуе група,

  19.   хайды сказаў

    добра У мяне ўзнікае праблема ў канаме, калі я націскаю кнопку cunaguaro, там напісана, што няма файла ці каталога, як гэта было б зроблена для вырашэння гэтай праблемы, а астатняе не адкрывае cunaguaro, калі ласка, дзякуй.

  20.   Карлас сказаў

    Як вы робіце if у BASH, калі ў назве файла ёсць прабелы?
    Напрыклад:
    Красавіцкія дадзеныя.xlsx

    Спытаць, ці існуе файл

    1.    Мануэль Алькасер Хіменэс сказаў

      Карлас, вось так:

      калі [["$ зменная" == дадзеныя \ месяц \ з \ красавіка.xlsx]]; затым рэха "супадзенне"; fi

      Вы таксама можаце:
      if [["$ variable" == 'Дадзеныя за красавік.xlsx']]; затым рэха "супадзенне"; fi

      Іншы варыянт:
      [["" $ Variable "== 'Дадзеныя за красавік.xlsx']] && echo 'супадае' || рэха "не супадае"

      У некаторых цёмных раёнах Інтэрнэту яны рэкамендуюць выкарыстоўваць [[]] замест [], і калі вы збіраецеся параўноўваць лічбы, то: ((зменная> = 3)) && echo 'зменная большая або роўная 3' | | эхо 'зменная менш за 3'

      Такім чынам, для лічбаў:

      if ((лік! = 4)); тады рэха "$ {лік} не 4"; інакш рэха "$ {лік} роўна 4"; fi

  21.   Цэзар Мацей сказаў

    як вы можаце зрабіць код для праверкі, калі каталог мае пэўны тэкст, каб мець магчымасць яго рэдагаваць.

    Прыклад:

    калі (text1)

    нічога не рабіць

    яшчэ

    змяніць text1 на text2

  22.   Мігель сказаў

    пытанне, як было б правяраць кожныя 15 секунд, калі файл існуе ці не, дзякуй.

  23.   бераг ракі сказаў

    Добры дзень,
    гэта:
    if [-w / home / Komun / Logs / ti]; тады
    Даведайцеся, ці можна запісваць файл. Але гэта заснавана на дазволах карыстальніка. Ці можна гэта зрабіць, каб даведацца, ці ёсць у групы ці ў астатніх дазволы?