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
Anda adalah pro !!! * atau *
Nah untuk apa-apa 😀
Sekiranya ia melayani anda dan ia menarik, saya berpuas hati 😉
Salam kawan
@ 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 😉
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 🙁
@ 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.
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.
anda betul, seseorang belajar beberapa perkara di sini.
salam dan selamat bercuti !! 😀
Hebat dan dijelaskan dengan baik +1, masa yang diperlukan untuk anda ...
tapi saya berbaloi dengan usaha 😉
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 😉
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 😉
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 😀
Terima kasih
(I.e.
Walaupun beberapa hari telah berlalu sejak penerbitan topik ini, ini telah banyak membantu saya, sekarang saya membuat skrip dalam bahasa bash .. Terima kasih Gaara ..
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
kerana ketika membandingkan dengan jika anda menggunakan tanda tanya? apa perbezaan antara meletakkan? apa-apa surat lain
$? bermaksud 'output sebelumnya', iaitu sekiranya berlaku dari arahan sebelumnya ... 🙂
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).
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 ??
Sangat menarik, terima kasih!
Terima kasih atas sumbangannya, saya telah menghabiskan satu jam untuk memahaminya xD, tetapi saya memahaminya !!!!.
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
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.
Penjelasan yang sangat baik, salam
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
maaf, saya melihat bahawa ia tidak dihantar dan ia telah meningkat dua kali ganda