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

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

我明白了

[: : integer expression expected

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


当前回答

更现代

#!/usr/bin/env bash

if [[ $# -gt 0 ]]
  then echo Arguments were provided.
  else echo No arguments were provided.
fi

其他回答

它是:

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

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

或者,您可以检查参数是否为空字符串或类似于:

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

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

我经常将这段代码用于简单的脚本:

#!/bin/bash

if [ -z "$1" ]; then
    echo -e "\nPlease call '$0 <argument>' to run this command!\n"
    exit 1
fi

最好这样演示

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
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。

在我的情况下(有7个参数),唯一有效的解决方案是检查最后一个参数是否存在:

if [[ "$7" == '' ]] ; then
  echo "error"
  exit
fi