我需要检查输入参数的存在。我有以下脚本
if [ "$1" -gt "-1" ]
then echo hi
fi
我明白了
[: : integer expression expected
如何首先检查输入参数1以查看它是否存在?
我需要检查输入参数的存在。我有以下脚本
if [ "$1" -gt "-1" ]
then echo hi
fi
我明白了
[: : integer expression expected
如何首先检查输入参数1以查看它是否存在?
当前回答
我经常将这段代码用于简单的脚本:
#!/bin/bash
if [ -z "$1" ]; then
echo -e "\nPlease call '$0 <argument>' to run this command!\n"
exit 1
fi
其他回答
在某些情况下,您需要检查用户是否向脚本传递了参数,如果没有,则返回默认值。如以下脚本所示:
scale=${2:-1}
emulator @$1 -scale $scale
在这里,如果用户没有通过scale作为第二个参数,我默认使用scale 1启动Android模拟器${varname:-word}是一个扩展运算符。还有其他扩展运营商:
${varname:=word},它设置未定义的varname而不是返回word值;${varname:?message},如果已定义且不为空,则返回varname,或者打印消息并中止脚本(如第一个示例);${varname:+word},仅当varname已定义且不为空时才返回word;否则返回null。
在我的情况下(有7个参数),唯一有效的解决方案是检查最后一个参数是否存在:
if [[ "$7" == '' ]] ; then
echo "error"
exit
fi
最好这样演示
if [[ $# -eq 0 ]] ; then
echo 'some message'
exit 1
fi
如果参数太少,通常需要退出。
更现代
#!/usr/bin/env bash
if [[ $# -gt 0 ]]
then echo Arguments were provided.
else echo No arguments were provided.
fi
另一种检测参数是否传递给脚本的方法:
((!$#)) && echo No arguments supplied!
注意((expr))会导致表达式按照Shell算术的规则进行求值。
为了在没有任何争论的情况下退出,可以说:
((!$#)) && echo No arguments supplied! && exit 1
另一种(类似的)方式是:
let $# || echo No arguments supplied
let $# || { echo No arguments supplied; exit 1; } # Exit if no arguments!
help let表示:
let:let arg[arg…]计算算术表达式。...退出状态:如果最后一个ARG的值为0,则返回1;否则,let返回0。