bash - shell数据 - shell是什么




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

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

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

我明白了

[: : integer expression expected

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


作为一个小提醒,Bash中的数字测试运算符只能用于整数( -eq-lt-ge等)

我喜欢确保我的$变数是由整数

var=$(( var + 0 ))

在我测试它们之前,只是为了防御“[:integer arg required”错误。


另一种检测参数是否传递给脚本的方法:

((!$#)) && 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 ...]

  Evaluate arithmetic expressions.

  ...

  Exit Status:
  If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.

如果您想检查参数是否存在,您可以检查参数的数量是否大于或等于您的目标参数数量。

以下脚本演示了这是如何工作的

test.sh

#!/usr/bin/env bash

if [ $# -ge 3 ]
then
  echo script has at least 3 arguments
fi

产生以下输出

$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 arguments

它是:

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

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





shell