linux shell 学习之第13章 处理用户输入

原创 2016年08月29日 22:41:12

第13章  处理用户输入

13.1 命令行参数

1. 命令行参数。command 参数1 参数2...。用空格隔开。在脚本中引用时,$0为程序名(脚本名称),$1为第一个参数,$2为第二个参数,以此类推,一直到第九个参数,第十个参数开始,用$(10)表示。当参数为文本字符串时,若字符串中有空格,则字符串需用引号(单引号双引号都行)引起来。

2. $0 表示程序名,存储的是整个脚本的绝对路径。basename $0 可以只获取脚本名字。

3. if [ -n $1 ]    可以检查参数是否有数据。

13.2 特殊参数表量

1. 参数计数。$# 特殊变量表示脚本命令行参数的个数。params=$#, 然后$params 就可以取得最后一个变量,或者用$(!#)也可以获得最后一个变量。

2. 获取所有数据。$* 将所有参数当作一个字符串整体。$@ 则将循环遍历所有参数。

13.3 移动变量

shift命令将移动命令行参数变量,$2变量的值将会移动到 $1,而$1变量的值将会被删除,且不能恢复。但是$0变量的值不变。shift n  表示移动n个位置。

13.4 处理选项

即command -options 形式。

1. 处理简单选项(只有选项没有参数)。用shift命令移动选项。

2. 分离参数和选项。用“--”(双破折号)分隔参数和选项。

3. 处理带值选项。

4. 使用getopt命令。getopt optstring -options parameters, optstring表示所有需要用到的选项字母,带参数的选项字母后面加个冒号。

getopt ab:cd -a -b tes3 -cd test1 test2

-a -b test3 -c -d -- test1 test2

表示有四个选项a,b,c,d, 选项b带参数,后面test1,test2都是参数。

在脚本中使用:set -- 'getopt -q ab:cd "$@"', -q表示忽略错误消息。

但是getopt不擅长处理带空格的参数,可以用getopts命令解决。

getopts optstring variable。 optstring含义同上,若要去掉错误信息,在optstring前面加个冒号。variable保存当前选项值。该命令有两个环境变量,OPTARG表示保存选项后面所跟的参数,OPTIND保存该命令正在处理的选项的位置,结合OPTIND 和shift一起使用来移动命令行参数。

getopts会合理的处理参数之间的空格,并将所有未定义的选项统一输出为问号。解析选项时,会去掉选项前面的破折号。

13.5  将选项标准化

13.6 用户的输入
主要是read命令,在脚本中使用read variable,来获取用户的输入,$varialbe 可以调用用户的输入。
echo -n, -n选项会移掉字符串末尾的换行符,允许用户紧跟其后输入数据。
read 后面可以跟多个变量,以便来获取用户的多个输入,如果用户输入的值多于变量,最后多出的值会统一分配给最后一个变量。
read -p 选项,省略echo命令并制定变量名字,可以多个变量。
如果不指定变量,read命令会将所有接收到的数据都放到特殊环境变量REPLY中。
read -t,-t可以设置超时时间。
read -n,-n选项可以对用户输入的字符计数,-n1 表示只接收用户输入的第一个字符。
read-s,隐藏方式,即用户输入的数据不在屏幕上显示,比如密码。实际上只是将用户输入字符的颜色设置成背景色一样。
cat testfile | while read line   从文件中读入,每次读取一行数据,没有数据时,read命令会退出并返回非零退出状态码。

思科CCNA第三学期第二章答案

1.哪种命令行界面 (CLI) 模式允许用户配置诸如主机名和口令等交换机参数? 用户执行模式 特权执行模式 全局配置模式 ...
  • u014253173
  • u014253173
  • 2015年02月04日 15:26
  • 2263

shell脚本学习笔记一

又开始写学习笔记了,呵呵。。。 今年打算选择一门技术系统的学习一下。编程语言、虚拟机技术、数据库、大数据、云计算在这些种类中,我选择了shell编程。为什么选择shell呢?也没有什么具体的原因。以...
  • lpioneer
  • lpioneer
  • 2014年02月25日 17:01
  • 2089

【Matlab学习笔记】【数学形态学】数字图像处理(MATLAB版)冈萨雷斯第九章学习笔记

数字图像处理(MATLAB版)冈萨雷斯第九章学习笔记,涉及重点理论概念和基础代码。...
  • u013035197
  • u013035197
  • 2015年05月03日 15:37
  • 2189

《Linux命令行与shell脚本》笔记--第13章:处理用户输入

13.1 命令行参数 命令行参数:允许在运行脚本时向命令行添加数据值 $ ./addem 10 3013.1.1 读取参数 bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数...
  • z1106609486
  • z1106609486
  • 2016年06月06日 23:08
  • 595

linux shell 处理用户输入

1.来自命令行惨
  • night_wisp
  • night_wisp
  • 2014年07月01日 11:11
  • 401

linux shell读取用户输入

变量 1 [hadoop@master test]$ name=yunix [hadoop@master test]$ echo $name yunix  2 [hadoop@master t...
  • snrqtdhuqf
  • snrqtdhuqf
  • 2012年02月08日 13:19
  • 11795

linux shell获取用户输入指定范围的单个字符的两种方法

用shell实现的,要求获取用户输一个字符a-zA-Z实现方法。 方法一: echo `echo {a..z}``echo {A..Z}` > /tmp/letterfile while re...
  • jbxue123
  • jbxue123
  • 2013年08月12日 05:58
  • 519

Linux Shell学习:使用read从标准输入中读取一行

http://www.lampbo.org/category/linux-xuexi/page/4 Linux Shell学习:使用read从标准输入中读取一行 ...
  • linxi_hnh
  • linxi_hnh
  • 2013年01月04日 11:38
  • 1029

java控制台输入cmd命令, ssh远程linux shell命令, 并打印命令输出到控制台

  • 2017年11月24日 09:51
  • 5KB
  • 下载

Linux Shell学习资料合集

  • 2017年12月05日 20:51
  • 100.66MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux shell 学习之第13章 处理用户输入
举报原因:
原因补充:

(最多只允许输入30个字)