检查Bash shell脚本中是否存在输入参数

我需要检查输入参数的存在。 我有以下脚本:

if [ "$1" -gt "-1" ]
  then echo hi
fi

我明白了

[: : integer expression expected

如何首先检查输入参数1以查看它是否存在?


它是:

if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

$#变量会告诉您脚本传递的输入参数的数量。

或者你可以检查一个参数是否是一个空字符串或不是像:

if [ -z "$1" ]
  then
    echo "No argument supplied"
fi

-z开关将测试“$ 1”的扩展是否为空字符串。 如果它是一个空字符串,则执行正文。


用这种方式演示更好

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fi

如果参数太少,通常需要退出。


如果您只想检测是否缺少特定参数,则参数替换非常重要:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT

在某些情况下,您需要检查用户是否将参数传递给脚本,如果不是,则回退到默认值。 就像下面的脚本一样:

scale=${2:-1}
emulator @$1 -scale $scale

这里如果用户没有通过scale作为第二个参数,我默认启动带有-scale 1的Android模拟器。 ${varname:-word}是一个扩展操作符。 还有其他扩展操作符:

  • ${varname:=word}它设置未定义的varname而不是返回word值;
  • ${varname:?message}如果varname被定义并且不为空或者打印该message并中止脚本(如第一个例子),则返回varname ;
  • ${varname:+word}仅当varname被定义并且不为空时才返回word ; 否则返回null。
  • 链接地址: http://www.djcxy.com/p/2893.html

    上一篇: Check existence of input argument in a Bash shell script

    下一篇: In a shell script: echo shell commands as they are executed