Bash determina se sono state impostate le variabili dei parametri ($ 1, $ 2, $ 3, ecc.)


1

Molti dei post che ho appena letto hanno molte risposte che trattano questo, ma non capisco cosa sto davvero facendo; è stato incostante.

Lo script .sh con cui sto lavorando:

#!/bin/bash  
# init  

input=$1  
output=$(ping -c 1 "$input" 2>/dev/null)                
if [ $? -eq 0 ]; then                  
   ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}'  2>/dev/null)     
   echo "$ip";                
   sleep 2              
else         
   echo "Host not found";      
fi         

Molti dei post che ho appena letto coprono questo, e affermano che ci sono diversi metodi che possono essere utilizzati per ottenere questo risultato, ma non riesco ancora a capire come usarli correttamente. Fondamentalmente, sto cercando di verificare se la variabile "$ 1" è stata impostata da un argomento e visualizzare qualcosa del tipo:

echo No argument given  

se la variabile è vuota, invece di eseguire il ping senza host. La mia domanda è: come devo fare per farlo senza complicare eccessivamente le cose?

L'aiuto è sempre apprezzato, grazie in anticipo.

PS: Sono ancora abbastanza nuovo nell'ambiente Linux, quindi andate piano con me.


1
Benvenuto in Super User! Non è necessario aggiungere "Risolto" al titolo del tuo post. Le domande risolte vengono automaticamente formattate in modo diverso sulla prima pagina.
Eccellente il

Risposte:


1

Aggiungerei un assegno all'inizio. In caso di errore, visualizzare un messaggio ed uscire.

#!/bin/bash  
# init  

if [ -z "$1" ]; then
  echo No argument given 
  exit
fi

input=$1  
output=$(ping -c 1 "$input" 2>/dev/null)                
if [ $? -eq 0 ]; then                  
   ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}'  2>/dev/null)     
   echo "$ip";                
   sleep 2              
else         
   echo "Host not found";      
fi        

2
Probabilmente non è rilevante in questo caso, ma a volte devi essere in grado di distinguere tra nessun parametro dato ( ScriptFile) e un parametro impostato esplicitamente sulla stringa vuota ( ScriptFile "" Param2 ...): in questo caso devi usare $ # , come suggerito da @Torre
AFH,

1

Se vuoi sapere il numero di arg passati, usa $ #. Come questo:

if [ $# -eq 0 ]; then
  echo "No argument given"
fi

Spero che sia d'aiuto.

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.