SORU
21 Kasım 2008, Cuma


'ortamı kontrol etmek için en iyi yolu ne değişkenler Unıx shellscript ayarlanır

Bazı ortam değişkenleri ben bir şeyler yapmaya başlamadan önce ayarlanmış olduğunu kontrol etmem gereken birkaç Unix kabuk betikleri var, bu tür bir şey yapıyorum:

if [ -z "$STATE" ]; then
    echo "Need to set STATE"
    exit 1
fi  

if [ -z "$DEST" ]; then
    echo "Need to set DEST"
    exit 1
fi

yazarak bir çok şey var. Çevre değişkenleri bir dizi ayarlanmış olduğunu kontrol etmek için daha şık bir deyim var mı?

EDİT: bu değişkenler anlamlı bir varsayılan değer olduğunu belirtmeliyim - senaryo eğer herhangi bir ayarlama, eğer bir hata.

CEVAP
21 Kasım 2008, Cuma


Parametre Genişleme

Açık cevap parametre genişleme özel formları kullanmak için:

: ${STATE?"Need to set STATE"}
: ${DEST:?"Need to set DEST non-empty"}

İlk set için DEVLET gerektirir, ama" ne istediğini tam olarak, ama alternatif" (boş dize) OK -; ve eski gösterimi.= DEVLET

İkinci DEST ayarlanması gerekir ve boş olmayan.

Eğer hiçbir mesaj sağlarsanız, kabuk varsayılan bir ileti sağlar.

${var?} inşa Sürüm 7 ve UNIX Bourne Shell (1978 sıralarında) taşınabilir. ${var:?} istekten biraz daha yenidir: önce. Sistem III UNIX circa 1981, ama SİLME UNIX olabilir bence Bu nedenle POSIX kabukları, özellikle Bash dahil Korn Kabuk ve.

Genellikle bir bölüm Parameter Expansion denilen kabuk adamı sayfasında belgelenmiştir. Örneğin, bash kılavuz diyor ki:

${parameter:?word}

Ekran Hata Null ya da Geri Al. Eğer parametre null veya Geri Al, genişleme word (ya da bir mesaj için bu yönde sözcük yok) için yazılmış standart hata ve kabuk, değil interaktif, çıkar. Aksi takdirde, parametre değeri değiştirilecektir.

Kolon Komutu

Muhtemelen kolon komutu sadece kendi bağımsız değerlendirmeye olduğunu eklemek gerekir ve o zaman başarılı olur. Orijinal kabuk yorum gösterimde ('#' satır sonu için). daha önce Uzun bir süre için, Bourne kabuk betikleri ilk karakteri olarak bir kolon vardı. C Shell ki okumak bir senaryo ve kullanımı ilk karakter olup olmadığını belirlemek için oldu için C Shell ('#' karma) ya da Bourne shell (':' kolon). Daha sonra çekirdek Kanunu var ve '#!/path/to/program' ve Bourne shell '# yorum ve kolon sözleşme, yol kenarına gitti. desteği eklendi Ama eğer iki nokta ile başlayan bir senaryo ile karşılaşırsanız, şimdi neden bileceksiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006