如何在Shell脚本中以任何顺序接受参数

时间:2019-04-16 05:41:18

标签: shell

  1. 如何使用Shell脚本以任何顺序传递参数?例如:

    ./my_script.sh -h hdfs_path -s s3_loc -f file_name
    ./my_script.sh -s s3_loc -h hdfs_path -f file_name
    ./my_script.sh -f file_name -h hdfs_path -s s3_loc
    
  2. 我必须传递5个参数,但我想这样写我的shell命令:

    `-m mode_to_open_file ./myscript.sh -h hdfs_path -s s3_loc -f` file_name 
    

2 个答案:

答案 0 :(得分:0)

通常的方法是遍历选项,对它们进行处理。常见的是像

while [ $# -gt 0 ]; do
    case $1 in
    -h)
        echo "got -h option with arg $2"
        shift
        shift
        ;;
    *)
        echo "some other arg: $1"
        shift
        ;;
    esac
done

答案 1 :(得分:0)

我们可以使用getopt来实现。它用于在命令行中分解(解析)选项,以方便shell过程进行解析,并检查合法选项。

此示例可用于解决问题:

#!/bin/bash 

while getopts u:p: option 
do 
 case "${option}" 
 in 
 u) USER=${OPTARG};; 
 p) PASSWORD=${OPTARG};; 
 esac 
done 

echo "User:"$USER 
echo "Password:"$PASSWORD

在代码中,以任意顺序的参数将正确的参数传递给函数。