Bir Bash komut dosyası kullanarak DNI harfinin nasıl hesaplanacağını öğrenin

Tatmin ettikten sonra gereksinimleri paragraf bash betikleri çalıştırabilir, ve anla fonksiyonlar nasıl tanımlanır, nasıl öğrenilir bash işlevlerinde dönüş değerleri. Bunun için Bash'te küçük ama güçlü bir program oluşturacağız. DNI'nin harflerini hesapla. İyi haberlerim var: Bash de yapabilir Windows 10'a yüklenecek. İşletim sistemlerinde Linux'un tüm gücüne neler eklenebileceğini söyleyelim ... farklı.

Her şeyden önce yapmalıyız nasıl olduğunu anla altdizgelerin, herhangi bir dilde olduğu gibi, bir dizenin parçalarını döndür zincir göstergesinden, segmentin konumu ve uzunluğundan. Bu davranışın bir örneğine bakalım. Senaryomuzu ile oluşturuyoruz

$ touch prueba_substring
$ 

Ardından tercih ettiğiniz düzenleyiciye aşağıdaki kodu ekliyoruz. Terminal modunda tercih ettiğim editör mcedit. Ama son zamanlarda nano'nun güçlendiğini görüyorum.

 
#!/usr/bin/env bash 
# Demo comportamiento de substrings en Bash 
# Pedro Ruiz Hidalgo 
# version 1.0.0 
# Febrero 2017 

ret="\n" 
CADENA="siempre uso Linux con Ubuntu y Ubunlog, claro!" 
#      "0123456789012345678901234567890123456789012345" 
#      "          1         2         3         4     " 
# (usa la regla para medir los caracteres) 

echo -e $ret ${CADENA:12} 
echo -e $ret ${CADENA:12:5} 
echo -e $ret "Aprendo en ${CADENA:31:7}" 
exit 0 

İzinleri eklemek ve şu şekilde çalıştırmak:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Her şey yolunda giderse, aşağıdaki sonucu döndürmelidir:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Alt Dize İşlemi

Yukarıda gördüğünüz gibi 13 ile 15 arasındaki satırları vurguladım betiğin ve adımın kodunu açıkla. Echo ile "-e" parametresi gösterelim sonraki satır karakteri, bu karakteri 7. satır ve «ret» değişkenine atandı.

Satır 13: Alt dizeyi gösteriyorum (alt dize) 8. satırda açıklanan ZİNCİR değişkeninin, 12. pozisyondan. Her zaman 0 konumundan itibaren saymaya başlar.

Satır 14: Başlangıç ZİNCİR değişkeninin 12. konumu, 5 segmenti gösteriyorum. Bunun aşağıdakilere karşılık geldiğini doğrulayacağınız gibi "Linux" alt dizesi.

Satır 15: Bir tırnak içine alınmış yeni dize ZİNCİR değişkeninin bir alt dizesi ile devam etmek için "Ben öğreniyorum" olarak başlıyorum 31. pozisyondan, 7 segmenti alarak: bu karşılık gelir «Ubunlog».

Geri gönderme işlevleri

Bash ile dönüş mekanizması "return" komutuyla üretilir, ancak onu bir Bash değişkeniyle eşleştirmemiz gerektiğinde, alışmanız gereken "garip" bir mekanizma uygular. Aşağıdaki örneğe bakalım:

#!/usr/bin/env bash

function suma(){
  local a=$1
  local b=$2
  return $(( $a + $b ))
}

suma 12 23
retorno=$?
echo $retorno

Bash'de kullanılmadan önce işlevler her zaman tanımlanmalıdırbu nedenle mesele 4. satırda fonksiyon toplamını beyan ederiz parametrelerin ilkinin atamasını «yerel» aracılığıyla tanımlarız ($ 1) "a" değişkenine. 5. satırdaki aynı prosedür, burada ikinci a parametresini ($ 2) "b" değişkenine atarız. Dokuzuncu satırda, içinde açıklanan mekanizma tarafından dönüştürülecek iki parametre ile toplam işlevini çağırıyoruz. "a" ve "b" değişkenleri ve "dönüş" ile onları eklenmiş olarak döndürüyoruz, fonksiyon talimatlarında kolayca görülebileceği gibi.

"Return" değişkenini 10. satır fonksiyon toplamının yürütülmesinin sonucu.

Nasıl çalıştığını ve anladıktan sonra değerlerin getirileri ve değişkenlere atama alıştırılır Gelelim programımıza bakalım Bash ile DNI harflerinin hesaplanması.

