Merhaba
Bu sefer size koşullu bir komut dosyasının nasıl yapılacağını göstereceğim. Cümbüş, çevrilen:
İstediğiniz X işlemi yapılırsa Y işlemi yapılır, yapılmazsa başka bir işlem yapılır.
Basit açıklama hayır 😀
Şimdi, bu eğitimde kullanmak için bir örnek hakkında birkaç dakika düşündüm, şu ikilem / sorun / durum aklıma geldi:
Şirketimizin ağındayız ve X bilgisayarın ağa bağlı olup olmadığını bilmek istiyoruz. Bunun için bir senaryo ne yapacak ping o bilgisayara doğru ve bir ağ üzerindeyse (yani, ping) bize EVET'in ağda olduğunu, aksi takdirde (yani, ağda olmadığını) bize ağda OLMADIĞINI söyleyecektir.
Bu yapıldıktan sonra, şimdi koşullarla nasıl döngü yapılacağını açıklayacağım 🙂
İşte kod:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Merak etmeyin, bunu size detaylı olarak açıklayacağım 😉
ping kullanacağımız komuttur ve bize bu bilgisayarın ağda olup olmadığını söyleyecektir. Ağda olup olmadığını kontrol etmek istediğimiz bilgisayarı size söylemek için, değiştirmeliyiz IP ADRESİ açıkça, kontrol etmek istediğimiz bilgisayarın IP adresi.
Gördüğünüz gibi "-c1«, Bizim için gerekli olan. Bir bilgisayara ping attığımızda, kendimize baskı yapana kadar bu eylem (ping) durmaz. [Ctrl] + [C]yani «-c1»Size yalnızca bir doğrulama (yalnızca bir ping denemesi) yapmanızı söylüyoruz ve başka bir şey yapmıyoruz, bu onu anında durduracak, yani… bilgisayarın ağda olup olmadığını yalnızca bir kez kontrol edecek.
Bununla ilgili şüpheniz varsa, acı yok ... Söylüyorlar ve ben de onlara tekrar açıklayacağım 😉
Şimdi döngü geliyor, çünkü az önce açıkladığım şey normal bir komut / eylemden başka bir şey değil 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Bunu anlamanız için, Bash'in son derece önemli bir detayını açıklayacağım 🙂
Konuyla ilgili en bilgili olan beni yanlış veya bunun gibi bir şey olarak damgalayabilir, ama hey, bunu acemiler veya daha az uzmanlar için yazıyorum, anladıkları sürece harika
Olduğu gibi olur Cümbüş gibi bir şey 0 y 1yani, bir komut veya eylem yürütüldüğünde ya hayattasın ya da öldün: Ya iyi idam Sorun değil (1), A biraz vardı sorun veya hata (0).
X eylemini veya komutunu gerçekleştiririz ve yaptığımız şey iyi veya kötü bir şekilde gerçekleştirilmiş olabilir, bir hata olabilir veya olmayabilir ve ayrıntı burada 😉
Yapmak için ne gönderirsek (bu durumda: ping -c 1 IP-ADRESİ) bir hata vermedi ve başarılı oldu, bu nedenle şu değeri döndürecektir: 1 . Aksi takdirde, eylem (yani ping) başarılı olmazsa, değer döndürür. 0.
Ve son olarak, yukarıdaki kodun anlamı şudur:
0 değeri döndürülmüşse
Metni görüntüleyin: «Ağda değil»
Aksi takdirde (0 DEĞİL, ancak 1 döndürülür)
Metni görüntüleyin: «Ağdaysa«
Size az önce açıkladığım bu, gelecekte birçok şey için bize hizmet edecek, çünkü eğer X eylemi bir hata veriyorsa, Y eylemi yap ve X eylemi bir hata vermediyse, demek gerçekten yararlıdır. hata, sonra Z eylemi yapın.
Bazılarının kafasının biraz karışabileceğini biliyorum, bu yüzden bunu birkaç farklı şekilde açıklamaya çalıştım, herkesin bir şekilde anlamasını sağlamaya çalıştım. Herhangi birinin şüpheye düşmesi durumunda bana bildirin.
Şimdi senaryomuzu yapalım 😀
Bu öğreticideki adımları izlemeliyiz: Bash: Çalıştırılabilir bir komut dosyası nasıl yapılır
O halde aşağıdaki kodu o dosyaya kopyalayalım (komut dosyası.sh) ve sonunda şunu söyleyelim «çıkış»(Tırnak işaretleri olmadan):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Şöyle görünmelidir (IP-ADRESİNİ istedikleri IP ile değiştirmiş olmaları gerektiğini unutmayın):
Burada çalışan komut dosyasını görebilirsiniz:
% CODE1%
Gördüğünüz gibi, sonunda bize şunu söylüyor «Evet ağda»🙂
Burada önemli olan, bunu koşullar hakkında gerçekten anlamanızdır, bu yüzden size tekrar açıklamak için başka bir kod bırakıyorum, ama başka bir açıdan.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Bunun anlamı basit, açıklamayı satır satır bırakıyorum:
1. satır: Ne yazıyoruz, bu değişkenin değeri olacak «metin»(Tırnak işaretleri olmadan).
2. satır: Değişkenin içeriğinin (az önce yazdığımız) 3.
3. satır: Olması durumunda 3, bize şu metni gösterecek «Düzelt»(Tırnak işaretleri olmadan).
4. satır: Aksi takdirde (yani, 3 yazmamışsak).
5. satır: Bize şu metni gösterecek «Yanlış»(Tırnak işaretleri olmadan).
6. satır: Koşulun sonu.
Farkına varabildikleri gibi, koyarsak kaçırmak ve sonra çift tırnak arasında («) bir metin, bu metnin terminalde görüntülenmesine neden olacaktır. Yani, koyarsak:
echo "esto es una prueba"
Bize terminaldeki metni gösterecek: bu bir test
Ama bu ikinci örneğe geri dönersek, size bu ikinci senaryonun faydasını (ve yürütülmesini) ÇOK basit bir şeyle göstereceğim - ... tipik olan «1 + 2 ne kadar?«
Size tüm komut dosyasının kodunu bırakıyorum:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Komut dosyası şu şekilde çalışır:
% CODE2%
Ve pekala ... ekleyecek başka bir şey yok.
Bu basit bir şey, evet, ama yine de mümkün olduğunca iyi açıklamaya çalıştım, çünkü herkes bir programcı ruhuna sahip değil ve çoğu zaman bunun gibi (veya benzeri) betikler yapmamız gerekiyor, her durumda I umarım bu makale birisine faydalı olur 🙂
Herhangi bir şüphe veya soru, şikayet veya öneri lütfen burada bırakın, size memnuniyetle cevap vereceğim ve böylece hepimiz biraz daha öğreneceğiz 😀
selamlar
Sen profesyonelsin !!! *veya*
Hiçbir şey için yok 😀
Size hizmet ettiyse ve ilginçse, memnunum 😉
Selam arkadaşım
@ KZKG ^ Gaara,
bash programlamadan bahsetmişken bir sorum var:
Bu VAR = merhaba gibi bir değişkeni bildirmekle bunu bu VAR = $ {VAR: -hello} gibi bildirmek arasındaki fark nedir?
Açıklarım:
http://pastebin.com/a3cfWXeD
selamlar 😉
Merhaba
Şey, bash konusunda hiç uzman değilim ... aslında, LOL hakkında hiçbir fikrim yok !!
Değişkenleri açıkladığım gibi bu şöyle:
: ${OPTFOLDER:="/opt/"}
Ama bunu her zaman böyle yaptığım için dürüstçe fark ne olabilir bilmiyorum 🙁
@ KZKG ^ Gaara
Soruyu sordum çünkü gerçek şu ki ben de bilmiyordum, genellikle SlackBuilds yazarım ve gerçek şu ki, VAR1'de olduğu gibi bildirilen değişkenler bu betiklerde bol miktarda bulunur. Hızlı bir google araması bu soruyu netleştirmeme yardımcı oldu, hepimiz öğrenebilmemiz için bunu herkesle paylaşıyorum:
Senaryo:
http://pastebin.com/faAQb35w
Açıklama:
VAR = $ {VAR: -varsayılan_değer} biçimindeki değişkenlerin bildirilmesi, VAR değişkeninin varsayılan_değer değerini yalnızca ve ancak değer boş ise veya yoksa alacağı anlamına gelir.
Pratik örnek:
Script çalıştırılırken, VAR değişkeninde saklanacak bir değer girilmesi istenir, eğer bir şey girilirse, ne girildiğini gösterecektir. Hiçbir şey girmezsek ve enter tuşuna basarsak, VAR değişkenini null olarak ilan etmiş oluruz, dolayısıyla değer_default değerini gösterir.
Selamlar.
HAHA bunu bilmiyordum 😀
Tamam, çok teşekkür ederim arkadaşım ... makalenin sonunda demek istediğim buydu, bir şey öğretmek niyetinde değilim ve işte bu, burada her zaman yeni bir şeyler öğreneceğimi biliyorum
Selamlar ve tekrar teşekkürler.
haklısın, burada birkaç şey öğrenilir.
selamlar ve mutlu tatiller !! 😀
Çok iyi ve mükemmel bir şekilde açıklanmış +1, size ne kadar zaman harcadı ...
ama çabaya değerim 😉
Aslında% 80'i 1 günde yazdım, internetim izin vermediği için yayınlamam çok uzun sürdü.
Yorumunuz için teşekkürler 😉
Bunu yapmanın başka bir yolu DNS kullanmaktır, çünkü bazen ağlarda ICMP protokolü engellenir:
(ana bilgisayar -ta IP-ADRESİ> / dev / null 2> & 1) && echo "Ağa bağlı"
Ayrıca bu örnekte dönüş değeri kontrolünün örtük olduğunu da fark edeceksiniz 😉
Sen her zamanki gibi arkadaşım, HAHAHA'yı tamamen bilmediğim ipuçlarıyla.
Teşekkür ederim, yorum takdir edildi ve hehe… öğrendiğim yeni bir şey daha 😀
teşekkürler
🙂
Bu konunun yayınlanmasının üzerinden günler geçmesine rağmen, bash'ta bir senaryo hazırladığım için bana çok hizmet etti. Teşekkürler Gaara ..
Doktor, işleri benim için netleştirdiğiniz yardım için teşekkürler.
Sadece bir sorgu, bir bilgisayar otomatik olarak ping yapmayı bıraktığında diğerinin IP'yi değiştirmesini nasıl yaparım. Bu bende var.
IP'yi değiştirmek için
#! / Bin / bash
ping -c 10 192.168.1.50 # Otomatik olarak ping yapmıyorsa
ifconfig eth0 192.168.1.50 netmask 255.255.255.0 yayın 192.168.1.0
ifconfig eth0 aşağı
ifconfig eth0 yukarı
çünkü soru işaretini kullanırsanız ile karşılaştırırken? koymak arasında ne fark var? başka herhangi bir mektup
$? 'önceki çıktı' anlamına gelir, yani önceki komutun sonucu olması durumunda ... 🙂
Aynı sonucu elde etmenin başka bir yolu var, ping komutunu doğrudan bir argüman olarak iletmek için:
ping -c 1 IP-ADRESİ ise; sonra
echo "Evet, internette"
başka
echo "Ağda değil"
fi
Olan şu ki, ilettiğiniz komutun dönüş değerini bir argüman olarak değerlendirirse, 0 döndürürse bu doğrudur, başka herhangi bir şey yanlıştır. Köşeli parantezler test komutuna eşdeğerdir. Ancak herhangi bir komutu argüman olarak iletebilirsiniz (komut bir değer döndürdüğü sürece).
Merhaba, komut dosyasında bir X kullanıcısı ile bir script.sh dosyasını nasıl çalıştırırım Bir kullanıcı Y oluşturuyorum ve bu Y kullanıcısı script.sh'yi çalıştırmaya devam ediyor
Bu yapılabilir mi?
Çok ilginç, teşekkürler!
Katkı için teşekkürler, xD'yi anlamak için bir saatim oldu ama anladım !!!!.
Senaryo gayet iyi. Aritmetik olarak, sıfıra eşitse ($? == 0) olarak da yapılabilir, ağda değil, aksi takdirde ağdadır. Ve yine de onu biraz daha etkileşimli hale getirmek istiyorsak şunu söyleyebiliriz:
echo -n IP'yi girin:
ip oku
ping -c 1 $ ip
Merhaba, bu konuda çok yeniyim, okuma yoluyla bir bilet numarası (alfanümerik) yapmaya çalışıyorum ve girilenin doğru biçime sahip olması durumunda (ABC-123456) bir "x" komutunu çalıştırmasını istiyorum ve yapmam. nasıl yapılacağını bilmiyorum, bana yardım edebilir misin?
echo "Bilet gir"
-p bileti oku
$ ticket = "fikrim yok (ABC-123456 formatı"); sonra cp file.txt $ ticket; else echo "Yanlış format, tekrar dene"; -p okuyun; fi.
Elbette korkunç ve gülüyorlar haha, ama dediğim gibi bununla başlıyorum.
Kötü açıklarsam lütfen bana söyleyin ve daha iyisini yapmaya çalışıyorum.
Herkese sarılın.
Mükemmel açıklama, selamlar
if, else ve diğerleriyle ilgili biraz şüphem var.
Bir dosyanın var olduğunu (günlüklerden biri) kontrol etmek ve değilse, onu oluşturmak ve daha sonra ona yazmak için bir komut dosyası istiyorum. Ama eğer varsa, sadece yazmanı istiyorum.
Sahip olduğum şey:
tarih = 'tarih -R'
#Bir başlangıç arasında güncellenmeyen değişken tarihi test ediyordum.
#işlem bitiyor bazen bir saat geçebiliyor ve doğru zaman çıkmıyor.
eğer [-f /home/user/logs/test.log];
sonra
/home/usuario/logs/test.log'a dokunun
başka
echo "$ tarih: Güncellendi" >> /home/user/logs/test.log
echo «——————————————-» >> /home/user/logs/test.log
fi
Teorik olarak iyi olmalı, ancak gerçek şu ki, başvurulan dosya zaten mevcutsa güncellenmez.
pardon gönderilmediğini gördüm ve ikiye katlanmış