"troppi argomenti" verifica una condizione ed esegue un'azione nel caso in cui non sia vera?

2

Ho modificato il mio file sudoers per consentire al mio utente non root di eseguire comandi sudo senza che venga richiesta una password. In vim , come faccio a creare una funzione che controlla se questa condizione è vera, in caso contrario, chiedere all'utente se vuole che lo script modifichi e salvare il file sudoers per rendere vera questa condizione?

Se la condizione è vera, continua con il resto dello script. Se la condizione non è vera, lo script modifica / aggiunge la riga: %sudo ALL=(ALL:ALL) NOPASSWD: ALL nel file sudoers , salva e quindi continua con la parte successiva dello script.

Quindi ho iniziato a scrivere la funzione usando il codice:

... #lines 1-5
passChk() {
passPut="%sudo ALL=(ALL:ALL) NOPASSWD:ALL";
passRd=sudo grep -is "$passPut" --file=/etc/sudoers;
if [ $passRd == $passPut ]; then #if sudoers already contains line from $passPut,     
                                 #exit passChk and proceed to pkgFetch.
   pgkFetch;
else
   echo "You will be prompted for user password. Do you want to temporarily disable this?"; 
   read answer;
fi
if [ $answer !="y" ] || [ $answer !="n" ]; then null
elif [ $answer ="y" ]; then
   $passPut|tee -a > /etc/sudoers
elif [ $answer ="n" ]; then
   pkgFetch;
fi;
clear;
};
passChk;

Ricevo un errore sulla riga 9 if [ $passRd = $passPut ]; then pkgFetch; [: too many arguements . Non capisco Sto provando a verificare se la directory in $passRd contiene una stringa da $passPut . Cosa sto sbagliando?

    
posta Kevin Wyman 27.10.2012 - 10:26

2 risposte

4
  1. "Il ricettario di bash" è un'ottima risorsa, puoi ottenere le nozioni di base online ma questo salverà il tuo culo quando tieni premuto per un po 'di tempo.

  2. Non utilizzare mai virgolette doppie su cose che si intende essere stringhe nude, ad es. non soggetto alla sostituzione di bash, in modo che la riga di passput sia citata in modo univoco.

  3. Raddoppia sempre i riferimenti alle variabili in un costrutto di test [], [[]], (()), ecc. Le cose brutte possono accadere se non lo fai, leggilo sopra. Il costrutto preferito è:

[ "${passRd}" = "${passPut}" ]
  1. Il punto e virgola dopo le chiamate di funzione non è necessario e confonde il codice.

  2. test uomo , ci devono essere spazi tra ogni argomento in una chiamata di prova.

  3. imposta -x sulla CLI o passa -x a #! / bin / bash per facilitare il debug, vedi help set per i dettagli.

risposta data ppetraki 30.10.2012 - 14:15
1

Questo libro potrebbe essere la migliore risorsa per imparare Bash Scripting in Ubuntu.

    
risposta data Ketankumar Patel 27.10.2012 - 10:41

Leggi altre domande sui tag