Проверете дали има датотека или папка или не (и повеќе) со IF јамка

Јас не сум ставил ништо од Баш, и тоа е дека додека влегувам во прекрасниот свет на Пајтон, малку заборавив на овој друг пријател кој толку многу ми помогна

Тука ставам нешто за enthusубителите на Баш, како што вели насловот ... showе ви покажам како да проверите дали има датотека или папка во системот, само користејќи: if

Toе создадеме датотека .sh и ќе и дадеме дозволи за извршување, за ова, само ставете ја следнава команда во терминал:

тест на допир.sh && chmod + x тест.sh

Она што го стори ова е да ја креира датотеката (тест на допир.ш) и исто така ви даваме дозволи за извршување (тест chmod + x.sh)

Потоа, да го напишеме следново во него:

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

Што прави ова?

Едноставно

Во првата линија - » ако [-d / opt /];

Тука прашуваме, дали директориумот / opt / постои? Да директориум / папка, бидејќи -d значи директориум или папка.
Потоа, ако постои, ќе печатиме во терминалот «Да, тоа постои.»(Ова е линија 2 и 3)
Инаку и / опти / не постои, тогаш ќе отпечатиме «Не, не постои»(Линии 4 и 5)
Потоа во последната линија (број 6) го затвораме ако и тоа е тоа.

Поврзана статија:
Воспоставете мрежна врска помеѓу компјутерот и виртуелните машини 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 - »Проверете дали одредена датотека има дозволи за извршување.

И, нема уште многу што да се додаде

Знам дека ова ќе биде многу корисно и интересно за оние кои сакаат да програмираат на Баш

Со почит


Содржината на статијата се придржува до нашите принципи на уредничка етика. За да пријавите грешка, кликнете овде.

42 коментари, оставете ги вашите

Оставете го вашиот коментар

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени со *

*

