Bash: Syarat (jika-kemudian-lain)

Hello

Kali ini saya akan menunjukkan cara membuat skrip dengan syarat di Bash, yang diterjemahkan adalah:

Sekiranya perkara X yang anda mahukan terlaksana, tindakan Y selesai, jika perkara itu tidak dapat dicapai maka tindakan lain dilakukan.

Penjelasan ringkas tidak 😀

Sekarang, saya telah berfikir selama beberapa minit mengenai beberapa contoh untuk digunakan dalam tutorial ini, dilema / masalah / situasi berikut berlaku kepada saya:

Kami berada di rangkaian syarikat kami, dan kami ingin mengetahui apakah komputer X disambungkan ke rangkaian. Untuk ini kita membuat a skrip apa yang akan dia lakukan ping ke arah komputer itu, dan jika berada di rangkaian (iaitu, jika ia mengembalikan ping) akan memberitahu kami bahawa YA, ia dalam talian, jika tidak (iaitu, ia tidak dalam talian) ia akan memberitahu kita bahawa TIDAK dalam talian.

Setelah ini selesai, sekarang saya akan menerangkan cara berpusing dengan keadaan 🙂

Inilah kodnya:

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Jangan risau, saya akan menerangkannya dengan terperinci 😉

ping adalah perintah yang akan kita gunakan, dan ia akan memberitahu kita jika PC tersebut berada di rangkaian. Untuk mengetahui PC mana yang ingin kita periksa sama ada ia berada dalam rangkaian atau tidak, kita mesti berubah KEMASUKAN IP dengan jelas alamat IP PC yang ingin kami periksa.

Seperti yang anda lihat, saya meletakkan «-c 1«, Yang perlu bagi kita. Semasa kita membuat ping komputer, tindakan ini tidak berhenti (ping) sehingga kita menekan diri kita sendiri [Ctrl] + [C], jadi meletakkan «-c 1»Kami memintanya untuk melakukan hanya satu pengesahan (hanya satu percubaan ping) dan tidak ada yang lain, ini akan membuatnya berhenti serta-merta, iaitu… ia akan memeriksa sama ada komputer hanya berada di rangkaian.

Sekiranya anda mempunyai keraguan tentang ini, tidak ada rasa sakit ... mereka mengatakannya dan saya dengan senang hati akan menerangkannya kepada mereka lagi 😉

Sekarang datang kitaran, kerana apa yang saya jelaskan tidak lebih dari perintah / tindakan biasa 😀

if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Supaya anda memahami ini, saya akan menerangkan perincian Bash 🙂 yang sangat penting

Subjek yang paling berpengetahuan boleh menjadikan saya salah atau seperti itu, tetapi hei, saya menulis ini untuk pemula atau kurang pakar, selagi mereka memahaminya maka hebat 😉

Ia berlaku seperti dalam Bash ia seperti 0 y 1, iaitu, sama ada anda masih hidup atau mati, ketika perintah atau tindakan dilaksanakan: Entah dilaksanakan dengan baik Tiada masalah (1), Atau ada beberapa masalah atau kesilapan (0).

Kami menjalankan tindakan atau perintah X, dan apa yang kami lakukan mungkin telah dilaksanakan dengan baik atau buruk, mungkin ada kesalahan atau tidak, dan di sinilah perinciannya 😉

Sekiranya apa yang kami hantar untuk dilakukan (dalam kes ini: ping -c 1 IP-ALAMAT) tidak memberikan ralat dan berjaya, jadi akan mengembalikan nilai: 1 . Jika tidak, dan jika tindakan (iaitu ping) tidak berjaya, ia akan mengembalikan nilai 0.

 Dan akhirnya, maksud kod di atas ialah:

Sekiranya nilai 0 dikembalikan maka

Paparkan teks: «Tidak berada di rangkaian»

Jika tidak (dan BUKAN 0, tetapi 1 dikembalikan)

Paparkan teks: «Sekiranya ia berada dalam rangkaian«

