如何使用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
我必须传递5个参数,但我想这样写我的shell命令:
`-m mode_to_open_file ./myscript.sh -h hdfs_path -s s3_loc -f` file_name
答案 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
在代码中,以任意顺序的参数将正确的参数传递给函数。