Errore dello script Bash: ./test: riga 5: UID: sola lettura variabile


9

Ho uno script che funziona bene sul mio server di sviluppo, ma quando provo a eseguirlo in produzione non funziona.

Ricevo il seguente errore che non riesco a capire:

./test.sh: riga 5: UID: variabile di sola lettura

Eventuali suggerimenti?

#!/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

Risposte:


17

È una buona idea usare variabili minuscole negli script della shell, poiché le variabili maiuscole sono generalmente riservate agli interni della shell. (Le variabili d'ambiente sono un'eccezione a questo, ma dovrebbero essere trattate allo stesso modo, poiché le cose con significati speciali che non dovresti cambiare arbitrariamente senza capire quello che stai facendo.) In questo caso, bashimposta $UIDsu Unix mentre è in esecuzione sotto e non consentirà di modificarlo o di utilizzare la variabile per qualsiasi altra cosa. Le shell diverse da bash( shpotrebbero essere dasho qualche altra shell su alcune piattaforme) potrebbero non utilizzare in $UIDquesto modo, e se sono bashstate create per funzionare in modalità di compatibilità con shell Bourne quando invocate come sh(che è l'impostazione predefinita, ma molte distribuzioni Linux lo disabilitano) ha vinto ' trattare$UID neanche speciale.


5

UIDè una variabile riservata al sistema con informazioni sull'ID utente su cui è in esecuzione lo script. Dovresti stare attento a non usare i nomi delle variabili standard che il sistema potrebbe usare. È possibile utilizzare envper ottenere un elenco di ciò che è attualmente impostato. Non cambiare nessuno di quelli. Potresti anche google nomi di variabili per vedere se si presentano in altri utenti prima di procedere con loro.

In questo caso, l'uso di lettere minuscole probabilmente risolverà il tuo problema poiché sono riservate solo le varianti maiuscole, ma potresti anche rendere uniche le tue variabili chiamandole come $ input_uid, quindi è chiaro che il valore proviene dall'input allo script. Ciò renderà il tuo codice più facile da mantenere a lungo termine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.