shell 参数解析和变量替换

379 阅读1分钟

在命令行运行shell脚本的时候,支持携带参数,我们可以根据参数配置,动态调整脚本的执行结果 命令行示例如下:

# bash xxx.bash  args1 args2 

那在shell脚本里面如何读取这些参数呢,shell脚本定义了一些宏,如下列表

$n传递给脚本或函数的参数,n是一个数字,表示从零开始第n个参数,第一个参数是$1
$0当前脚本的文件名,shell script第零个参数
$#传递给脚本或函数的参数个数
$*传递给脚本或函数的所有参数
$@传递给脚本或函数的所有参数
$?上个命令的退出状态,或函数的返回值
$$当前Shell进程ID。对于shell script,就是这些脚本所在的进程ID

接下来我们看下参数如何解析

if [ $# -lt 1 ];
then
    echo "no arguments"
else
    echo "has $# args"
fi

上述逻辑判断脚本执行的时候,是否携带参数,如果没有则打印"no arguments"

如果想知道命令行是否携带特定参数呢,比如说,是否存在一个名为“hello”的参数

j="hello"
for i in $@;
do 
if [ $i = $j ];
then
    echo "has $j"
else 
    echo "has no $j"
fi
done