如何处理shell脚本中缺少的args

时间:2010-10-15 19:33:25

标签: shell

在shell脚本中处理缺少参数的“正确”方法是什么?是否有预先固定的方法来检查这个然后抛出异常?我是一个绝对的初学者。

5 个答案:

答案 0 :(得分:41)

典型的shell脚本首先解析在命令行上传递的选项和参数。参数的数量存储在#参数中,即您使用$#获取参数。例如,如果您的脚本只需要三个参数,则可以执行以下操作:

if [ $# -lt 3 ]; then
  echo 1>&2 "$0: not enough arguments"
  exit 2
elif [ $# -gt 3 ]; then
  echo 1>&2 "$0: too many arguments"
  exit 2
fi
# The three arguments are available as "$1", "$2", "$3"

内置命令exit终止脚本执行。整数参数是脚本的返回值:0表示成功,小正整数表示失败(常见约定1表示“未找到”(想想grep),2表示“意外错误”(无法识别的选项,输入文件名无效,...))。

如果您的脚本采用了选项(例如-x),请使用getopts

答案 1 :(得分:14)

示例脚本(myscript.sh):

#!/bin/bash

file1=${1?param missing - from file.}
file2=${2?param missing - to file.}  
[...]

示例:

$ ./myscript.sh file1 
./myscript.sh: line 4: 2: param missing - to file.

答案 2 :(得分:6)

getopts在这里很有用:getopts

答案 3 :(得分:4)

nounset选项会使bash将未设置的变量和参数视为错误。

示例脚本(myscript.sh):

#!/bin/bash
set -o nounset

echo First argument: $1
echo OK

示例:

$ ./myscript.sh; echo $?
./myscript.sh: line 4: $1: unbound variable
1
$ ./myscript.sh foo; echo $?
First argument: foo
OK
0

答案 4 :(得分:0)

就我而言,我使用GIT_SSH_COMMAND并不喜欢-o KEY Value,它想要

ssh -o KEY=value

ref https://github.com/fish-shell/fish-shell/issues/1299