IF döngüsü ile bir dosya veya klasörün var olup olmadığını (ve daha fazlasını) kontrol edin

Hiçbir şey koymadım Cümbüşve bu harika Python dünyasına girerken bana çok yardımcı olan bu diğer arkadaşımı biraz unutmuşumdur.

Burada Bash meraklılarına, başlığın da söylediği gibi bir şey koyuyorum ... Size sadece aşağıdakileri kullanarak sistemde bir dosya veya klasör olup olmadığını nasıl kontrol edeceğinizi göstereceğim: if

Bir .sh dosyası oluşturacağız ve ona yürütme izinleri vereceğiz, bunun için aşağıdaki komutu bir terminale koymak yeterli:

dokunma testi.sh && chmod + x test.sh

Yaptığı şey dosyayı oluşturmaktı (dokunmatik test.sh) ve ayrıca size yürütme izinleri verir (chmod + x test.sh)

O zaman içine şunu yazalım:

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

Bu ne yapar?

Basit 😀

İlk satırda - » eğer [-d / opt /];

Burada soruyoruz, / opt / dizini var mı? Evet dizin / klasör, çünkü -d dizin veya klasör anlamına gelir.
Daha sonra olması durumunda terminalde yazdıracağız «Evet, var.»(Bu 2. ve 3. satır)
Aksi takdirde ve / opt / mevcut DEĞİLDİR, o zaman «Hayır yok»(4. ve 5. Satırlar)
Sonra son satırda (6 numara) if'i kapatıyoruz ve hepsi bu.

İlgili makale:
PC ve Virtualbox sanal makineleri arasında ağ bağlantısı kurun

Testi yapın, size / opt / var olduğunu gösterecektir.

Size diğer metni (mevcut olmayan) göstermemi isterseniz, sisteminizde bulunmayan diğer klasörler için değiştirin / tercih edin, örneğin: / asd /

Gördüğünüz gibi -d, dizinin var olup olmadığını bilmemize yardımcı olur, peki şimdi -d'yi -f olarak değiştirirsek, bu dosyaların varlığını kontrol etmektir (-d = dizin, -f = dosya / dosya)

Örnek:

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

İşte seçeneklerin listesi:

-d - »Belirli bir dizinin olup olmadığını kontrol edin

-f - »Belirli bir dosyanın mevcut olup olmadığını kontrol edin

-w - »Belirli bir dosyanın yazma izinlerine sahip olup olmadığını kontrol edin

-x - »Belirli bir dosyanın yürütme izinlerine sahip olup olmadığını kontrol edin.

Ve eklenecek çok şey yok 🙂

Bash'de programlamayı sevenler için bunun çok faydalı ve ilginç olacağını biliyorum 😉

selamlar


Makalenin içeriği şu ilkelerimize uygundur editoryal etik. Bir hata bildirmek için tıklayın burada.

