带 -option的Shell脚本

来源:互联网 发布:复杂网络 机器人定位 编辑:程序博客网 时间:2024/06/06 12:22
       我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。但是在编写更复杂的程序时,您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值 (比如文件名)。

  有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无遗是一个不错的方法。

#!/bin/shhelp(){ cat <This is a generic command line parser demo.USAGE EXAMPLE: ./cmdparser -l hello -f -- -somefile1 somefile2HELP exit 0}while [ -n "$1" ]; docase $1 in  -h) help;shift 1;; # function help is called  -f) opt_f=1;shift 1;; # variable opt_f is set  -l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2  --) shift;break;; # end of options  -*) echo "error: no such option $1. -h for help";exit 1;;  *) break;;esacdoneecho "opt_f is $opt_f"echo "opt_l is $opt_l"echo "first arg is $1"echo "2nd arg is $2" 

可以这样运行该脚本:
./cmdparser -l hello -f -- -somefile1 somefile2 
返回的结果是:
opt_f is 1opt_l is hellofirst arg is somefile12nd arg is somefile2

这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。


0 0
原创粉丝点击