处理用户输入

处理用户输入

       从用户处获取数据的方法包括:

l  命令行参数(添加在命令后面的数据值);

l  命令行选项(修改命令行为的单字符值);

l  直接读取键盘输入。

11.1 命令行参数

11.1.1 读取参数

       bash shell将在命令行中输入的所有参数赋值给一些特殊变量,这些变量称为位置参数(positional parameter)。其中还包括shell执行的程序的名称,位置参数通过标准数字表示,其中$0$1$2$3$4$5$6$7$8$9为前10个参数,$0为程序名称。$1为第一个参数。

       不过需要注意的是,如果要传递一个包含空格的文本字符串,则会出现问题,此时我们需要用引号括起来(单引号双引号都可以)。

       如果脚本需要的参数多于9个,那么可以继续在命令行中添加命令行参数,但是变量名称稍有变化,在第9个变量之后,必须使用大括号将变量括起来如${10}

11.1.2 读取程序名称

       $0其实是程序的完整路径,而不仅仅是程序的名称,如果希望得到程序的名称,可以使用name=`basename $0`

11.1.3 测试参数

       当脚本认为参数变量中包含数据,但实际上其中并没有数据时,极有可能会生成脚本错误消息。这种编写脚本方法很不好,好的方法是对参数进行检查来保证使用参数前确实存在数据

11.2 特殊的参数变量

11.2.1 参数计数

       特殊变量$#中存储执行脚本时包含的命令行的参数个数。

11.2.2 获取所有数据

       变量$*$@包含所有的命令行参数。

       区别是变量$*将所有参数视为一个单吃,而变量$@分别对待每个参数。

11.3 移位

       可以使用shift来改变命令行参数的相对位置。比如shift n就表示n次左移,第n个参数变为第一个参数,注意将某一个参数移位掉后,该参数值就丢失了

11.4 处理选项

11.4.1 找出选项

       shell使用双破折号指示选项列表的结束。如果发现双破折号,脚本就能够安全的将剩下的命令行参数作为参数而不是选项处理。

11.4.2 使用getopt命令

       getopt命令可以接受任意形式的命令行选项和参数列表,并自动将这些选项和参数转换为适当的格式。命令格式如下:

       getopt options optstring parameters

       选项字符串optstring是处理的关键,它定义命令行中的有效选项字母。它还定义那些选项字母需要参数值。

       首先,在选项字符串中列出将在脚本中用到的每个命令行选项字母。然后,在每个需要参数值选项字母后面放置一个冒号Getopt命令根据定义的选项字符串解析提供的参数。

       如果指定的选项不包含在选项字符串中,getopt命令会默认生成一个错误消息。可以使用-q选项忽略这个错误消息。但是注意,getopt命令选项必须在选项字符串的前面,比如-q的使用为getopt –q options optstring parameters,不然会被当做选项参数。

       Shell中使用getopt的方法为:

       set — `getopts –q ab:cd “$@”`

11.4.3 更高级的getopts命令

       getopts命令顺序的对现有的shell参数变量进行处理,而不像getopt为在命令行中找到的所有待处理选项和参数生成一个输出。

       每调用一次getopts,它值处理在命令中检测到的参数中的一个。处理完所有参数后,以大于零的退出状态退出,因此,getopts非常宜用在循环中解析所有命令行参数。

       getopts命令使用两个环境变量,OPTARG包含需要参数值的选项要使用的值,OPTIND包含的值表示getopts停止处理时在参数列表中的位置。

11.5 标准化选项

随着时间的推移,一些字母的含义已经成为一种默认的约定,遵循最小立异性原则,应该掌握这种常识。

选项

描述

-a

allls -a)显示所有对象

append

-b

set buffer/block size du

-d

debug

directoryls -d)指示目录

delete

diffrent

-D

definegcc -Dmac

-e

executesed -e ‘command’ -e ‘command1’

exclude

expression 展开对象

-f

filegrep -f file)指定读取数据的文件

forcerm -rf

-h

headerps

help 显示命令的帮助信息

-i

initialize

ignore 忽略大小写

ineractiverm -i

-I

includegcc -Ipath

-k

keeppasswd, bzip, fetchmail

kill

-l

listls -l)生成长格式输出

loadgcc -llib

-m

messagegit commit -m

-n

numberhead -n 1

-o

outputwget

-p

portssh

protocolfetchmail

-q

quitemake)以quiet模式执行

-rR

recursecp)递归处理

reversesort