Bash ile DNI harflerini hesaplamak için komut dosyası

#!/usr/bin/env bash

nl="\n"

LETRAS="TRWAGMYFPDXBNJZSQVHLCKEO"
NORMAL=0
ERROR=66

if [ $# -lt 1 ];
then
	echo -e "$nl Cálculo DNI, introduce número$nl"
	read -r ndni
	[ -z "${ndni//[0-9]}" ] && [ -n "$ndni" ] || echo "Sólo números" && exit $ERROR
else
	ndni=$1
fi

modulo ()
{
	return $(( $ndni  % 23 ))
}

modulo ndni
mod=$?
echo $ndni-${LETRAS:$mod:1}
exit $NORMAL

La DNI mektubu Karşılık gelir sayı modülü 23. Bu, sayıyı 23'e böleriz y bölüme bakmak yerine bölümün geri kalanını gözlemliyoruz. Gibi diğer kelimeler 23'e bölünebilen sayılar sıfır verirmektup buna karşılık gelen «T»bundan beri pozisyon 0, yukarıdaki komut dosyasında gördüğümüz gibi, tüm alt dizeler sıfırdan saymaya başlar. Yani modül ile her zaman sayılar elde edeceğiz 0 ("T" harfi) ile 22 ("O" harfi) arasında. Bash'de, diğer dillerde olduğu gibi modül yüzde operatörü «%» ile elde edilir.

In satır 5 harfleri tanımlıyoruz sırayla. Çok açık, sipariş değiştirilemez güvenilir sonuçlar için. Satırın ifında 9 soruyoruz betiği çağırırken parametre olarak bir numara varsa. Parametre yoksa, 11'den 13'e kadar olan satırlardaki talimatlarla birlikte klavyeden talep ediyoruz. 15. satırdaki sırayı hesaplamak için komut dosyası bir sayı ile çağrılmışsa, bu parametreyi "ndni" değişkenine atayın.

23. satırda modulo fonksiyonuna parametresi aracılığıyla atıfta bulunuyoruz "ndni" değişkeni, ya bash'de bir parametre olarak toplanmıştır ya da girdi olarak klavye ile toplanmıştır. 24. satırda, fonksiyonun geri dönüşü "mod" değişkenine atanır. 25 m hattındamodül ve alt dizgenin hesaplanmasına göre konuma karşılık gelen rakamı, bir çizgi ve harfi gösteririz.

DNI betiğimizi test etme

$ ./dni 12345678
12345678-Z

Peki,

$ ./dni

 Cálculo DNI, Introduce número

Tüm komut dosyalarımız yazar için bir "-a" parametresi ve yardım ve sözdizimi için başka bir "-h" parametresi içermelidir. Önceki makalelerde gördüğümüz gibi veya kodu daha hantal hale getirmemek için size bırakıyorum.
Umarım bu makale ilginizi çekmiştir.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  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.   Ömer BM dijo

    Merhaba, birisi bana yardım edebilir mi? Lubuntu'yu eski masaüstü bilgisayarıma yüklemem gerekiyor ama USB üzerinden yüklememe izin vermiyor ve dvd sürücüsü hasarlı, sadece yüklemek istiyorum http://www.plop.at Ubuntu 16.04 LTS'ye ama nasıl yapacağımı bilmiyorum. Teşekkürler

    1.    Pedro Ruiz Hidalgo bilgi alanı resmi dijo

      Ömer,

      Bahsettiğiniz gibi durum pek umut verici değil: usb kalmadı ve dvd sürücüsü hasarlı. Ama aynı zamanda "bilgisayarın eski" olduğunu da söylüyorsunuz, yani yeni bir bilgisayarınız var demektir. Kurulumu çalışan bilgisayarınızdan bir sabit sürücüye koymayı ve bu sürücüden yüklemeyi deneyin.

      selamlar

    2.    Sezar Delba dijo

      Bilgisayarınız ve çıkarılabilir kutunuz var mı? Eski bilgisayarın sabit sürücüsünü çıkarılabilir usb kutusuna takın ve kurulum diskini başlatın.
      Linux ve Unix, diski Linux kuruluyken yeniden yerleştirebileceğiniz önyükleme seviyesindeki donanımı hesaba katmaz.

    3.    Ömer BM dijo

      Çok teşekkür ederim, yaptığım şeyin Ubuntu 16.04'ten Lubuntu 16.04'e aynı işletim sistemi hehe içinde gitmek olduğunu ve bu yüzden eski bilgisayarım Kolombiya'dan selamlarla iyi çalışıyordu.