shell对于用户输入的命令行如何进行处理?

shell对于用户输入的命令行如何进行处理?shell对于用户输入的命令如何进行处理?... shell对于用户输入的命令行如何进行处理?shell对于用户输入的命令如何进行处理? 展开
 我来答
百度网友ded4135
高粉答主

2018-05-15 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.7万
采纳率:87%
帮助的人:1.2亿
展开全部

linux shell 处理用户输入

  • 命令行参数

  • 读取参数,$0程序名,$1第一个参数以此类推,直到$9。第10个参数开始需要用花括号把数字括起来 ${10}

    读取程序名,默认$0是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就可以用basename了,比如:

    这样可以根据不同的脚本名执行不同的功能

    测试参数,当需要参数而没有跟参数时会报错。所以需要检查数据是不是存在就很有必要,如下所示:

  • 特殊参数变量

  • 参数计数  $# 该变量记录脚本运行时的参数个数,如果要在大括号内使用该参数的话需要把$改为!因为大括号内不能使用美元符。

    抓取所有的数据,$*和$@可以提供对所有参数的快速访问。$*把所有参数当成一个参数,$@会单独处理每个参数。

  • 移动变量 shift 默认左移一个位数,可以在shift后面跟数字修改默认左移位数。shift 2  左移2位。

  • 处理选项

  • 简单的选项

    运行结果:

    分离参数和选项

    此处用破折号来区分选项和参数

    处理带值的选项

    如上图所示处理带值的选项 -b

    getopt 命令,能够识别命令行参数

    getopt options optstring parameters

    optstring 列出你要在脚本中用到的每个命令行选项字母,然后再每个需要参数值的选项字母后加一个冒号。getopt会基于定义的optstring解析提供的参数。

    如图所示: -b 选项需要参数所以b后面有个:  参数是test1   而test2 和test3是参数,用双破折号分开

    当有无效参数出现的话会提示错误,如下图所示:

    当加上-q选项时会忽略错误信息,如下所示:

    注意-q 的位置

    脚本中使用getopt

    采用set命令 -- 选项会将命令行参数替换成set命令的命令行的值。首先原始的脚本命令行参数传给getopt,然后getopt把输出给set命令。比如下面

    set -- `getopt -q ab:cd "$@"`  下面是一个例子:

    getopts命令

    getopts optstring variable,在optstring前面加个: 可以去掉错误消息。

    getopts用到两个环境变量。如果选项需要跟一个参数值,OPTARG环境变量就会保存这个值。OPTIND环境变量保存了参数列表中getopts正在处理的参数位置。

    对于未定义的选项统一输出成问号:

    其中d是未定义的。

    getopts处理每个选项时会将OPTIND环境变量值增一。

    使用OPTIND的值和shift命令来移动参数,如下图所示:

    其中OPTIND的值是记录参数的位置,移动-1个量正好到达参数的位置。

  • 获得用户输入

  • 基本读取

    -n选项会移掉字符串末尾的换行符,允许脚本用户紧跟其后输入数据。

    -p 参数可以在read后面跟多个变量,依次赋值

    如果read后面不跟变量,那么默认会把收到的数据放到特殊环境变量REPLY中

    -t 设置超市时间,单位秒 ,超时后read命令会以非零退出状态码退出

    -n后面的数字1 表示直接受一个字符然后就主动退出,不用再按回车键。

    -s隐藏输入,事实上数据会被显示,只是read命令将文本颜色设置成跟背景色一样

    从文件中读取

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式