Bash komut dosyası hatası: ./test: satır 5: UID: salt okunur değişken


9

Geliştirme sunucumda iyi çalışan bir komut dosyası var ama üretimde çalıştırmaya çalıştığımda çalışmıyor.

Ben anlayamıyorum aşağıdaki hatayı alıyorum:

./test.sh: satır 5: UID: salt okunur değişken

Herhangi bir öneri?

#!/bin/sh

    while read inputline
    do
     UID="$(echo $inputline | cut -d '"' -f4)"
     PASSWORD="$(echo $inputline | cut -d '"' -f8)"
     FIRST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f1)"
     LAST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f2)"    

    zmprov createAccount $UID $PASSWORD displayName "$FIRST $LAST" givenName $FIRST sn $LAST    

    done < company.csv

Yanıtlar:


17

Büyük harf değişkenleri genellikle kabuk içleri için ayrıldığından, kabuk komut dosyalarınızda küçük harfli değişkenler kullanmak iyi bir fikirdir. (Ortam değişkenleri bunun bir istisnasıdır, ancak ne yaptığınızı anlamadan keyfi olarak değiştirmemeniz gereken özel anlamları olan şeylerle aynı şekilde ele alınmalıdır.) Bu durumda, çalıştığı Unix uid'i bashayarlar $UID. ve değiştirilmesine veya değişkenin başka bir şey için kullanılmasına izin vermez. Dışındaki Kabuklar bash( sholabilir dashya da bazı platformlarda diğer bazı kabuk) kullanmayabilir $UIDbu şekilde ve eğer bashBourne kabuğu uyumluluk modunda çalışması için inşa edilmiştir olarak çağrıldığında sh(varsayılan, ancak birçok Linux dağıtımları o devre dışı olan) o kazandı tedavi etmek$UID özel olarak.


5

UIDkomut dosyanızın çalıştırdığı kullanıcı kimliği hakkında bilgi içeren sisteme ayrılmış bir değişkendir. Sistemin kullanıyor olabileceği standart değişken adlarını kullanmamaya dikkat etmelisiniz. Şu envanda ayarlanmış olanların bir listesini almak için kullanabilirsiniz . Bunların hiçbirini değiştirmeyin. Ayrıca, google değişken adlarını, devam etmeden önce diğer kullanıcılarda açılıp açılmadığını görmek için de kullanabilirsiniz.

Bu durumda, yalnızca büyük harf varyantları ayrıldığından küçük harf kullanmak muhtemelen sorununuzu çözer, ancak değişkenlerinizi $ input_uid gibi bir şey çağırarak benzersiz hale getirebilirsiniz, böylece değerin komut dosyasından girdiye geldiği açıktır. Bu, kodunuzun uzun vadede bakımını kolaylaştıracaktır.

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.