*

  1. Одговорен за податоците: Мигел Анхел Гатон
  2. Цел на податоците: Контролирајте СПАМ, управување со коментари.
  3. Легитимација: Ваша согласност
  4. Комуникација на податоците: Податоците нема да бидат соопштени на трети лица освен со законска обврска.
  5. Складирање на податоци: База на податоци хостирани од Occentus Networks (ЕУ)
  6. Права: Во секое време можете да ги ограничите, вратите и избришете вашите информации.

  1.   Хуго dijo

    Друг начин да го направите тоа без ако ... тогаш .. друго:

    test -f /etc/hosts && elcomando

    Или исто така

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

    Итн

    1.    КЗКГ ^ Гаара dijo

      Десно
      … О_О… Дали си Уго, Уго од Куба? … Користење на Windows8, WTF !!!

      1.    Хуго dijo

        Па, да, се запознавам со овој оперативен систем и ако треба да бидам искрен, единственото нешто што ми беше корисно е управувачот со копирање, инаку јас лично го сметам за штетник, особено неговиот хибриден интерфејс и апликациите за метро. Ми се допаѓа помалку од Виста и 7-ка (макар и малку поефикасна од овие), што не ми се допадна ниту мене. Сè што го користам е да играм NFS13 и Skyrim, но овој ОС ми зафаќа толку многу простор што морав да ја избришам партицијата за Linux [snif].

        Како и да е, за ваш мир, ќе ви кажам дека завчера го симнав Arch ISO за јануари и планирам да му дадам вкус во неговата верзија x86-64, веднаш штом ќе го добијам репо (ќе го имате?) Сега, како што видов дека користи потпишани пакети по дифолт, тоа ми дава поголема самодоверба да нуркам.

        И татко ми исто така ми рече дека ќе ми испрати Sony Xperia, што сакам да го искористам за да научам програмирање за Android, што беше желба за очекување. Па смири се, сè уште не сум отишол до темната страна на силата, буахахахаха

  2.   пац dijo

    тест за човек

    1.    MSX dijo

      Секако.

  3.   RAW-Основни dijo

    Венас! ..

    Можеме да го направиме истиот .. .. но директориумот е донесен како параметар ..

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

    И ние го нарекуваме како:

    ./test.sh / opt /

    Поздрав ..

  4.   саво dijo

    АКО не е циклус xD

  5.   Грегорио Еспадас dijo

    Ми одговара како ракавица за сценарио што го работам. Дали е валидно да се користат вајлд карти? На пример, да знаете дали има .mp4, тогаш извршете нешто на нив.

    ако [-f * .mp4];
    ...

    1.    RAW-Основни dijo

      Да, тотално важи ..

      Дури и преку параметрите .. "* .mp4"

      1.    RAW-Основни dijo

        На пример,

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

        Ако го наречете: ./test.sh * .mp4

        Ако најде .mp4 датотеки, ги брише ... ... но не ги наведува датотеките во тој директориум ...

        1.    Грегорио Еспадас dijo

          Ви благодариме за повратните информации и совети! 🙂

        2.    Жоакин dijo

          Го промашивте f xD

          rm -rf 1 $

          Ова е повозбудливо!

        3.    b1tblu3 dijo

          Прекрасно !!!, Секој ден се повеќе се заубувам во Linux, Windows е исфрлен во некој темен агол на мојот хард диск, кој е наскоро да се избрише за да му се отстапи светлината на Linux.

          1.    RAW-Основни dijo

            Одлично! .. .. тогаш направете го следниот чекор .. и извадете го ..

            Пред 6 месеци приближ. Имам само GNU / Linux на сите машини и не ми требаат повеќе .. .. не W $ .. или Вино .. .. и јас сум повеќе од среќен така ..

            И јас ја заразувам околината .. бидејќи сите ме гледаат со мојот Arch, брз, ефикасен и среќен .. .. и ме замолуваат да инсталирам Linux .. .. yeah! .. ..

        4.    Инуказе dijo

          Можете исто така да ги проверите за различни екстензии, можете да користите нешто како

          #! / корпа за отпадоци / баш
          Директориум = $ HOME / Преземања

          ако [$ директориум]; тогаш
          ехо "Еве список со типови на датотеки:"
          ехо "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          со користење на {} ви овозможува да наведете повеќе наставки во овој случај, употребата на "?" , е вајлд-картичка, која ви овозможува да земете „Било кој карактер“.

          Се надевам дека ќе ти помогне

        5.    Педро dijo

          Ја препорачувам командата пронајди [директориум] [пребарување_паттерн] –екс [команда] {} \

      2.    Карлос dijo

        Не работи, ги ставам овие датотеки во директориумот:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        пребарување.ш

        #! / корпа за отпадоци / баш
        ПАТ = = tmp / ТЕСТ
        ЦД $ РУТ
        ls -la | awk '{print ”« $ 9} »
        ако [[-f AB.TXT]]; тогаш
        ехо »Внесете АКО има АБ
        .TXT »
        fi
        ако [-f AB20160422.TXT]; тогаш
        ехо „влез за специфична АБ-датотека“
        fi

        кога ќе ставам [-f AB.TXT] дава грешка
        кога ќе ставам [[-f AB
        .TXT]] не дава грешка, но не може да ја најде датотеката
        работи само кога ставам одредена датотека, на пример:
        ако [-f AB20160422.TXT]; тогаш

        Не можам да го натерам да работи со вајлд-картички * или?

        1.    Педро dijo

          #! / usr / bin / env баш
          #.кодирање = utf-8.

          КОНТСТАНТИ

          EXIT_OK = 0
          EXIT_BAD = 66

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

          ако [! „1 долар“];
          потоа
          ехо „недостасува параметар“
          излезете од $ EXIT_BAD
          fi

          ЦД "$ 1"

          датотеки = »ls -h1 $ 1»

          за датотека во $ ($ датотеки); направи
          ехо -е "можете да направите што било со $ BOLD $ датотека $ nc тука"
          направи

          излезете од $ EXIT_OK

  6.   MSX dijo

    @KZ, кажи повеќе за ова: „и тоа е затоа што влегувам во прекрасниот свет на Пајтон“!

    1.    КЗКГ ^ Гаара dijo

      ХАХАХАха не ... малку по малку
      Јас сум сè уште нов човек на Пајтон, тешко дека имам време да посветам часови и часови на него, затоа сум бавен, да, бавен, но сигурен во учењето

  7.   Аудобан dijo

    Ви благодарам многу ... само вчера размислував како да го направам ова.

  8.   РајхСк dijo

    ова со ncurs е одлично

  9.   џезеко dijo

    со 1 збор… ОДЛИЧНО!
    Долго време усовршував скрипта за да преземам преземања од Интернет, но се соочив со проблем со преземање на датотеките што ги побарав 1 и повторно, без да можам да го потврдам постоењето 1ro.
    Многу добро туто.

  10.   зулан dijo

    Огромен придонес, овде од Чиле е ценет.
    Секој ден повеќе LINUX пријатно ме изненадува,
    Да живее слободниот софтвер МИЕРДАААА.

  11.   Дејвид dijo

    служат за
    проверете дали датотеката е од директориумот

  12.   Гровер dijo

    Ако сакам да проверам дали постои било која датотека во патеката «/ tmp / приемници», извршете каква било команда, како би била тоа?

    Јас ќе бидам многу благодарен

    Со почит

  13.   Јован dijo

    Почитувани, и да утврдиме ако Податотеката е целосно пополнета ??? Ова го прашувам затоа што кога ја пополнувате датотеката за пренос, тоа може да го земе дури и со половина од податоците.

    Поздрав и благодарност за одговорот.

  14.   Инуказе dijo

    Па, мислам дека треба да додадете и пример, како што е "Проверете дали не постои" датотека "или" директориум "како на пример

    за да проверите дали НЕ постои, на пример, користете променлива->

    Директориум

    #! / корпа за отпадоци / баш
    Директориум = »$ HOME / Тест директориум»
    Датотека = »$ HOME / Тест датотека»

    ако [! -d "$ Directory"]; тогаш
    ехо „Нема $ директориум“
    ехо "Креирање ->" $ директориум "
    mkdir "$ Directory"
    друго
    ехо "Директориум" $ Директориум "веќе постои
    fi

    ако [! -d "$ File"]; тогаш
    ехо "Датотеката $ не постои"
    ехо "Креирање ->" $ File "
    допрете „$ File“
    друго
    ехо "Датотека" $ File "веќе постои
    fi

    1.    Катекио dijo

      кога ќе го проверите mkdir подоцна дали терминалот може да го создаде затоа што може да ги скрши топчињата ако е папка како root или систем hhah

  15.   Хулио Виначи dijo

    Поздрав KZKG ^ Gaara пребарување како што би направил за да користам навивам. Јас би сакал да знам како правам од конзолата до пинг-адреса за да видам дали е достапна на пример http://portal.com/directorio/archivo1.php Онаму каде што датотеката 1 ќе ги зачувува IP-адресите за посета, треба да можам да направам игла за секој половина час за да бидам запознаен со јавната IP-адреса, бидејќи таа се менува од време на време и не можам да се поврзам со ssh .

    Поздрав однапред ви благодарам Бог да ве благослови.

    1.    КЗКГ ^ Гаара dijo

      Здраво како се случува

      Прво, мора да кажете дека променливата IP (на пример) е содржината на таа датотека, за ова мора да:
      1. Преземете ја датотеката
      2. Погледнете ја нејзината содржина и земете ја IP од таму
      3. Таа IP е променлива

      На пример:
      Тука ја преземаме датотеката - »wget http://portal.com/directorio/archivo1.php -о датотека.html
      Потоа, нејзината содржина ја доделуваме на променлива: - »: $ {IP: =` датотека со мачки.html`}
      .. претпоставувајќи дека содржината на таа датотека има само IP, ако не, ќе мора да работите со grep, awk или head.

      Штом веќе ја имате IP како променлива, останатото е наједноставната работа на светот

      Ако сакате пишете ми на е-поштата (kzkggaara [at] desdelinux [dot] net) дека со задоволство ќе ви помогнам

      1.    Хулио Виначи dijo

        Ви благодарам многу kzkggaara многу благодарен.

  16.   Наталија dijo

    Здраво, не разбирам многу од компјутерите и не знам дали овој пост е поврзан со проблемот што го имам.

    Коментирам во случај да ме прочитате, иако објавата е од пред една година:
    Излезе дека создадов папка на мојата работна површина за да складирам неколку видеа. Па, ги избришав тие видеа затоа што повеќе не ми беа потребни и сега оваа папка ми кажува дека не постои (иако е видлива на мојата работна површина).

    - Тоа е првиот проблем што го имам:
    Не можам да ја избришам папката.

    - Втор проблем и мислам дека е поважен:
    Во обид да ја избришам папката, ставив папка ФОТОС. Сега кога ќе ја отворам папката што „не постои“ таа е празна и ФОТОГРАФИИТЕ ги нема.

    Како можам да ги вратам фотографиите? Дадов опција во папката „Покажи скриени документи“, но папката ФОТОГРАФИИ не се појавува.

    Се надевам дека можете да знаете како се решава.
    Ви благодариме.

    1.    valdo dijo

      Постојат двајца корисници кои се главни: root и вашиот_корисник (наталија на пример). И двајцата имаат лични папки. твојот_корисник во / дома и вметнува во / (директориум за root). Со десен клик на папката, видете на кого припаѓа. Ако е root со вашиот менаџер на датотеки користејќи sudo или gksu или kdesu, во зависност од околината што ја користите, одете во root директориумот -> root -> Desktop и најверојатно ќе ги најдете фотографиите и можете да ја избришете папката. Некои дистрибуции кога не сте сопственик на датотеката или директориумот и немате дозволи за пристап ви кажуваат директориумот / датотеката не постои. Ако сте сопственик и не сте root, сторете го истото со управувачот со датотеки со sudo, итн и одете во root директориумот -> / home -> personal_folder -> Desktop и видете дали фотографиите се таму и дали можете да ја избришете папката.
      Ако ова не работи, ќе мора да видите други опции од терминалот (конзолата).

  17.   Педро Мануел Агуајо Муњоз dijo

    Здраво, како си? Јас работам работа во bash и би сакал да знам како да потврдам дали има директориум внесен од тастатурата, на пример

    #! / корпа за отпадоци / баш
    прочитајте ја рутата
    # Внесете ~ / Десктоп
    # Потоа се обидувам да се движам по тој директориум
    cd $ патека
    # Ја добивам следнава порака за баш: cd: ~ / Desktop: Датотеката или директориумот не постојат

    Моето прашање е што можам да направам за да го внесам од тастатурата и да го земам како патека за директориум?

  18.   Мигел dijo

    И како можам да знам дали постои група,

  19.   Хајди dijo

    добро имам проблем во мојата канаима кога ќе го притиснам копчето cunaguaro пишува дека нема датотека или директориум како што би сторил за да се реши тој проблем, а остатокот не отвора cunaguaro, благодарам.

  20.   Карлос dijo

    Како го правите if во BASH ако името на датотеката има празни места?
    На пример:
    Априлски податоци.xlsx

    Да прашам дали датотеката постои

    1.    Мануел Алкоцер Хименез dijo

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

      ако [["$ променлива" == Податок \ месец \ од април.xlsx]]; потоа ехо „натпревар“; фи

      Можете исто така:
      ако [["$ променлива" == 'Податоци за месец април.xlsx']]; потоа ехо „натпревар“; фи

      Друга опција:
      [["$ Variable" == 'Податоци за месец април.xlsx']] && одекнуваат 'совпаѓања' || ехо „не се совпаѓа“

      Некои темни области на Интернет препорачуваат да се користат [[]] наместо [], и ако споредувате броеви, тогаш: ((променлива> = 3)) && echo 'променливата е поголема или еднаква на 3' || echo 'променливата е помала од 3'

      Затоа, за броеви:

      ако ((број! = 4)); тогаш ехо „$ {number} не е 4“; друго ехо "$ {number} е 4"; фи

  21.   Цезар Матеус dijo

    како можете да направите код за да потврдите дали директориумот има специфичен текст, за да можете да го уредувате.

    пример:

    ако (текст1)

    не прави ништо

    друго

    смени го текстот1 во текст2

  22.   Мигел dijo

    прашање, како би било да се проверува на секои 15 секунди дали датотеката постои или не, благодарам.

  23.   брегот на реката dijo

    Здраво,
    ова:
    ако [-w / home / Komun / Logs / ti]; тогаш
    Откријте дали датотеката е за пишување. Но, тоа се заснова на корисничките дозволи. Може ли да се стори за да се открие дали групата или другите имаат дозволи?