42 yorum, sizinkini bırakın

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak.

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Hugo dijo

    Bunu yapmadan yapmanın başka bir yolu eğer ... o zaman..else:

    test -f /etc/hosts && elcomando

    Veya ayrıca

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

    Vb.

    1.    KZKG ^ Gaara dijo

      Sağ 😀
      … O_O… Küba'dan Hugo, Hugo siz misiniz? … Windows8, WTF kullanarak !!!

      1.    Hugo dijo

        Evet, bu işletim sistemine aşina oluyorum ve dürüst olmam gerekirse, yararlı bulduğum tek şey kopyalama yöneticisi, yoksa şahsen onu bir acı buluyorum, özellikle hibrit arayüzü ve metro uygulamaları. Vista ve 7'den daha az hoşuma gitti (bunlardan biraz daha verimli olsa da), ki ben de beğenmedim. Tek kullandığım NFS13 ve Skyrim'i oynamak, ancak bu işletim sistemi o kadar çok yer kaplıyor ki Linux bölümümü [snif] silmem gerekti.

        Ancak, gönül rahatlığınız için, dünden önceki gün Arch ISO'yu Ocak ayı için indirdiğimi ve repoyu alır almaz x86-64 sürümünde küçük bir test yapmayı planladığımı söyleyeceğim. sahip olmak?). Şimdi varsayılan olarak imzalı paketleri kullandığını gördüğüm için, bana dalmak için daha fazla güven veriyor.

        Ve babam da bana Android için bazı programlama öğrenmek için yararlanmak istediğim bir Sony Xperia göndereceğini söyledi, bu bekleyen bir dilekti. O yüzden sakin ol, henüz gücün karanlık tarafına geçmedim buahahahaha 😉

  2.   Patz dijo

    adam testi

    1.    msx dijo

      Tabii.

  3.   RAW-Temel dijo

    Wenas! ..

    Aynısını yapabiliriz .. ..ama dizin parametre olarak aktarılır ..

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

    Ve biz buna şöyle diyoruz:

    ./test.sh / opt /

    Selamlama..

  4.   Savo dijo

    IF bir döngü xD değilse

  5.   Gregory Kılıçları dijo

    Yaptığım bir senaryo için eldiven gibi bana uyuyor. Joker karakter kullanmak geçerli mi? Örneğin, herhangi bir .mp4 olup olmadığını öğrenmek için üzerinde bir şey çalıştırın.

    eğer [-f * .mp4];
    ...

    1.    RAW-Temel dijo

      Evet, tamamen geçerlidir ..

      Parametrelerde bile .. "* .mp4"

      1.    RAW-Temel dijo

        Örnek

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

        Eğer adlandırırsanız: ./test.sh * .mp4

        .Mp4 dosyalarını bulursa, onları siler ... ... ancak o dizindeki dosyaları listelemez ...

        1.    Gregory Kılıçları dijo

          Geri bildirim ve ipuçları için teşekkürler! 🙂

        2.    Joaquin dijo

          F xD'yi kaçırdın

          rm -rf 1 $

          Bu daha heyecan verici!

        3.    b1tblu3 dijo

          Harika !!!, Linux'a her geçen gün daha fazla aşık oluyorum, Windows, Linux'un ışığını bırakmak üzere silinmek üzere olan Sabit Diskimin karanlık bir köşesine indirildi.

          1.    RAW-Temel dijo

            Mükemmel! .. ..sonra bir sonraki adıma geçin .. ve çıkarın ..

            6 ay önce yakl. Tüm makinelerimde yalnızca GNU / Linux var ve daha fazlasına ihtiyacım yok .. .. W $ .. veya Wine .. .. ve bundan daha çok mutluyum ..

            Ve etrafıma bulaşıyorum .. çünkü herkes beni Arch'ımla hızlı, verimli ve mutlu görüyor .. .. ve benden Linux kurmamı istiyorlar .. .. evet! .. 😀

        4.    Inukaze dijo

          Bunları çeşitli uzantılar için de kontrol edebilirsiniz, gibi bir şey kullanabilirsiniz.

          #! / Bin / bash
          Directory = $ HOME / İndirilenler

          eğer [$ Dizin]; sonra
          echo "İşte Dosya Türlerinin Listesi:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          {} kullanılması, bu durumda birden çok uzantı belirtmenize olanak tanır, "?" , "Herhangi Bir Karakter" almanıza izin veren bir joker karakterdir.

          Umarım sana yardımcı olur

        5.    pedro dijo

          Bul [dizin] [arama_düzeni] –exec [komut] {} \

      2.    Carlos dijo

        Çalışmıyor, şu dosyaları dizine koyuyorum:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / Bin / bash
        YOL = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{baskı »« $ 9}'
        eğer [[-f AB.TXT]]; sonra
        echo »Herhangi bir AB varsa IF girin
        .TXT "
        fi
        eğer [-f AB20160422.TXT]; sonra
        echo "belirli bir AB dosyası için girdi"
        fi

        [-f AB.TXT] hata veriyor
        [[-f AB
        .TXT]] bir hata vermiyor ancak dosyayı bulamıyor
        yalnızca belirli bir dosya koyduğumda çalışır, örneğin:
        eğer [-f AB20160422.TXT]; sonra

        Joker karakterlerle çalışmasını sağlayamıyorum * veya?

        1.    pedro dijo

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

          KITAPLAR

          EXIT_OK = 0
          EXIT_BAD = 66

          BOLD = »\ 033 [1d»
          NC = »\ 033 [0d»
          KIRMIZI = »\ 033 [31d»

          Eğer [! "1 $"];
          sonra
          echo "bir parametre eksik"
          $ EXIT_BAD'den çık
          fi

          cd "$ 1"

          dosyalar = »ls -h1 $ 1»

          $ ($ dosyalar) içindeki dosya için; yapmak
          echo -e "burada $ BOLD $ file $ nc ile her şeyi yapabilirsiniz"
          yapılmış

          $ EXIT_OK'tan çık

  6.   msx dijo

    @KZ, bunun hakkında daha fazla bilgi verin: "ve bunun nedeni Python'un harika dünyasına giriyorum"!

    1.    KZKG ^ Gaara dijo

      HAHAHAHA nah ... yavaş yavaş 🙂
      Ben hala Python'a yeni başlayan biriyim, ona saatler ayıracak vaktim yok, bu yüzden yavaşım, evet, yavaş ama eminim öğreniyorum 😀

  7.   audoban dijo

    Çok teşekkür ederim 😀 daha dün bunu nasıl yapacağımı düşünüyordum.

  8.   ReichSk dijo

    ncurses ile bu harika 🙂

  9.   Jazeco dijo

    1 kelimede… MÜKEMMEL!
    Uzun zamandır bir betiği internetten indirme yapmak için mükemmelleştiriyordum, ancak 1ro'nun varlığını doğrulayamadan istediği dosyaları 1 ve tekrar indirmesi sorunuyla karşılaştım.
    Çok iyi öğretici.

  10.   Zulan dijo

    Burada Şili'den gelen muazzam katkı takdir edilmektedir.
    Her gün daha fazla LINUX hoş bir şekilde beni şaşırtıyor,
    Yaşasın Özgür Yazılım MIERDAAAA.

  11.   david dijo

    hizmet etmek
    bir dosyanın bir dizinden olup olmadığını kontrol edin

  12.   Grovher dijo

    "/ Tmp / Receivers" yolunda herhangi bir dosyanın varlığını kontrol etmek istersem, herhangi bir komutu çalıştırın, bu nasıl olur?

    çok minnettar olacağım

    selamlar

  13.   John dijo

    Sayın, ve dosyanın tam olarak doldurulup doldurulmadığını IF ile belirlemek için ???. Bunu soruyorum çünkü bir iletim için dosyayı doldurduğunuzda, verilerin yarısı ile bile alabilir.

    Selamlar ve cevabınız için teşekkürler.

  14.   Inukaze dijo

    Sanırım, örneğin "Dosya" veya "dizin" olmadığını kontrol edin gibi bir örnek de eklemelisiniz.

    var OLMADIĞINI kontrol etmek için, örneğin bir değişken kullanın->

    Bir Dizin

    #! / Bin / bash
    Directory = »$ HOME / Test Dizini»
    Dosya = »$ HOME / Test Dosyası»

    Eğer [! -d "$ Dizin"]; sonra
    echo "$ Directory yok"
    echo "Oluşturuluyor ->" $ Dizin "
    mkdir "$ Dizin"
    başka
    echo "Dizin" $ Dizin "zaten mevcut
    fi

    Eğer [! -d "$ Dosya"]; sonra
    echo "$ dosyası yok"
    echo "Oluşturuluyor ->" $ Dosya "
    "$ Dosya" ya dokunun
    başka
    echo "Dosya" $ File "zaten var
    fi

    1.    Katekyo dijo

      mkdir'i daha sonra yaptığınızda, terminalin oluşturup oluşturmayacağını kontrol edin çünkü kök veya sistem olarak bir klasörse topları kırabilir hhah

  15.   Julius vinachi dijo

    Curl kullanmak için yapacağım gibi bir sorgu KZKG ^ Gaara selamlar. Örneğin, mevcut olup olmadığını görmek için konsoldan bir url'ye ping atmaya kadar nasıl yaptığımı bilmek istiyorum http://portal.com/directorio/archivo1.php Dosya1 ziyaret IP'lerini depolayacaksa, bu, zaman zaman değiştiği ve ssh ile bağlanamadığım için genel IP'nin farkında olmak için her yarım saatte bir bu pini yapmam gereken bir ekibi izlemek içindir.

    Selamlar şimdiden teşekkür ederim, Tanrı sizi korusun.

    1.    KZKG ^ Gaara dijo

      Merhaba böyle,

      Öncelikle, IP değişkeninin (örneğin) o dosyanın içeriği olduğunu söylemelisiniz, bunun için yapmanız gereken:
      1. Dosyayı indirin
      2. İçeriğini görüntüleyin ve oradan IP'yi alın
      3. Bu IP değişkendir

      Örnek:
      Burada dosyayı indiriyoruz - »wget http://portal.com/directorio/archivo1.php -o dosya.html
      Sonra bir değişkene içeriğini atıyoruz: - »: $ {IP: =` cat file.html`}
      .. o dosyanın içeriğinin sadece IP'ye sahip olduğunu varsayarsak, yoksa grep, awk veya head ile çalışmanız gerekir.

      IP'yi bir değişken olarak zaten aldığınızda, geri kalanı dünyadaki en basit şeydir 🙂

      Bana memnuniyetle yardımcı olacağım e-postaya (kzkggaara [at] desdelinux [nokta] net) yazmak isterseniz

      1.    Julius vinachi dijo

        Çok teşekkür ederim kzkggaara çok minnettarım.

  16.   Natalia dijo

    Merhaba, bilgisayar hakkında pek bir şey anlamıyorum ve bu yazının sahip olduğum sorunla ilgili olup olmadığını bilmiyorum.

    Yazının bir yıl öncesine ait olmasına rağmen, beni okumanız durumunda yorum yapıyorum:
    Bazı videoları saklamak için masaüstümde bir klasör oluşturduğum ortaya çıktı. Bu videoları sildim çünkü artık onlara ihtiyacım kalmadı ve şimdi bu klasör bana mevcut olmadığını söylüyor (masaüstümde görünse bile).

    - Karşılaştığım ilk sorun bu:
    Klasörü silemiyorum.

    - İkinci sorun ve bence daha önemli:
    Klasörü silme girişiminde bir PHOTOS klasörü koydum. Şimdi "olmayan" klasörü açtığımda boş ve FOTOĞRAFLAR orada değil.

    Fotoğrafları nasıl kurtarabilirim? "Gizli belgeleri göster" klasörünün içinde seçeneği verdim, ancak FOTOĞRAFLAR klasörü görünmüyor.

    Umarım nasıl çözüldüğünü bilirsiniz.
    Teşekkür ederim.

    1.    valdo dijo

      Başlıca iki kullanıcı vardır: root ve your_user (örneğin natalia). İkisinin de kişisel klasörleri var. kullanıcınız / home içinde ve kök / (kök dizin). Klasöre sağ tıklayarak kime ait olduğunu görün. Dosya yöneticinizle birlikte sudo veya gksu veya kdesu kullanan kök ise, kullandığınız ortama bağlı olarak kök dizine -> kök -> Masaüstüne gidin ve muhtemelen fotoğrafları bulacaksınız ve klasörü silebilirsiniz. Dosya veya dizinin sahibi olmadığınızda ve erişim izniniz olmadığında bazı dağıtımlar size dizinin / dosyanın var olmadığını söyler. Eğer sahibi sizseniz ve root değilseniz, sudo vb. İle dosya yöneticisi ile aynısını yapın ve kök dizine gidin -> / home -> kişisel_klasör -> Masaüstü ve fotoğrafların orada olup olmadığını ve silip silemeyeceğinizi görün dosya.
      Bu işe yaramazsa, terminalden (konsol) diğer seçenekleri görmeniz gerekecektir.

  17.   Pedro Manuel Aguayo Munoz dijo

    Merhaba nasılsın bash'de bir iş yapıyorum ve klavyeden girilen bir dizin olup olmadığını nasıl doğrulayacağımı bilmek istiyorum, örneğin

    #! / Bin / bash
    rotayı oku
    #Enter ~ / Masaüstü
    # Sonra o dizinde gezinmeye çalışıyorum
    cd $ yolu
    # Aşağıdaki bash mesajını alıyorum: cd: ~ / Masaüstü: Dosya veya dizin mevcut değil

    Sorum şu, klavyeden girip dizin yolu olarak alabilmek için ne yapabilirim?

  18.   Miguel dijo

    Ve bir grup olup olmadığını nasıl bilebilirim

  19.   Heidy dijo

    iyi Cunaguaro düğmesine bastığımda canaima'mda bir sorun var, bu sorunu çözmek için yapacağı gibi dosya veya dizin olmadığını söylüyor ve geri kalan cunaguaro'yu açmıyor lütfen teşekkür ederim.

  20.   Carlos dijo

    Dosya adında boşluklar varsa BASH'de if'yi nasıl yaparsınız?
    Örnek:
    Nisan verileri.xlsx

    Dosyanın var olup olmadığını sormak için

    1.    Manuel Alcocer Jimenez dijo

      Carlos, bunun gibi:

      eğer [["$ değişken" == Veri \ ay \ Nisan.xlsx]]; sonra echo 'eşleştir'; fi

      Ayrıca:
      eğer [["$ değişken" == 'Nisan.xlsx ayı için veriler']]; sonra echo 'eşleştir'; fi

      Başka bir seçenek:
      [["$ Variable" == 'Nisan ayı verileri.xlsx']] && echo 'eşleşiyor' || echo 'eşleşmiyor'

      İnternetin bazı karanlık bölgelerinde [] yerine [[]] kullanılmasını öneriyorlar ve sayıları karşılaştıracaksanız: ((değişken> = 3)) && echo 'değişkeni 3'ten büyük veya eşittir | | echo 'değişken 3'ten küçüktür'

      Bu nedenle sayılar için:

      eğer ((sayı! = 4)); o zaman echo "$ {sayı} 4 değil"; aksi takdirde echo "$ {sayı} 4'tür"; fi

  21.   Sezar Mateus dijo

    Dizinin belirli bir metni olup olmadığını doğrulamak için, onu düzenleyebilmek için bir kodu nasıl yapabilirsiniz?

    örnek:

    eğer (metin1)

    hiçbir şey yapma

    başka

    metin1'i metin2 olarak değiştir

  22.   Miguel dijo

    bir soru, dosyanın var olup olmadığını her 15 saniyede bir kontrol etmek nasıl olurdu, teşekkür ederim.

  23.   nehir kıyısı dijo

    Merhaba,
    bu:
    eğer [-w / home / Komun / Logs / ti]; sonra
    Dosyanın yazılabilir olup olmadığını öğrenin. Ancak kullanıcı izinlerine dayanmaktadır. Grubun veya diğerlerinin izinleri olup olmadığını öğrenmek için yapılabilir mi?