Bash 确定参数变量($1、$2、$3 等)是否已设置

Bash 确定参数变量($1、$2、$3 等)是否已设置

我刚刚阅读的许多帖子都对此有很多回答,但我不明白自己真正在做什么;这一直是碰运气的。

我正在使用的.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  

如果变量为空,而不是仅仅 ping 没有主机。我的问题是:我应该如何做才能不让事情变得过于复杂?

得到帮助总是值得庆幸的,提前致谢。

PS:我对 Linux 环境还很陌生,所以请对我宽容一点。

答案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        

答案2

如果你想知道传递的参数数量,请使用 $#。如下所示:

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

希望有所帮助。

相关内容