Bash: Ketentuan (if-then-else)

halo

Kali ini saya akan menunjukkan cara membuat script dengan kondisi dalam Menampar, yang diterjemahkan adalah:

Jika X hal yang Anda inginkan selesai, tindakan Y dilakukan, jika tidak dilakukan maka tindakan lain dilakukan.

Penjelasan sederhana tidak ada 😀

Sekarang, saya telah berpikir selama beberapa menit tentang beberapa contoh yang akan digunakan dalam tutorial ini, dilema / masalah / situasi berikut terjadi pada saya:

Kami berada di jaringan perusahaan kami, dan kami ingin tahu apakah komputer X terhubung ke jaringan. Untuk ini kami membuat naskah apa yang akan dia lakukan ping ke komputer itu, dan jika berada di jaringan (yaitu, jika mengembalikan ping) akan memberi tahu kita bahwa YA, ini ada di jaringan, jika tidak (yaitu, tidak ada di jaringan) ia akan memberi tahu kita bahwa itu TIDAK ada di jaringan.

Setelah ini selesai, sekarang saya akan menjelaskan cara melakukan siklus dengan kondisi 🙂

Ini kodenya:

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

Jangan khawatir, saya akan menjelaskan ini kepada Anda secara detail 😉

ping adalah perintah yang akan kami gunakan, dan ini akan memberi tahu kami jika PC itu ada di jaringan. Untuk memberi tahu Anda PC mana yang ingin kami periksa apakah ada di jaringan atau tidak, kami harus mengubah ALAMAT IP dengan jelas, alamat IP dari PC yang ingin kita periksa.

Seperti yang Anda lihat, saya meletakkan «-c 1«, Yang penting bagi kami. Saat kita melakukan ping ke komputer, tindakan ini tidak menghentikan (ping) sampai kita menekan diri kita sendiri [Ctrl] + [C], jadi menempatkan «-c 1»Kami memberi tahu Anda untuk melakukan hanya satu verifikasi (hanya satu percobaan ping) dan tidak ada yang lain, ini akan menghentikannya secara instan, yaitu… ini akan memeriksa apakah komputer ada di jaringan hanya sekali.

Jika Anda ragu dengan ini, tidak ada rasa sakit ... mereka mengatakannya dan saya akan menjelaskannya lagi kepada mereka 😉

Sekarang tibalah siklusnya, karena yang baru saja saya jelaskan tidak lebih dari perintah / tindakan biasa 😀

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

Agar Anda memahami ini, saya akan menjelaskan detail yang sangat penting dari Bash 🙂

Subjek yang paling berpengetahuan bisa mencap saya salah atau semacamnya, tapi hei, saya menulis ini untuk pemula atau kurang ahli, selama mereka memahaminya, bagus

Itu terjadi seperti pada Menampar itu seperti 0 y 1, yaitu, Anda masih hidup atau mati, saat perintah atau tindakan dijalankan: Baik dieksekusi dengan baik Tidak masalah (1), Atau ada beberapa masalah atau kesalahan (0).

Kami melakukan aksi atau perintah X, dan apa yang kami lakukan mungkin telah dilakukan dengan baik atau buruk, mungkin ada kesalahan atau tidak, dan disinilah detailnya 😉

Jika yang kami kirim harus dilakukan (dalam hal ini: ping -c 1 IP-ADDRESS) tidak memberikan kesalahan dan berhasil, sehingga akan mengembalikan nilai: 1 . Jika tidak, dan jika tindakan (yaitu, ping) tidak berhasil, itu akan mengembalikan nilai 0.

 Dan akhirnya, arti kode di atas adalah ini:

Jika nilai 0 dikembalikan maka

Tampilkan teks: «Bukan di jaringan»

Jika tidak (dan mengembalikan BUKAN 0, tapi 1)

Tampilkan teks: «Jika dalam jaringan«

Hal ini yang baru saja saya jelaskan kepada Anda, akan membantu kami di masa depan untuk banyak hal, karena sangat berguna untuk dapat mengatakan bahwa jika tindakan X memberikan kesalahan, lakukan tindakan Y, dan jika tindakan X belum memberikan kesalahan, lalu lakukan tindakan Z.

Saya tahu bahwa beberapa mungkin sedikit terlibat, jadi saya telah mencoba menjelaskannya dengan beberapa cara berbeda, mencoba membuat semua orang memahaminya dengan satu atau lain cara. Jika ada yang ragu, beri tahu saya.

Sekarang, ayo buat skrip kita 😀

Kita harus mengikuti langkah-langkah dalam tutorial ini: Bash: Cara membuat skrip yang dapat dieksekusi

Lalu mari salin kode berikut ke file itu (Script.sh.), dan di akhir katakanlah «keluar»(Tanpa tanda kutip):

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

Ini akan terlihat seperti ini (ingat bahwa Anda harus mengubah IP-ADDRESS ke IP yang Anda inginkan):

Di sini Anda dapat melihat skrip yang sedang berjalan:

% KODE1%

Seperti yang Anda lihat, pada akhirnya dia memberi tahu kami «Ya, itu ada dalam jaringan»🙂

Hal yang penting di sini adalah bahwa mereka benar-benar memahami ini tentang ketentuan, jadi saya meninggalkan Anda kode lain untuk menjelaskannya lagi, tetapi dari sudut pandang lain.

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

Artinya sederhana, saya tinggalkan penjelasan baris demi baris:

Baris pertama: Apa yang kita tulis, itu akan menjadi nilai variabel «teks»(Tanpa tanda kutip).

Baris ke-2: Periksa apakah konten variabel (apa yang baru saja kita tulis) adalah 3.

Baris pertama: Dalam kasus menjadi 3, itu akan menunjukkan kepada kita teks «Benar»(Tanpa tanda kutip).

Baris keempat: Jika tidak (yaitu, jika kami belum menulis 3).

Baris keempat: Ini akan menunjukkan kepada kita teks «Salah»(Tanpa tanda kutip).

Baris keempat: Akhir kondisi.

Bagaimana mereka bisa menyadari, jika kita menaruh gema dan kemudian di antara tanda kutip ganda («) teks, ini akan menyebabkan teks tersebut ditampilkan di terminal. Artinya, jika kita menempatkan:

echo "esto es una prueba"

Ini akan menunjukkan kepada kita teks di terminal: ini adalah sebuah ujian

Tapi kembali ke contoh kedua ini, saya akan menunjukkan kegunaan (dan eksekusi) dari skrip kedua ini dengan sesuatu yang SANGAT sederhana 😀… tipikal «berapa 1 + 2?«

Saya meninggalkan Anda kode dari 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

Berikut cara kerja skrip:

% KODE2%

Dan yah ... tidak ada lagi yang bisa ditambahkan.

Ini adalah sesuatu yang elementer, sederhana ya, tapi tetap saja saya sudah berusaha menjelaskannya dengan sebaik mungkin, karena tidak semua orang memiliki jiwa programmer, dan berkali-kali kita perlu membuat script seperti ini (atau sejenisnya), bagaimanapun juga saya semoga artikel ini bermanfaat bagi anda seseorang 🙂

Ada keraguan atau pertanyaan, keluhan atau saran, mohon tinggalkan di sini, saya akan menjawabnya dengan senang hati dan kita semua belajar lebih banyak lagi 😀