-s

slientfetmail)以slient模式执行

subjectmail, mutt

size

-t

tagvi

-u

userps, fetchmail

-v

verbosetar, cp, cat

versionpatch

-V

versiongcc, hostname

-w

widthod

warningflex

-x

启用调试 -d

-y

yesyum update -y)设置所有提问的回答为yes

-z

启用压缩(bzip, tar

 

11.6 获取用户输入

11.6.1 基本读取

       read命令接收标准输入或其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。

       read可以跟一个-p选项,允许在read命令行中指定一个提示。

11.6.2 计时

       使用read后,脚本很可能会停下来一直等待脚本用户输入数据。此时,可以使用-t选项指定一个计时器,-t选项指定read命令等待输入的秒数,当计时器时数满时,read命令返回一个非零退出状态。

       例如 read –t 5 –p “Please input your name : ” name

11.6.3 默读

       比如输入密码,不希望输入的数据显示在监视器上,可以使用-s选项。实际上数据还是显示的,只是read命令将文本颜色设置成了与背景颜色相同的颜色。

11.6.4 读取文件

       使用read命令读取linux系统上存储在文件中的数据,每调用一次read命令,都会读取文件中的一行文本,当文件中没有可读的行时,read命令将以非零退出状态退出。

       较好的方法:cat file | while read line

How to read a book

如何阅读一本书  范多伦,艾德勒

法国学者巴斯卡(Pascal)在三百年前就说过:读得太快或太慢,都一无所获。注:读书不能太快或太慢!要有所把握

介绍四种不同层次的阅读基础阅读(elementary reading)、检视阅读(inspectional reading)、分析阅读、主题阅读(syntopical reading)

注:四种层次的阅读

阅读越主动,效果越好。这个读者比另一个读者更主动一些,他在阅读世界里面的探索能力就更强一些,收获更多一些,因而也更高明一些。读者对他自己,以及自己面前的书籍,要求的越多,获得的就越多。

注:主动阅读

阅读的目标:为获得资讯而读,以及为求得理解

注:阅读的目标

运用阅读以增加资讯与洞察力,与运用阅读增长理解力

注:阅读的目标

要避免这样的错误以为读得多就是读得好的错误我们必须要区分出各种不同的阅读形态。这种区分对阅读的本身,以及阅读与一般教育的关系都有很重大的影响。

注:读的多并不一定是读的好

敏锐的观察、灵敏可靠的记忆、想像的空间,再者当然就是训练有素的分析、省思能力。这么说的理由在于:阅读也就是一种发现虽然那是经过帮助,而不是未经帮助的一个过

注:阅读的技巧

二个层次的阅读我们称之为检视阅读(inspectional reading)。特点在强调时间。在这个阅读层次,学生必须在规定的时间内完成一项阅读的功课

注:第二个层次

分析阅读就是全盘的阅读、完整的阅读,或是说优质的阅读你能做到的最好的阅读方式。如果说检视阅读是在有限的时间内,最好也最完整的阅读,那么分析阅读就是在无限的时间里,最好也最完整的阅读

注:第三个层次,分析阅读

如比较阅读(comparative reading)。在做主题阅读时,阅读者会读很多书,而不是一本书,并列举出这些书之间相关之处,提出一个所有的书都谈到的主题。但只是书本字里行间的比较还不够。主题阅读涉及的远不止此。借助他所阅读的书籍,主题阅读者要能够架构出一个可能在哪一本书里都没提过的主题分析。因此,很显然的,主题阅读是最主动、也最花力气的一种阅读。

注:最复杂的主题阅读

层次所可能碰到的各种紧急状况与问题的程度就会明白了。然而,除非我们在所有的阅读层次都投下努力,否则我们社会里有关阅读的整体。特别就一本教人如何阅读的书来说,它的读者必须有某种程度的阅读能力才行。

 (1)先看书名页

注:略读的方法1

2)研究目录页,对这本书的基本架构做

注:略读的方法2

3)如果书中附有索引,也要检阅一下大多数论说类的书籍都会有索引

注:略读的方法3索引

4)如果那是本包着书衣的新书,不妨读一下出版者的介绍

注:略读的方法4出版商说明

(5)从你对一本书的目录很概略,甚至有点模糊的印象当中,开始挑几个看来跟主题息息相关的篇章来看。如果这些篇章在开头或结尾有摘要说明(很多会有),就要仔细地阅读这些说明

注:略读的方法5随便挑几章看看

