检查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。 上一篇: Check existence of input argument in a Bash shell script
下一篇: In a shell script: echo shell commands as they are executed