【学习Linux】处理用户的输入

来源:互联网 发布:暴雪嘉年华 知乎 编辑:程序博客网 时间:2024/05/18 02:18

用户在使用某个脚本文件时是可以输入参数的。

$#: 用户输入参数的个数

$n: 用户输入的第N个参数,如果没有则这个变量是空值,n是一个具体的数值

$*: 把用户输入的所有参数构成一个字符串,被当成一个字符串

$@: 与前面结果一样,但是可以使用for来迭代。

shift:这是一个命令,将最前面的参数移位掉,移位之后的参数不能恢复。

以上是得到用户输入参数的值,值的个数,以及对参数的使用。

我们一般把输入的参数分2种,选项和参数,比如ls -f这里的-f就是一个选项,它以-开头,处理这样的情况就要使用到case语句。


这里有一个规则,选项是-开头,选项和参数之前用--分隔。

比如  ./test -a -- b

这里a就是选项,b就是参数

还有,选项是可以带值的。

比如 ./test -a b -- c d

这里a是选项,b是选项的值,c 和 d 分别是2个参数。


我们还需要达到一个效果,-ab ,这是ab2个选项,这么输入我们要把他当成2个选项来处理,以目前的情况似乎无法处理,所以需要借助命令getopt来帮助我们处理。

这个命令可以把用户输入参数变成我们想要的格式,也就是符合前面的规则


getopt的使用方法:只需要在脚本处理参数之前加上 set  -- `getopt -q ab:c "$@"`

这句话的意思就是把$@变成符合规则的形式,-q表示不输出错误信息。因为,如果我的case语句里面只处理了ab2个选项,但是我输入的参数还包括了c选项就会报错。如果加了-q 参数就不会报这个错误信息。


但是这个命令有一个bug,就是./test -a "value1 value2"

这样它就会把"value1 value2"当成2个参数,这个命令处理不了带空格的参数。这时需要使用更高级的命令getopts


getopts的使用方法



对于这个,我只知道输入的选项可以带一个参数。带多个参数需要自行处理代码

带不带参数是自己决定的,使用$OPTARG输出参数。

最重要的是这个解决了前面参数带空格的问题。

还有一个补充是这个命令会把不能识别的参数打出一条语句表示。如果输入了c选项,他会打印一条默认输出的语句,也就是*里面执行的语句,并且$opt=?





0 0
原创粉丝点击