访问参数

执行 Bash 脚本时,传递给脚本的参数根据其位置命名:$1 是第一个参数的名称,$2 是第二个参数的名称,依此类推。

缺少的参数只是求值为空字符串。检查参数是否存在可以按如下方式进行:

if [ -z "$1" ]; then
    echo "No argument supplied"
fi

获取所有参数

$@$*是与所有脚本参数交互的方式。引用 Bash 手册页 ,我们看到:

  • $*:从一个开始扩展到位置参数。当扩展在双引号内发生时,它会扩展为单个单词,每个参数的值由 IFS 特殊变量的第一个字符分隔。
  • $@:从一个开始扩展到位置参数。当扩展发生在双引号内时,每个参数都会扩展为单独的单词。

获取参数的数量

$# 获取传递给脚本的参数数量。一个典型的用例是检查是否传递了适当数量的参数:

if [ $# -eq 0 ]; then
    echo "No arguments supplied"
fi

例 1

遍历所有参数并检查它们是否是文件:

for item in "$@"
do  
    if [[ -f $item ]]; then
        echo "$item is a file"
    fi  
done

例 2

遍历所有参数并检查它们是否是文件:

for (( i = 1; i <= $#; ++ i ))
do
    item=${@:$i:1}

    if [[ -f $item ]]; then
        echo "$item is a file"
    fi  
done