Risolvere il problema bash bash un operatore unario previsto

Risolvere il problema bash bash un operatore unario previsto
Gli errori hanno un numero diversificato di tipi e ragioni quando si tratta di programmazione bash. Uno di questi errori è l'errore "Unary Operator previsto" nella programmazione Bash. Quando si valutano le espressioni nelle dichiarazioni condizionali, è possibile sottoporsi al problema del "operatore unario previsto". Le ragioni di questo errore "Bash Unary Operator previsto" potrebbero essere diversi. Inizieremo parlando di ciò che sta creando il problema. In seguito, esamineremo un paio di opzioni per risolvere questo problema. Iniziamo con l'articolo di oggi creando un nuovo file bash in Ubuntu 20.04 Sistema. Per questo, dobbiamo utilizzare le istruzioni "touch" all'interno del terminale della shell e nominare il file "unario.sh". $ TOUCT Unario.sh
$ nano unario.sh

Esempio

Inizieremo il nostro primo esempio per questo articolo creando un nuovo codice bash in "Unary.file sh ". Utilizzeremo la dichiarazione condizionale per l'illustrazione di questo errore. All'interno di questo file di codice, abbiamo aggiunto il supporto bash alla prima riga come "#!/bin/bash ". Stiamo provando l'istruzione di lettura per prendere input dall'utente con l'opzione "-P" e aggiungere quell'input nella variabile "V."L'istruzione IF-Else è qui per verificare la condizione. Sta verificando se il valore inserito da un utente in variabile "V" è uguale al numero 14 o no. Per controllare l'uguaglianza, abbiamo utilizzato l'operatore di confronto "-EQ". Se il valore aggiunto da parte di un utente è abbinato dal numero 14, la parte "allora" visualizzerà "valore abbinato" con l'aiuto di una clausola "eco". Altrimenti, la parte altro sta per eseguire la sua istruzione "Echo" che visualizza il messaggio "Valore non abbinato" alla shell. Il codice è completo qui e possiamo eseguirlo ora.

Dopo aver salvato il codice bash, l'abbiamo eseguito con l'istruzione bash. Si scopre che chiede l'input dall'utente. Un utente ha aggiunto il valore "67" nel campo e premuto Invio. Poiché il valore non corrisponde al valore specificato nella condizione "if", la parte "else" è stata eseguita e visualizzata "valore non abbinato", come presentato nell'output mostrato di seguito.

$ Bash Unary.sh

Questo riguardava l'uso di un valore numerico per eseguire il confronto. Eseguiamo di nuovo il nostro codice per far sì che si verifichi l'errore "Unario operatore previsto" sulla nostra shell. Quindi, abbiamo provato di nuovo il codice e sul campo di input chiedendo un valore per entrare, non abbiamo inserito nulla (lasciato vuoto) e abbiamo premuto il pulsante "Invio" per continuare. All'improvviso, ci dà l'errore "Unario operatore previsto" nella riga 3 del codice. Successivamente, ha semplicemente visualizzato il messaggio "valore non abbinato" usando la parte altro della condizione menzionata nel codice.

$ Bash Unary.sh

Sebbene abbiamo riscontrato l'errore "operatore unario previsto" nell'area di output nel terminale, non siamo in grado di riconoscere il motivo principale di questo errore. Per trovare il motivo principale di questo problema, dobbiamo eseguire il debug del codice del file bash. Per questo, dobbiamo utilizzare l'opzione "-xv" all'interno dell'istruzione bash seguita dal nome del file che inizia con. "/" come mostrato. Debugrà ogni riga del nostro codice e mostrerà anche la riga di errore. Mostra che la linea di errore è "[-eq 14]". Non mostra il "$ v" come abbiamo specificato nel codice. Il motivo di questo errore è che l'uso dello spazio renderà l'espressione del lato sinistro, i.e., "$ V", scompaiono dalla condizione.

$ bash -xv ./Unario.sh

Per impedire a questo script di lanciare l'errore "Unary Operator previsto" su Bash, dobbiamo aggiornare ancora una volta il codice. Dobbiamo aggiungere le doppie citazioni intorno all'espressione sinistra "$ V", come abbiamo fatto nell'immagine qui sotto. Il resto del codice sarà invariato per ora. Ora, il codice è pronto per l'uso. Dobbiamo salvarlo prima con "ctrl+s" ed uscire dal file con "ctrl+x."

Dopo l'esecuzione del file bash aggiornato con la query bash, l'utente ha nuovamente premuto ENTER senza inserire alcun valore nel campo di input di fronte al testo "Immettere qualcosa". Ora, l'errore previsto per l'operatore unario è stato rimosso, ma un altro errore ", è sorto un'espressione intera", è sorto. Ma mostra anche il messaggio di visualizzazione che il valore immesso da un utente non corrisponde al numero 14. Quindi, dobbiamo scoprire la soluzione per questo errore.

$ Bash Unary.sh

Come sappiamo che abbiamo utilizzato l'operatore di confronto "-eq" per confrontare alcuni valori con il numero intero 14. Farà un'eccezione perché l'operatore di confronto "-eq" è progettato e utilizzato solo per il confronto di valori o variabili di stringa. Per confrontare i numeri di numeri interi in bash, dobbiamo utilizzare l'operatore di assegnazione "=" per verificare se i due valori sono uguali o no. Salviamo questo codice aggiornato per vedere il risultato.

Dopo questa esecuzione aggiornata del codice bash, l'utente non ha nuovamente inserito nulla e ha semplicemente premuto "Invio" per continuare. Questa volta non abbiamo errori. Ciò è dovuto all'uso dell'operatore "=". In cambio, ha eseguito la clausola "else" e ha visualizzato un messaggio "valore non abbinato".

$ Bash Unary.sh

Un altro modo per evitare di incontrare l'errore previsto per l'operatore unario sulla nostra shell terminale è quello di utilizzare le doppie staffe "quadrate" all'inizio e alla fine della condizione "if" durante l'utilizzo dell'operatore di confronto "-eq" per qualsiasi tipo di valore. Quindi, l'abbiamo fatto come mostrato di seguito.

Dopo aver premuto "Invio", l'utente non riceve alcun errore durante l'esecuzione.

$ Bash Unary.sh

Conclusione

Questo riguarda l'uso di diversi metodi per risolvere l'errore di bash "un operatore unario previsto."Mentre lo facciamo, abbiamo riscontrato un altro errore," espressione intera prevista "e l'abbiamo risolta anche. Puoi modificare l'esempio sopra e risolvere il tuo errore di bash.