Bash determina se variáveis de parâmetro ($ 1, $ 2, $ 3, etc.) foram definidas

1

Muitas das postagens que acabei de ler têm muitas respostas que cobrem isso, mas não entendo o que estou fazendo realmente; foi atingido & senhorita.

O script .sh com o qual estou trabalhando:

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

Muitas das postagens que acabei de ler cobrem isso e afirmam que há vários métodos diferentes que podem ser usados para realizar isso, mas ainda não entendo como usá-los corretamente. Basicamente, estou tentando verificar se a variável "$ 1" foi definida por um argumento e exibir algo como:

echo No argument given  

se a variável estiver vazia, em vez de apenas pingar nenhum host. Minha pergunta é: como devo fazer isso sem complicar demais as coisas?

A ajuda é sempre apreciada, obrigado antecipadamente.

PS: Eu ainda sou relativamente novo no ambiente linux, então vá com calma comigo.

    
por Jugy 24.06.2014 / 18:09

2 respostas

1

Eu adicionaria um cheque no começo. Em caso de falha, exiba uma mensagem e saia.

#!/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        
    
por 24.06.2014 / 18:21
1

Se você quiser saber o número de argumentos passados, use $ #. Assim:

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

Espero que ajude.

    
por 24.06.2014 / 18:18

Tags