Ini yang baru saja saya jelaskan kepada anda, akan melayani kami di masa akan datang untuk banyak perkara, kerana sangat berguna untuk dapat mengatakan bahawa jika tindakan X memberikan kesalahan, lakukan tindakan Y, dan sekiranya tindakan X tidak memberikan ralat, biarkan tindakan Z.

Saya tahu bahawa ada yang mungkin sedikit bingung, jadi saya telah mencuba menerangkannya dengan beberapa cara yang berbeza, berusaha membuat semua orang memahaminya satu atau lain cara. Sekiranya ada orang yang ragu-ragu, beritahu saya.

Sekarang, mari buat skrip kami 😀

Kita mesti mengikuti langkah-langkah dalam tutorial ini: Bash: Cara membuat skrip yang boleh dilaksanakan

Kemudian mari salin kod berikut ke dalam fail itu (skrip.sh), dan pada akhirnya katakan «keluar»(Tanpa petikan):

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Nampaknya seperti ini (ingat bahawa anda mesti menukar IP-ALAMAT ke IP yang anda mahukan):

Di sini anda dapat melihat skrip yang sedang berjalan:

% KOD1%

Seperti yang anda lihat, pada akhirnya dia memberitahu kami «Ya itu dalam rangkaian»🙂

Yang penting di sini ialah mereka benar-benar memahami perkara ini mengenai syaratnya, jadi saya meninggalkan anda kod lain untuk menerangkannya lagi, tetapi dari sudut pandangan lain.

read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi

Maksudnya mudah, saya meninggalkan penjelasan demi baris:

Baris pertama: Apa yang kita tulis, itu akan menjadi nilai pemboleh ubah «teks»(Tanpa petikan).

Baris ke-2: Periksa sama ada kandungan pemboleh ubah (apa yang baru sahaja kita tulis) 3.

Baris pertama: Sekiranya berlaku 3, ia akan menunjukkan kepada kita teks «Membetulkan»(Tanpa petikan).

Baris ke-4: Jika tidak (iaitu sekiranya kita belum menulis 3).

Baris ke-5: Ia akan menunjukkan kepada kita teks «Tidak betul»(Tanpa petikan).

Baris ke-6: Akhir keadaan.

Seperti yang mereka dapat sedar, jika kita meletakkan echo dan kemudian antara petikan berganda («) teks, ini akan menyebabkan teks tersebut dipaparkan di terminal. Iaitu, jika kita meletakkan:

echo "esto es una prueba"

Ia akan menunjukkan teks di terminal: ini adalah ujian

Tetapi kembali kepada contoh kedua ini, saya akan menunjukkan kepada anda kegunaan (dan pelaksanaan) skrip kedua ini dengan sesuatu yang SANGAT mudah 😀… khas «berapakah 1 + 2?«

Saya meninggalkan kod skrip lengkap:

#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit

Inilah cara skrip berfungsi:

% KOD2%

Dan baik ... tidak ada lagi yang perlu ditambahkan.

Ini adalah sesuatu yang asas, ya, tetapi tetap saya cuba menerangkannya sebaik mungkin, kerana tidak semua orang mempunyai jiwa pengaturcara, dan berkali-kali kita perlu membuat skrip seperti ini (atau serupa), bagaimanapun saya semoga artikel ini bermanfaat untuk anda seseorang 🙂

Sebarang keraguan atau pertanyaan, aduan atau cadangan, tinggalkan di sini, saya dengan senang hati akan menjawab anda dan dengan itu, kita semua belajar sedikit lagi 😀

