1

Многие из постов, которые я только что прочитал, имеют много ответов, которые охватывают это, но я не понимаю, что я делаю на самом деле; это было хитом и мисс.

Скрипт .sh, с которым я работаю:

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

Многие из постов, которые я только что прочитал, охватывают это и утверждают, что есть несколько различных методов, которые могут быть использованы для достижения этой цели, но я до сих пор не понимаю, как правильно их использовать. По сути, я пытаюсь проверить, была ли переменная "$ 1" установлена аргументом, и показать что-то вроде:

echo No argument given  

если переменная пуста, вместо того, чтобы просто пропинговать хост. Мой вопрос: как мне поступить так, не усложняя вещи?

Помощь всегда приветствуется, спасибо заранее.

PS: я все еще довольно новичок в среде Linux, так что будьте спокойны со мной.

2 ответа2

1

Если вы хотите узнать количество переданных аргументов, используйте $ #. Как это:

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

Надеюсь, это поможет.

1

Я бы добавил чек в начале. В случае сбоя выведите сообщение и выйдите.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .