这篇文章主要介绍了Shell脚本传递参数的3种方法比较,本文直接给出代码示例,在代码中包含详细注解,需要的朋友可以参考下
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 #!/bin/bash #extracting command text_text_text_line options as parameters help_info(){ echo "NAME" echo "t$0" echo "SYNOPSIS" echo "t$0 is a shell test about process options" echo "DESCRIPTION" echo "toption like -a -b param1 -c param2 -d" } if [ $# -lt 0 ] then help_info fi nomal_opts_act() { echo -e "n### nomal_opts_act ###n" while [ -n "$1" ] do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" echo "The parameter follow -b is $2" shift ;; -c) echo "Found the -c option" echo "The parameter follow -c is $2" shift ;; -d) echo "Found the -d option" ;; *) echo "$1 is not an option" ;; esac shift done } #用shell命令自建的选项解析,可以按照自己的想法实现 #优点:自己定制,没有做不到,只有想不到 #缺点:麻烦 getopt_act() { echo -e "n### getopt_act ###n" GETOPTOUT=`getopt ab:c:d "$@"` set -- $GETOPTOUT while [ -n "$1" ] do case $1 in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" echo "The parameter follow -b is "$2"" shift ;; -c) echo "Found the -c option" echo "The parameter follow -c is "$2"" shift ;; -d) echo "Found the -d option" ;; --) shift break ;; *) echo "Unknow option: "$1"" ;; esac shift done param_index=1 for param in "$@" do echo "Parameter $param_index:$param" param_index=$[ $param_index + 1 ] done } #用getopt命令解析选项和参数 #优点:相对与getopts来说是个半自动解析,自动组织选项和参数,用 -- 符号将选项与参数隔开 #缺点:相对于getopts的缺点 #1.需要与set -- 命令配合,不是必须,需要手动shift #2.选项参数中不支持空格如 -a -b dog -c "earth moon" -d -f param1 param2 就会解析错误 getopts_act() { echo -e "n### getopts_act ###n" while getopts :ab:c:d ARGS do case $ARGS in a) echo "Found the -a option" ;; b) echo "Found the -b option" echo "The parameter follow -b is $OPTARG" ;; c) echo "Found the -c option" echo "The parameter follow -c is $OPTARG" ;; d) echo "Found the -d option" ;; *) echo "Unknow option: $ARGS" ;; esac done shift $[ $OPTIND -1 ] param_index=1 for param in "$@" do echo "Parameter $param_index:$param" param_index=$[ $param_index + 1 ] done } #getopts 命令解析选项和参数 #优点:可在参数中包含空格如:-c "earth moon" # 选项字母和参数值之间可以没有空格如:-bdog # 可将未定义的选项绑定到?输出 # Unknow option: ? nomal_opts_act -a -b dog -c earth -d -f param1 param2 getopts_act -a -b dog -c "earth moon" -d -f param1 param2 getopt_act -a -b dog -c earth -d -f param1 param2注< >:更多精彩教程请关注三联编程