6)最后一步,把书打开来,东翻翻西翻翻,念个一两段.有时候连续读几页,但不要太多。就用这样的方法把全书翻过一遍,随时寻找主要论点的讯号,留意主题的基本脉动。最重要的是,不要忽略最后的两三页。就算最后有后记,一本书最后结尾的两三页也还是不可忽视的

注:略读的方法6主动寻找资讯

头一次面对一本难读的书的时候,从头到尾先读完一遍,碰到不懂的地方不要停下来查询或思索。

  只注意你能理解的部分,不要为一些没法立即了解的东西而停顿。继续读下去,略过那些不懂的部分,很快你会读到你看得懂的地方。集中精神在这个部分。继续这样读下去。将全书读完,不要被一个看不懂的章节、注解、评论或参考资料阻挠或泄气。如果你让自己被困住了,如果你容许自己被某个顽固的段落绑住了,你就是被打败了。在大多数情况里,你一旦和它纠缠,就很难脱困而出。在读第二遍的时候,你对那个地方的了解可能会多一些,但是在那之前,你必须至少将这本书先从头到尾读一遍才行。

注:读书对的方向!不能因为某个章节不懂而停滞不前,至少完整读下来,多注意那些理解的章节

亚当·斯密(Adam Smith)的经典作品《国富论》(The Wealth of Nations

注:国富论

每一本书,不论是多么难读的书,在无关紧要的间隙部分就可以读快一点。而一本好书,总会包含一些比较困难,应该慢慢阅读的内容

注:快慢的把握

要矫正眼睛逗留于一点的工具有很多种,有些很复杂又很昂贵。无论如何,任何复杂的工具其实都比不上你的一双手来得有用,你可以利用双手训练自己的眼睛,跟着章节段落移动得越来越快。你可以自己做这样的训练:将大拇指与食指、中指合并在一起,用这个指针顺着一行一行的字移动下去,速度要比你眼睛感觉的还要快一点。强迫自己的眼睛跟着手部的动作移动。一旦你的眼睛能跟着手移动时,你就能读到那些字句了。继续练习下去,继续增快手的动作,等到你发觉以前,你的速度已经可以比以前快两三倍了

注:矫正眼睛经常逗留,跟不上脑袋的速度,用手做工具

在阅读一本书的时候,慢不该慢到不值得,快不该快到有损于满足与理解。不论怎么说,阅读的速度,不论是快还是慢,只不过是阅读问题一个微小的部分而

注:阅读时的速度把握

最后,在第一次阅读一本难读的书时,不要企图了解每一个字句。这是最最重要的一个规则。这也是检视阅读的基本概念。不要害怕,或是担忧自己似乎读得很肤浅。就算是最难读的书也快快地读一遍。当你再读第二次时,你就已经准备好要读这本书了。

注:对难懂的书先速读一遍,然后  再研究第二遍

在阅读的时候想要保持清醒,或昏昏入睡,主要看你的阅读目标是什么。如果你的阅读目标是获得利益不论是心灵或精神上的成长你就得保持清醒。这也意味着在阅读时要尽可能地保持主动,同时还要做一番努力而这番努力是会有回馈的。

注:阅读的时候保持清醒

关于一本书,你一定要提出四个主要的问题。

  (1)整体来说,这本书到底在谈些什么?你一定要想办法找出这本书的主题,作者如何依次发展这个主题,如何逐步从核心主题分解出从属的关键议题来。

  (2)作者细部说了什么,怎么说的?你一定要想办法找出主要的想法、声明与论点。这些组合成作者想要传达的特殊讯息。

  (3)这本书说得有道理吗?是全部有道理,还是部分有道理?除非你能回答前两个问题,否则你没法回答这个问题。在你判断这本书是否有道理之前,你必须先了解整本书在说些什么才行。然而,等你了解了一本书,如果你又读得很认真的话,你会觉得有责任为这本书做个自己的判断。光是知道作者的想法是不够的。

  (4)这本书跟你有什么关系?如果这本书给了你一些资讯,你一定要问问这些资讯有什么意义。为什么这位作者会认为知道这件事很重要?你真的有必要去了解吗?如果这本书不只提供了资讯,还启发了你,就更有必要找出其他相关的、更深的含意或建议,以获得更多的启示。

注:读书时要提出的四个问题

如何让一本书真正属于你自己

  如果你有读书时提出问题的习惯,那就要比没有这种习惯更能成为一个好的阅读者。但是,就像我们所强调的,仅仅提出问题还不够。你还要试着去回答问题。理论上来说,这样的过程可以在你脑海中完成,但如果你手中有一枝笔会更容易做到。在你阅读时,这枝笔会变成提醒你的一个讯号。

注:如何让一本书属于你

俗话说:你必须读出言外之意,才会有更大的收获。而所谓阅读的规则,就是用一种比较正式的说法来说明这件事而已。此外,我们也鼓励你写出言外之意。不这么做,就难以达到最有效的阅读的境界。

  你买了一本书,就像是买了一项资产,和你付钱买衣服或家具是一样的。但是就一本书来说,付钱购买的动作却不过是真正拥有这本书的前奏而已。要真正完全拥有一本书,必须把这本书变成你自己的一部分才行,而要让你成为书的一部分最好的方法书成为你的一部分和你成为书的一部分是同一件事就是要去写下来。

  为什么对阅读来说,在书上做笔记是不可或缺的事?第一,那会让你保持清醒不只是不昏睡,还是非常清醒。其次,阅读,如果是主动的,就是一种思考,而思考倾向于用语言表达出来不管是用讲的还是写的。一个人如果说他知道他在想些什么,却说不出来,通常是他其实

注:让书成为自己的

知道自己在想些什么。第三,将你的感想写下来,能帮助你记住作者的思想

做笔记有各式各样,多彩多姿的方法。以下是几个可以采用的方

注:做笔记的方法

三种做笔记的方

注:三种做笔记的方法

培养阅读的习惯

  所谓艺术或技巧,只属于那个能养成习惯,而且能依照规则来运作的人。这也是艺术家或任何领域的工匠与众不同之处。要养成习惯,除了不断地运作练习之外,别无他法。这也就是我们通常所说的,从实际去做中学习到如何去做的道

注:培养阅读的习惯

第七章 透视一本书

  每一本书的封面之下都有一套自己的骨架。作为一个分析阅读的读者,你的责任就是要找出这个骨

注:透视一本书的骨架

一本好书,就像一栋好房子,每个部分都要很有秩序地排列起来。每个重要部分都要有一定的独立

注:好书像一个好房子

分析阅读的第一阶段,或,找出一本书在谈些什么的四个规则:

注:找出一本书在说什么的方法

一般来说,阅读的过程与商业上的过程正好相反。商人通常是在找出提案是什么后,才会达成共识。但是读者却要先与作者达成共识,才能明白作者的主旨是什么,以及他所声明的是什么样的判断

注:判断作者的主旨

 (5)诠释作者使用的关键字,与作者达成共识。

  (6)从最重要的句子中抓出作者的重要主旨。

  (7)找出作者的论述,重新架构这些论述的前因后果,以明白作者的主张。

  (8)确定作者已经解决了哪些问题,还有哪些是未解决的。在未解决的问题中,确定哪些是作者认为自己无法解决的问题。

注:分析阅读的第二个阶段

我们的建议尤其适用于所谓巨著。一般人总是抱着热忱想要阅读巨著,但是当他绝望地感觉到自己无法理解这本书时,热忱很快便消退了。其中一个原因,当然是因为一般人根本不知道要如何好好地阅读一本书。但还不只如此,还有另一个原因:他们认为自己应该能够读懂自己所挑选的第一本书,用不着再读其他相关的著作。

注:巨著读法

许多伟大的作品不只是互相有关联,而且在写作时还有特定的先后顺序,这都是不该忽略的事。后人的作品总是受到前人的影响。如果你先读前一位的作品,他可能会帮助你了解后人的作品。阅读彼此相关的书籍,依照写作的时间顺序来读,对你了解最后写的作品有很大帮助。这就是外在辅助阅读的基本常识与规则。

注:读巨著前先读一些基础著作

读一本好书,却会让你的努力有所回报。最好的书对你的回馈也最多。当然,这样的回馈分成两种:第一,当你成功地阅读了一本难读的好书之后,你的阅读技巧必然增进了。第二长期来说这一点更重要一本好书能教你了解这个世界以及你自己。你不只更懂得如何读得更好,还更懂得生命。你变得更有智慧,而不只是更有知识像只提供讯息的书所形成的那样。你会成为一位智者,对人类生命中永恒的真理有更深刻的体认。

注:读一本好书的好处

好的阅读,也就是主动的阅读,不只是对阅读本身有用,也不只是对我们的工作或事业有帮助,更能帮助我们的心智保持活力与