openKylin论坛

 找回密码

shell 6 [复制链接]

== 命令行参数  ==

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

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

#!/bin/bash
  
help()
{
    cat << HELP
    This is a generic command line parser demo.
    USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELP
    exit 0
}
   
while [ -n "$1" ]; do
case "$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;;
esac
done
  
echo "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 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2


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

使用道具 举报

openKylin

GMT+8, 2024-5-2 17:51 , Processed in 0.014064 second(s), 17 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表