Check existence of input argument in a Bash shell script
我需要检查输入参数的存在性。我有下面的剧本
1 2 3 | if ["$1" -gt"-1" ] then echo hi fi |
我得到
1 | [: : integer expression expected |
如何首先检查输入参数1以查看它是否存在?
它是:
1 2 3 4 | if [ $# -eq 0 ] then echo"No arguments supplied" fi |
或者,您可以检查参数是否为空字符串或类似:
1 2 3 4 | if [ -z"$1" ] then echo"No argument supplied" fi |
最好这样示范
1 2 3 4 | if [[ $# -eq 0 ]] ; then echo 'some message' exit 1 fi |
如果参数太少,通常需要退出。
在某些情况下,您需要检查用户是否向脚本传递了参数,如果没有,则返回到默认值。就像下面的脚本:
1 2 | scale=${2:-1} emulator @$1 -scale $scale |
这里,如果用户没有将
${varname:=word} 设置未定义的varname 而不是返回word 值;${varname:?message} ,如果定义了varname 且不为空,则返回varname ,或者打印message 并中止脚本(如第一个示例);${varname:+word} ,仅当varname 已定义且不为空时才返回word ;否则返回空。
尝试:
1 2 3 4 5 6 7 | #!/bin/bash if ["$#" -eq "0" ] then echo"No arguments supplied" else echo"Hello world" fi |
另一种检测参数是否传递到脚本的方法:
1 | ((!$#)) && echo No arguments supplied! |
注意,
为了在没有任何论据的情况下退出,可以说:
1 | ((!$#)) && echo No arguments supplied! && exit 1 |
另一种(类似的)方法是:
1 2 3 | let $# || echo No arguments supplied let $# || { echo No arguments supplied; exit 1; } # Exit if no arguments! |
let: let arg [arg ...]
1
2
3
4
5
6 Evaluate arithmetic expressions.
...
Exit Status:
If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.
我经常将这段代码用于简单的脚本:
1 2 3 4 5 6 7 8 | #!/bin/bash if [ -z"$1" ]; then echo -e" Please call '$0 ' to run this command! " exit 1 fi |
只是因为有更多的基点需要指出,我要补充一点,您可以简单地测试您的字符串是否为空:
1 2 3 4 5 | if ["$1" ]; then echo yes else echo no fi |
同样,如果您期望arg计数,只需测试最后一个:
1 2 3 4 5 | if ["$3" ]; then echo has args correct or not else echo fixme fi |
对于任何arg或var等等
如果要检查参数是否存在,可以检查参数的是否大于或等于目标参数号。
下面的脚本演示了这是如何工作的
试验室1 2 3 4 5 6 | #!/usr/bin/env bash if [ $# -ge 3 ] then echo script has at least 3 arguments fi |
生成以下输出
1 2 3 4 5 6 7 8 9 10 | $ ./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 |
作为一个小提示,bash中的数值测试操作符只对整数(
我想确保我的$vars
1 | var=$(( var + 0 )) |
在测试它们之前,只是为了防御"[:integer arg required"错误。