salam


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   jhals kata

    Anda adalah pro !!! * atau *

    1.    KZKG ^ Gaara kata

      Nah untuk apa-apa 😀
      Sekiranya ia melayani anda dan ia menarik, saya berpuas hati 😉

      Salam kawan

  2.   betul kata

    @ KZKG ^ Gaara,
    bercakap mengenai pengaturcaraan bash saya mempunyai soalan:
    Apakah perbezaan antara menyatakan pemboleh ubah seperti VAR ini = halo dan menyatakannya seperti VAR ini = $ {VAR: -hello}?

    Saya menerangkan:
    http://pastebin.com/a3cfWXeD

    salam 😉

    1.    KZKG ^ Gaara kata

      Hello
      Saya bukan ahli bash sama sekali ... sebenarnya, saya tidak tahu LOL !!
      Seperti yang saya nyatakan pemboleh ubahnya seperti ini:
      : ${OPTFOLDER:="/opt/"}

      Tetapi kerana saya selalu melakukannya seperti ini, saya tidak tahu apa perbezaannya secara jujur ​​🙁

  3.   betul kata

    @ KZKG ^ Gaara
    Baiklah, saya mengemukakan soalan itu kerana sebenarnya saya juga tidak tahu, saya biasanya menulis SlackBuilds dan kebenarannya ialah pemboleh ubah yang dinyatakan seperti dalam VAR1 terdapat dalam skrip ini. Pencarian google yang cepat membantu saya menjelaskan soalan ini, saya kongsikan kepada semua orang supaya kita semua dapat belajar:

    skrip:
    http://pastebin.com/faAQb35w

    Penjelasan:
    Menyatakan pemboleh ubah bentuk VAR = $ {VAR: -default_value} bermaksud pemboleh ubah VAR akan mengambil nilai default_value jika dan hanya jika nilainya itu nol atau tidak ada.

    Contoh praktikal:
    Ketika menjalankan skrip, diminta memasukkan nilai yang akan disimpan dalam variabel VAR, jika sesuatu dimasukkan maka akan menunjukkan apa yang dimasukkan. Sekiranya kita tidak memasukkan apa-apa dan tekan enter, kita akan menyatakan pemboleh ubah VAR sebagai nol, oleh itu ia menunjukkan value_default.

    Greetings.

    1.    KZKG ^ Gaara kata

      HAHA saya tidak tahu itu 😀
      Ok, terima kasih banyak kawan ... itulah maksud saya pada akhir artikel, saya tidak bermaksud untuk mengajar sesuatu dan itu sahaja, saya tahu bahawa saya akan selalu belajar sesuatu yang baru di sini 😀

      Salam dan terima kasih sekali lagi.

      1.    betul kata

        anda betul, seseorang belajar beberapa perkara di sini.

        salam dan selamat bercuti !! 😀

  4.   Lucas Matthias kata

    Hebat dan dijelaskan dengan baik +1, masa yang diperlukan untuk anda ...
    tapi saya berbaloi dengan usaha 😉

    1.    KZKG ^ Gaara kata

      Sebenarnya saya menulis 80% hanya dalam 1 hari, saya memerlukan begitu lama untuk menerbitkannya hanya kerana internet saya tidak akan membiarkan saya.
      Terima kasih atas komen anda 😉

  5.   Hugo kata

    Cara lain untuk melakukannya adalah dengan menggunakan DNS, kerana kadangkala rangkaian mempunyai protokol ICMP yang disekat:

    (host -ta IP-ALAMAT> / dev / null 2> & 1) && echo "Disambungkan ke rangkaian"

    Anda juga akan perhatikan bahawa dalam contoh ini cek nilai pulangan adalah tersirat 😉

    1.    KZKG ^ Gaara kata

      Anda seperti biasa kawan, dengan petua yang saya tidak tahu sepenuhnya HAHAHA.
      Terima kasih, komen dihargai dan hehe ... satu lagi perkara baru yang saya pelajari 😀

  6.   Tarikh kata

    Terima kasih

    (I.e.

  7.   Leper_Ivan kata

    Walaupun beberapa hari telah berlalu sejak penerbitan topik ini, ini telah banyak membantu saya, sekarang saya membuat skrip dalam bahasa bash .. Terima kasih Gaara ..

  8.   Edgar navarro kata

    Dokumen. Terima kasih atas pertolongan yang anda jelaskan.

    Sekadar pertanyaan, bagaimana saya melakukannya sehingga apabila satu komputer berhenti melakukan ping secara automatik yang lain mengubah IP. Saya ada ini.

    untuk menukar IP
    #! / Bin / Bash
    ping -c 10 192.168.1.50 # Sekiranya tidak melakukan ping secara automatik
    ifconfig eth0 192.168.1.50 netmask 255.255.255.0 siaran 192.168.1.0
    ifconfig eth0 ke bawah
    ifconfig eth0 ke atas

  9.   Abraham kata

    kerana ketika membandingkan dengan jika anda menggunakan tanda tanya? apa perbezaan antara meletakkan? apa-apa surat lain

    1.    KZKG ^ Gaara kata

      $? bermaksud 'output sebelumnya', iaitu sekiranya berlaku dari arahan sebelumnya ... 🙂

      1.    Andrew kata

        Ada cara lain untuk mencapai hasil yang sama, meneruskan arahan ping secara langsung sebagai argumen kepada jika:

        jika ping -c 1 IP-ALAMAT; kemudian
        gema "Ya itu di internet"
        lagi
        gema "Tidak ada di rangkaian"
        fi

        Apa yang berlaku ialah jika menilai nilai kembali perintah yang anda lalui sebagai argumen, jika mengembalikan 0 itu benar, apa-apa yang lain adalah salah. Kurungan segi empat sama dengan perintah ujian. Tetapi anda boleh meneruskan sebarang perintah sebagai argumen (selagi perintah itu mengembalikan nilai).

  10.   salam kata

    Halo, bagaimana saya melaksanakan script.sh dengan pengguna X dalam skrip saya membuat pengguna Y, dan pengguna Y terus melaksanakan script.sh

    Bolehkah ini dilakukan ??

  11.   kuktos kata

    Sangat menarik, terima kasih!

  12.   Francisco kata

    Terima kasih atas sumbangannya, saya telah menghabiskan satu jam untuk memahaminya xD, tetapi saya memahaminya !!!!.

  13.   eloy kata

    Skripnya baik. Secara aritmetik, ia juga dapat dilakukan sebagai ($? == 0) jika sama dengan sifar itu tidak ada di rangkaian, jika tidak di rangkaian. Dan jika kita masih mahu menjadikannya lebih interaktif, kita boleh mengatakan:
    echo -n Masukkan IP:
    baca ip
    ping -c 1 $ ip

  14.   Dario kata

    Halo, saya sangat baru dalam hal ini, saya berusaha membuat nombor tiket (alfanumerik) melalui pembacaan dan saya mahu jika apa yang dimasukkan mempunyai format yang betul (ABC-123456) jalankan perintah "x" dan saya tidak " Saya tahu bagaimana melakukannya, bolehkah anda menolong saya?

    gema "Masukkan tiket"
    tiket baca -p

    if $ ticket = "tidak ada idea (format ABC-123456"); kemudian cp file.txt $ tiket; gema lain "Format salah, cuba lagi"; baca -p; fi.

    Sudah tentu ia mengerikan dan mereka ketawa haha, tetapi seperti yang saya katakan saya baru bermula dengan ini.

    Sekiranya saya menerangkan dengan teruk, sila beritahu saya dan saya berusaha lebih baik.

    Peluk semua orang.

  15.   Umberto Y kata

    Penjelasan yang sangat baik, salam

  16.   tangkas kata

    Saya mempunyai sedikit keraguan dengan if, else dan lain-lain.
    Saya mahu skrip untuk menyemak sama ada fail wujud (salah satu daripada log) dan jika tidak, untuk menciptanya dan kemudian menulis kepadanya. Tetapi jika ia wujud, saya mahu anda hanya menulis kepadanya.

    Apa yang saya ada ialah:

    tarikh = `tarikh -R`
    #Saya sedang menguji tarikh berubah, yang tidak mengemas kini saya antara memulakan a
    #proses dan tamat, kadangkala sejam boleh berlalu dan masa yang betul tidak keluar.

    jika [-f /home/user/logs/test.log];
    kemudian
    sentuh /home/usuario/logs/test.log
    lagi
    echo "$ date: Updated" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    Secara teori ia sepatutnya baik, tetapi realitinya ialah ia tidak dikemas kini jika fail yang dirujuk sudah wujud

    1.    tangkas kata

      maaf, saya melihat bahawa ia tidak dihantar dan ia telah meningkat dua kali ganda