我需要检查输入参数的存在。我有以下脚本
if [ "$1" -gt "-1" ]
then echo hi
fi
我明白了
[: : integer expression expected
如何首先检查输入参数1以查看它是否存在?
我需要检查输入参数的存在。我有以下脚本
if [ "$1" -gt "-1" ]
then echo hi
fi
我明白了
[: : integer expression expected
如何首先检查输入参数1以查看它是否存在?
当前回答
单行bash函数验证
myFunction() {
: ${1?"forgot to supply an argument"}
if [ "$1" -gt "-1" ]; then
echo hi
fi
}
添加函数名称和用法
myFunction() {
: ${1?"forgot to supply an argument ${FUNCNAME[0]}() Usage: ${FUNCNAME[0]} some_integer"}
if [ "$1" -gt "-1" ]; then
echo hi
fi
}
添加验证以检查整数
要添加其他验证,例如检查传递的参数是否为整数,请修改验证一行以调用验证函数:
: ${1?"forgot to supply an argument ${FUNCNAME[0]}() Usage: ${FUNCNAME[0]} some_integer"} && validateIntegers $1 || die "Must supply an integer!"
然后,构造一个验证函数来验证参数,成功时返回0,失败时返回1,失败时终止脚本
validateIntegers() {
if ! [[ "$1" =~ ^[0-9]+$ ]]; then
return 1 # failure
fi
return 0 #success
}
die() { echo "$*" 1>&2 ; exit 1; }
更简单-只需使用set-u
set-u确保每个被引用的变量在使用时都被设置,所以只需设置它就可以了
myFunction() {
set -u
if [ "$1" -gt "-1" ]; then
echo hi
fi
}
其他回答
在我的情况下(有7个参数),唯一有效的解决方案是检查最后一个参数是否存在:
if [[ "$7" == '' ]] ; then
echo "error"
exit
fi
它是:
if [ $# -eq 0 ]
then
echo "No arguments supplied"
fi
$#变量将告诉您脚本传递的输入参数的数量。
或者,您可以检查参数是否为空字符串或类似于:
if [ -z "$1" ]
then
echo "No argument supplied"
fi
z开关将测试“$1”的扩展是否为空字符串。如果它是空字符串,则执行主体。
只是因为有更多的基点需要指出,所以我补充说,您可以简单地测试字符串是否为空:
if [ "$1" ]; then
echo yes
else
echo no
fi
同样,如果您期望arg计数,只需测试最后一个:
if [ "$3" ]; then
echo has args correct or not
else
echo fixme
fi
以此类推,使用任何arg或var
我经常将这段代码用于简单的脚本:
#!/bin/bash
if [ -z "$1" ]; then
echo -e "\nPlease call '$0 <argument>' to run this command!\n"
exit 1
fi
Try:
#!/bin/bash
if [ "$#" -eq "0" ]
then
echo "No arguments supplied"
else
echo "Hello world"
fi