salam


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   jhals dijo

    Anda seorang profesional !!! *atau*

    1.    KZKG ^ Gaara dijo

      Tidak sia-sia 😀
      Jika itu melayani Anda dan itu menarik, saya puas 😉

      Salam teman

  2.   tepat dijo

    @ KZKG ^ Gaara,
    Berbicara tentang pemrograman bash, saya punya pertanyaan:
    Apa perbedaan antara mendeklarasikan variabel seperti ini VAR = hello dan mendeklarasikannya seperti ini VAR = $ {VAR: -hello}?

    Aku jelaskan:
    http://pastebin.com/a3cfWXeD

    salam

    1.    KZKG ^ Gaara dijo

      halo
      Yah, saya sama sekali bukan ahli dalam bash ... sebenarnya, saya tidak tahu LOL !!
      Saat saya mendeklarasikan variabelnya seperti ini:
      : ${OPTFOLDER:="/opt/"}

      Tapi karena saya selalu melakukannya seperti ini, jujur ​​saya tidak tahu apa bedanya 🙁

  3.   tepat dijo

    @ KJB ^ Gaara
    Saya mengajukan pertanyaan karena sebenarnya saya juga tidak tahu, saya biasanya menulis SlackBuilds dan kenyataannya adalah bahwa variabel yang dideklarasikan seperti dalam VAR1 berlimpah di skrip ini. Pencarian google cepat membantu saya untuk mengklarifikasi pertanyaan ini, saya membagikannya dengan semua orang sehingga kita semua dapat belajar:

    Skrip:
    http://pastebin.com/faAQb35w

    Penjelasan:
    Mendeklarasikan variabel dalam bentuk VAR = $ {VAR: -default_value} berarti bahwa variabel VAR akan mengambil nilai default_value jika dan hanya jika nilainya null atau tidak ada.

    Contoh praktis:
    Saat menjalankan skrip, ia diminta untuk memasukkan nilai yang akan disimpan di variabel VAR, jika ada yang dimasukkan maka akan ditampilkan apa yang dimasukkan. Jika kita tidak memasukkan apapun dan menekan enter, kita mendeklarasikan variabel VAR sebagai null, oleh karena itu ia menunjukkan nilai_default.

    Salam.

    1.    KZKG ^ Gaara dijo

      HAHA aku tidak tahu itu 😀
      Ok terima kasih banyak sobat ... begitulah yang saya maksud di akhir artikel ini, saya tidak berniat mengajarkan sesuatu dan hanya itu, saya tahu bahwa saya akan selalu belajar sesuatu yang baru disini 😀

      Salam dan terima kasih sekali lagi.

      1.    tepat dijo

        Anda benar, seseorang mempelajari beberapa hal di sini.

        salam dan selamat liburan !! 😀

  4.   Lucas Matthias dijo

    +1 Hebat dan dengan sangat baik dijelaskan, waktu yang Anda butuhkan ...
    tapi aku sepadan dengan usahanya 😉

    1.    KZKG ^ Gaara dijo

      Sebenarnya saya menulis 80% hanya dalam 1 hari, butuh waktu lama untuk mempublikasikannya hanya karena internet saya tidak mengizinkan saya.
      Terima kasih atas komentar Anda 😉

  5.   Hugo dijo

    Cara lain untuk melakukannya adalah menggunakan DNS, karena terkadang jaringan memiliki protokol ICMP yang diblokir:

    (host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Tersambung ke jaringan"

    Anda juga akan melihat bahwa dalam contoh ini pemeriksaan nilai pengembalian implisit 😉

    1.    KZKG ^ Gaara dijo

      Anda seperti biasa sahabat, dengan tips yang saya tidak tahu sepenuhnya HAHAHA.
      Terima kasih, komentarnya dihargai dan hehe… hal baru lainnya yang saya pelajari 😀

  6.   Tanggal dijo

    terima kasih

    🙂

  7.   Leper_Ivan dijo

    Meskipun beberapa hari telah berlalu sejak penerbitan topik ini, itu telah banyak membantu saya, sekarang saya membuat skrip di bash .. Terima kasih Gaara ..

  8.   Edgar navarro dijo

    Dok. Terima kasih atas bantuan yang Anda berikan untuk saya.

    Hanya pertanyaan, bagaimana saya melakukannya sehingga ketika satu komputer berhenti melakukan ping secara otomatis, perubahan IP lainnya. Aku punya ini.

    untuk mengubah IP
    #! / bin / bash
    ping -c 10 192.168.1.50 # Jika tidak melakukan ping secara otomatis
    ifconfig eth0 192.168.1.50 netmask 255.255.255.0 siaran 192.168.1.0
    ifconfig eth0 turun
    etconfig eth0 up.

  9.   Abraham dijo

    karena bila dibandingkan dengan jika menggunakan tanda tanya? apa perbedaan antara menempatkan? surat lainnya

    1.    KZKG ^ Gaara dijo

      $? berarti 'keluaran sebelumnya', yaitu, jika merupakan hasil dari perintah sebelumnya ... 🙂

      1.    Andrew dijo

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

        jika ping -c 1 IP-ADDRESS; kemudian
        echo "Ya, itu di internet"
        lain
        echo "Tidak di jaringan"
        fi

        Apa yang terjadi adalah jika mengevaluasi nilai kembalian dari perintah yang Anda berikan sebagai argumen, jika mengembalikan 0 itu benar, yang lainnya salah. Tanda kurung siku sama dengan perintah tes. Tetapi Anda dapat memberikan perintah apa pun sebagai argumen (selama perintah tersebut mengembalikan beberapa nilai).

  10.   salam dijo

    Halo, bagaimana cara mengeksekusi script.sh dengan pengguna X di skrip yang saya buat sebagai pengguna Y, dan pengguna Y itu terus mengeksekusi script.sh

    Bisakah ini dilakukan ??

  11.   kuktos dijo

    Sangat menarik, terima kasih!

  12.   Francisco dijo

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

  13.   Eloy dijo

    Naskahnya bagus. Secara hitung itu juga bisa dilakukan sebagai ($? == 0) jika sama dengan nol itu tidak ada di jaringan, selain itu ada di jaringan. Dan jika kami masih ingin membuatnya lebih interaktif, kami dapat mengatakan:
    echo -n Masukkan IP:
    baca ip
    ping -c 1 $ ip

  14.   Dario dijo

    Halo, saya sangat baru dalam hal ini, saya mencoba membuat nomor tiket (alfanumerik) melalui pembacaan dan saya ingin jika apa yang dimasukkan memiliki format yang benar (ABC-123456) jalankan perintah "x" dan saya tidak ' tidak tahu bagaimana melakukannya, bisakah Anda membantu saya?

    echo "Masukkan tiket"
    baca tiket -p

    if $ ticket = "tidak tahu (format ABC-123456"); lalu cp file.txt $ tiket; else echo "Format salah, coba lagi"; baca -p; fi.

    Tentu itu mengerikan dan mereka tertawa haha, tapi seperti yang saya katakan, saya baru mulai dengan ini.

    Jika saya menjelaskan dengan buruk tolong beri tahu saya dan saya mencoba untuk berbuat lebih baik.

    Peluk semuanya.

  15.   Umberto Y dijo

    Penjelasan bagus, salam

  16.   tangkas dijo

    Saya memiliki sedikit keraguan dengan if, else dan lainnya.
    Saya ingin skrip memeriksa apakah ada file (salah satu log) dan jika tidak, untuk membuatnya dan kemudian menulisnya. Tetapi jika itu ada, saya ingin Anda menulis saja padanya.

    Apa yang saya miliki adalah:

    tanggal = `tanggal -R`
    #Saya sedang menguji tanggal variabel, yang tidak diperbarui antara awal a
    #proses dan berakhir, terkadang satu jam bisa berlalu dan waktu yang tepat tidak keluar.

    if [-f /home/user/logs/test.log];
    kemudian
    sentuh /home/usuario/logs/test.log
    lain
    echo "$ tanggal: Diperbarui" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    Secara teori seharusnya baik-baik saja, tetapi kenyataannya tidak diperbarui jika file yang direferensikan sudah ada

    1.    tangkas dijo

      maaf, saya melihat itu tidak terkirim dan menjadi dua kali lipat