在运行 shell 脚本之前检查它是否接受命令行参数

Faz*_*bbi 1 bash shell-script arguments

让我们看看下面的代码:

#!/bin/bash
arg=$1
echo $arg
Run Code Online (Sandbox Code Playgroud)

如果我用参数运行它,它会打印参数;如果不是它什么都不做。我想知道的是,是否可以在运行它之前或不运行它之前找出它是否需要命令行参数?

Kus*_*nda 5

sh使用在命令行上的参数兼容外壳脚本将通常包含任一$1$2$3等,或$@$*或它们的组合。然而,这既不必要也不充分!

这将 grep 脚本并返回包含这些类型字符串的所有行:

grep '\$[1-9@*]' script.sh
Run Code Online (Sandbox Code Playgroud)

您可能会从不接受命令行参数但包含接受参数的函数的脚本或仅在未计算的字符串中包含这些字符的脚本中得到误报。如果脚本包含awk对例如的调用,那么这些也可能包含$1不引用脚本本身的命令行参数的等。

您还可以getopt在脚本中查找字符串以查看脚本是否使用getoptgetopts正确解析命令行。

捕获可能隐式使用命令行参数的情况有点困难。例如,使用for variablename; do ... done或时会发生这种情况select variablename; do ... done。但是如果脚本曾经set显式地填充位置参数,那么这不会触及任何命令行参数。可能需要对脚本进行目视检查来解决这个问题。

在“现实生活”中,人们会阅读随附的文档。如果由于任何奇怪的原因不可用,请阅读代码。