Bash'in tamsayı yerine sekizlik kodu yorumlamasını nasıl engelleyebilirim?


13

Bir Horoskop RSS betiği Unix / Linux projesine giriş olarak yazıyorum ve Profesörüm dersten sonra kalmayı başarabildiğim bir zamanda çözemedi. Gerçek tarihleri ​​kontrol etmek için nasıl kullanacağımı anlayamadığım için, kullanıcı girişinin MMDD formatında standart sayılar olmasını sağlayarak temel aritmetiği deneyeceğim. Ona göre senaryo, tamsayı yerine sekizli kod olarak girdi okuyor gibi görünüyor. İşte senaryo örneği:

    elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit

Bu çıplak kemikler, RSS bölümünü çıkardım. "olddate" okuma istemimden beklenen girdi. 1121 ila 1131, 1200 ila 1222 ve 0100 ila 0120 çalışırken, 1221 ila 1232 arasında hiçbir şey yapılmaz. Oğlak için çalışmış 0 önde 113 olmadan bu sorunun olduğunu anladı. Ben de sadece Koç'u vermesi gereken 0323'ün (-gt 0320 && -lt 0332) bana Kova (tarihleri ​​-gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) olarak verdiği bir problemle karşılaştım. 0417 çalışmıyorsa (Koç için diğer tarih aralığı, -gt 0400 && -lt 0420).

BASH'in girdiyi gerçek sayılar olarak yorumlaması için ne yapmalıyım? Girdi olarak "userdate" ifadesini beklemek için okuma istemini değiştirmeyi ve ardından

olddate=`printf '%d\n' "$userdate"`

ama işe yaramadı. Bu konuda bana yardımcı olabilecek herkese şimdiden teşekkürler!


4.4.12 bash kopyalanamaz.
Ignacio Vazquez-Abrams

1
$ olddate bir dize, bir sayı değil, bu nedenle dize karşılaştırmaları kullanın ve tüm karmaşadan kaçının.
Stephen Harris

2
@StephenHarris: Operatörlerin sağındaki değerler de öyle. Bu nedenle testaçık sayısal işleçler vardır.
Ignacio Vazquez-Abrams

Dikkat edilmesi gereken bir şey, ancak asıl soru ile ilgisi yoktur, zodyak işaretinizin de doğum gününüz ve ayınız 2 zodyak işareti arasındaki geçişe yakınsa, doğduğunuz yıla da kısmen bağlıdır. Burçunuz, güneşin doğduğunuz sırada bulunduğu gökyüzünün 1/12. bölümünü temel alır, ancak bir yıldaki gün sayısı bir sayı veya 12 ile bölünemez olduğundan, yıldan yıla. Bu varyasyon, eğer başka ağaçlarda gerçekten yakalamak için çok karmaşıktır, ancak bu sadece bilmek iyi olabilecek bir şeydir.
Nzall

Yanıtlar:


28

Bir sayının bash'daki belirli bir tabana dönüşümünü şu şekilde zorlayabilirsiniz:

$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100

Genel olarak biçimidir $((base#value)).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.