shell输入与输出

shell输入与输出
shell输入与输出

第5章shell输入与输出

在s h e l l脚本中,可以用几种不同的方式读入数据:可以使用标准输入—缺省为键盘,或者指定一个文件作为输入。对于输出也是一样:如果不指定某个文件作为输出,标准输出总是和终端屏幕相关联。如果所使用命令出现了什么错误,它也会缺省输出到屏幕上,如果不想把这些信息输出到屏幕上,也可以把这些信息指定到一个文件中。

大多数使用标准输入的命令都指定一个文件作为标准输入。如果能够从一个文件中读取数据,何必要费时费力地从键盘输入呢?

本章我们将讨论以下内容:

? 使用标准输入、标准输出及标准错误。

? 重定向标准输入和标准输出。

本章全面讨论了s h e l l对数据和信息的标准输入、标准输出,对重定向也做了一定的介绍。

5.1 echo

使用e c h o命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:

echo string

e c h o命令有很多功能,其中最常用的是下面几个:

\c 不换行。

\f 进纸。

\t 跳格。

\n 换行。

如果希望提示符出现在输出的字符串之后,可以用:

上面的命令将会有如下的显示:

其中“□”是光标。

如果想在输出字符之后,让光标移到下一行,可以用:

$e c h o"T h e r e d p e n r a n o u t o f i n k"

还可以用e c h o命令输出转义符以及变量。在下面的例子中,你可以让终端铃响一声,显示出$ H O M E目录,并且可以让系统执行t t y命令(注意,该命令用键盘左上角的符号,法语中的抑音符引起来,不是单引号,)。

(续)

如果希望在e c h o命令输出之后附加换行,可以使用\ n选项:

运行时会出现如下输出:

还可以在e c h o语句中使用跳格符,记住别忘了加反斜杠\:

如果想把一个字符串输出到文件中,使用重定向符号>。在下面的例子中一个字符串被重定向到一个名为m y f i l e的文件中:

$e c h o"T h e l o g f i l e s h a v e a l l b e e n d o n e">m y f i l e

或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:

$e c h o"$L O G N A M E c a r r i e d t h e m o u t a t`d a t e`">>m y f i l e

现在让我们看一下m y f i l e文件中的内容:

初涉s h e l l的用户常常会遇到的一个问题就是如何把双引号包含到 e c h o命令的字符串中。引号是一个特殊字符,所以必须要使用反斜杠\来使s h e l l忽略它的特殊含义。假设你希望使用e c h o命令输出这样的字符串:“/ d e v/r m t0”,那么我们只要在引号前面加上反斜杠\即可:

$e c h o"\"/d e v/r m t0"\"

" /d e v/r m t0"

5.2 read

可以使用r e a d语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只

指定了一个变量,那么r e a d将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。

它的一般形式为:

read v a r i b l e1 v a r i b l e2 ...

在下面的例子中,只指定了一个变量,它将被赋予直至回车之前的所有内容:

在下面的例子中,我们给出了两个变量,它们分别被赋予名字和姓氏。s h

e

l

l将用空格作为变量之间的分隔符:

如果输入文本域过长,Shell 将所有的超长部分赋予最后一个变量。下面的例子,假定要

读取变量名字和姓,但这次输入三个名字;结果如下;

在上面的例子中,如果我们输入字符串John Lemon Doe

,那么第一个单词将被赋给第一

个变量,而由于变量数少于单词数,字符串后面的部分将被全部赋给第二个变量。

在编写s h e l l脚本的时候,如果担心用户会对此感到迷惑,可以采用每一个r e a d语句只给一个变量赋值的办法:

用户在运行上面这个脚本的时候,就能够知道哪些信息赋给了哪个变量。

c a t 是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控制字符。在使用c a t 命令时要注意,它不会在文件分页符处停下来;它会一下显示完整个文件。如果希望每次显示一页,可以使用m o r e 命令或把c a t 命令的输出通过管道传递到另外一个具有分页功能的命令中,请看下面的例子:

$ cat myfile | more

$ cat myfile | pg

c a t 命令的一般形式为:

c a t [o p t i o n s ] f i l e n a m e 1 ... f i l e n a m e 2 ...

c a t 命令最有用的选项就是:

-v 显示控制字符

如果希望显示名为m y f i l e 的文件,可以用:

$ cat myfile

如果希望显示m y f i l e 1、m y f i l e 2、m y f i l e 3这三个文件,可以用:

$ c a t m y f i l e 1 m y f i l e 2 m y f i l e 3

如果希望创建一个名为b i g f i l e 的文件,该文件包含上述三个文件的内容,可以把上面命令的输出重定向到新文件中:

$ c a t m y f i l e 1 m y f i l e 2 m y f i l e 3 > b i g f i l e

如果希望创建一个新文件,并向其中输入一些内容,只需使用 c a t 命令把标准输出重定向到该文件中,这时c a t 命令的输入是标准输入—键盘,你输入一些文字,输入完毕后按< C T R L -D >结束输入。这真是一个非常简单的文字编辑器!

还可以使用c a t 命令来显示控制字符。这里有一个对从D O S 机器上f t p 过来的文件进行检察的例子,在这个例子中,所有的控制字符< C T R L -M >都在行末显示了出来。

有一点要提醒的是,如果在敲入了c a t 以后就直接按回车,该命令会等你输入字符。如果你本来就是要输入一些字符,那么它除了会在你输入时在屏幕上显示以外,还会再回显这些下载

内容;最后按< C T R L -D >结束输入即可。

5.4 管道可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠|表示。它的一般形式为:

命令1 |命令2

其中|是管道符号。

在下面的例子中,在当前目录中执行文件列表操作,如果没有管道的话,所有文件就会显示出来。当s h e l l 看到管道符号以后,就会把所有列出的文件交给管道右边的命令,因此管道的含义正如它的名字所暗示的那样:把信息从一端传送到另外一端。在这个例子中,接下来g r e p 命令在文件列表中搜索q u a r t e r 1.d o c :

让我们再来用一幅图形象地讲解刚才的例子(见图5 -1):图5-1 管道s

e d 、

a w k 和g

r e p 都很适合用管道,特别是在简单的一行命令中。在下面的例子中,w h o 命令的输出通过管道传递给a w k 命令,以便只显示用户名和所在的终端。

如果你希望列出系统中所有的文件系统,可以使用管道把 d f 命令的输出传递给a w k 命令,a w k 显示出其中的第一列。你还可以再次使用管道把a w k 的结果传递给g r e p 命令,去掉最上面的题头f i l e s y s t e m 。

当然,你没准还会希望只显示出其中的分区名,不显示/ d e v /部分,这没问题;我们只要在后面简单地加上另一个管道符号和相应的s e d 命令即可。

这就是管道

Is 命令的输出

在这个例子中,我们先对一个文件进行排序,然后通过管道输送到打印机。$ sort myfile | lp 5.5 tee t e e 命令作用可以用字母T 来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。

它的一般形式为:

tee -a files

其中,- a 表示追加到文件末尾。当执行某些命令或脚本时,如果希望把输出保存下来,t e e 命令非常方便。

下面我们来看一个例子,我们使用w h o 命令,结果输出到屏幕上,同时保存在w h o .o u t 文件中:

可以用图5 -2来表示刚才的例子。

图5-2 tee

在下面的例子中,我们把一些文件备份到磁带上,同时将所备份的文件记录在t a p e .l o g 文件中。由于需要不断地对文件进行备份,为了保留上一次的日志,我们在t e e 命令中使用了- a 选项。

在上面的例子中,第一行末尾的反斜杠\告诉s h e l l 该命令尚未结束,应从下面一行继续读入该命令。

可以在执行脚本之前,使用一个e c h o 命令告诉用户谁在执行这个脚本,输出结果保存在

第5章s h e l l 输入与输出下载screen

who 命令的输出$ who

who.out

什么地方。如果不想把输出重定向到文件中,可以不这样做,而是把它定向到某个终端上。在下面的例子中,一个警告被发送到系统控制台上,表明一个磁盘清理进程即将运行。

$ e c h o "s t a n d -b y d i s k c l e a n u p s t a r t i n g i n 1 m i n u t e "| t e e /d e v /c o n s o l e 可以让不同的命令使用同一个日志文件,不过不要忘记使用- a 选项。

5.6 标准输入、输出和错误

当我们在s h e l l 中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,s h e l l 同时也给出了相应的文件名。

下面就是这些文件描述符及它们通常所对应的文件名:

文件文件描述符

输入文件—标准输入0

输出文件—标准输出1

错误输出文件—标准错误

2系统中实际上有1 2个文件描述符,但是正如我们在上表中所看到的,0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。

5.6.1 标准输入

标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。

5.6.2 标准输出

标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。

5.6.3 标准错误

标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。你可能会问,为什么会有一个专门针对错误的特殊文件?这是由于很多人喜欢把错误单独保存到一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。

如果没有特别指定文件说明符,命令将使用缺省的文件说明符(你的屏幕,更确切地说是你的终端)。

5.7 文件重定向

在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件

重定向。表5 -1列出了最常用的重定向组合,并给出了相应的文件描述符。

在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。为了完整起见,我们在表5 -1中列出了两种方法。

表5-1 常用文件重定向命令

command > filename把标准输出重定向到一个新文件中

command >> filename把标准输出重定向到一个文件中(追加)

command 1 > fielname把标准输出重定向到一个文件中

command > filename 2>&1把标准输出和标准错误一起重定向到一个文件中

command 2 > filename把标准错误重定向到一个文件中

command 2 >> filename把标准输出重定向到一个文件中(追加)

command >> filename 2>&1把标准输出和标准错误一起重定向到一个文件中(追加)

command < filename >filename2 c o m m a n d命令以f i l e n a m e文件作为标准输入,以f i l e n a m e2文件

作为标准输出

command < filename c o m m a n d命令以f i l e n a m e文件作为标准输入

command << delimiter从标准输入中读入,直至遇到d e l i m i t e r分界符

command <&m把文件描述符m作为标准输入

command >&m把标准输出重定向到文件描述符m中

command <&-关闭标准输入

5.7.1 重定向标准输出

让我们来看一个标准输出的例子。在下面的命令中,把/ e t c/p a s s w d文件中的用户I D域按照用户命排列。该命令的输出重定向到s o r t.o u t文件中。要提醒注意的是,在使用s o r t命令的时候(或其他含有相似输入文件参数的命令),重定向符号一定要离开s o r t命令两个空格,否则该命令会把它当作输入文件。

$c a t p a s s w d|a w k-F:'{p r i n t$1}'|s o r t1>s o r t.o u t

从表5 -1中可以看出,我们也可以使用如下的表达方式,结果和上面一样:

$c a t p a s s w d|a w k-F:'{p r i n t$1}'|s o r t>s o r t.o u t

可以把很多命令的输出追加到同一文件中。

在上面的例子中,所有的目录名和以a c c o u n t开头的文件名都被写入到f i l e.o u t文件中。

如果希望把标准输出重定向到文件中,可以用> f i l e n a m e。在下面的例子中,l s命令的所有输出都被重定向到l s.o u t文件中:

$ ls >ls.out

如果希望追加到已有的文件中(在该文件不存在的情况下创建该文件),那么可以使用> >f i l e n a m e:

如果想创建一个长度为0的空文件,可以用' >f i l e n a m e':

$ >myfile

5.7.2 重定向标准输入

可以指定命令的标准输入。在a w k 一章就会遇到这样的情况。下面给出一个这样的例子:$ sort < name.txt

在上面的命令中,s o r t 命令的输入是采用重定向的方式给出的,不过也可以直接把相应的文件作为该命令的参数:

$ s o r t n a m e.t x t

在上面的例子中,还可以更进一步地通过重定向为s o r t 命令指定一个输出文件n a m e .o u t 。这样屏幕上将不会出现任何信息(除了错误信息以外):

$ s o r t n a m e.o u t

在发送邮件时,可以用重定向的方法发送一个文件中的内容。在下面的例子中,用户l o u i s e 将收到一个邮件,其中含有文件c o n t e n t s .t x t 中的内容:

$ mail louise < contents.txt

重定向操作符command << delimiter 是一种非常有用的命令,通常都被称为“此处”文挡。我们将在本书后面的章节深入讨论这一问题。现在只介绍它的功能。s h e l l 将分界符d e l i m i t e r 之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符,s h e l l 就知道输入结束了。这一命令对于自动或远程的例程非常有用。可以任意定义分界符d e l i m i t e r ,最常见的是E O F ,而我最喜欢用M A Y D A Y ,这完全取决于个人的喜好。还可以在< <后面输入变量。下面给出一个例子,我们创建了一个名为m y f i l e 的文件,并在其中使用了T E R M 和L O G N A M E 变量。

5.7.3 重定向标准错误

为了重定向标准错误,可以指定文件描述符2。让我们先来看一个例子,因为举例子往往

会让人更容易明白。在这个例子中,g r e p 命令在文件m i s s i l e s 中搜索t r i d e n t 字符串:

g r e p 命令没有找到该文件,缺省地向终端输出了一个错误信息。现在让我们把错误重定向到文件/ d e v /n u l l 中(实际就上是系统的垃圾箱):

$ g r e p "t r i d e n t " m i s s i l e s 2>/d e v /n u l l

这样所有的错误输出都输送到了/ d e v /n u l l ,不再出现在屏幕上。

如果你在对更重要的文件进行操作,可能会希望保存相应的错误。下面就是一个这样的例子,这一次错误被保存到g r e p .e r r 文件中:

还可以把错误追加到一个文件中。在使用一组命令完成同一个任务时,这种方法非常有

用。在下面的例子中,两个g r

e p命令把错误都输出到同一个文件中;由于我们使用了

> >符号

进行追加,后面一个命令的错误(如果有的话)不会覆盖前一个命令的错误。

5.8 结合使用标准输出和标准错误

一个快速发现错误的方法就是,先将输出重定向到一个文件中,然后再把标准错误重定

向到另外一个文件中。下面给出一个例子:

我有两个审计文件,其中一个的确存在,而且包含一些信息,而另一个由于某种原因已

经不存在了(但我不知道)。我想把这两个文件合并到a c c o u n t s.o u t文件中。

$c a t a c c o u n t_q t r.d o c a c c o u n t_e n d.d o c1>a c c o u n t s.o u t2>a c c o u n t s.e r r 现在如果出现了错误,相应的错误将会保存在a c c o u n t s.e r r文件中。

我事先并不知道是否存在a c c o u n t_e n d.d o c文件,使用上面的方法能够快速发现其中的错误。

5.9 合并标准输出和标准错误

在合并标准输出和标准错误的时候,切记s h e l l是从左至右分析相应的命令的。下面给出

一个例子:

$c l e a n u p>c l e a n u p.o u t2>&1

在上面的例子中,我们将c l e a n u p脚本的输出重定向到c l e a n u p.o u t文件中,而且其错误也

被重定向到相同的文件中。

$g r e p"s t a n d a r d"*>g r e p.o u t2>&1

在上面的例子中,g r e p命令的标准输出和标准错误都被重定向到g r e p.o u t文件中。你在使

用前面提到的“此处”文挡时,有可能需要把所有的输出都保存到一个文件中,这样万一出

现了错误,就能够被记录下来。通过使用2 >&1就可以做到这一点,下面给出一个例子:上面的例子演示了如何把所有的输出捕捉到一个文件中。在使用 c a t命令的时候,这可能

没什么用处,不过如果你使用“此处”文挡连接一个数据库管理系统(例如使用i s q l连接s y b a s e)或使用f t p,这一点就变得非常重要了,因为这样就可以捕捉到所有的错误,以免这些错误在屏幕上一闪而过,特别是在你不在的时候。

5.10 exec

e x e c命令可以用来替代当前s h e l l;换句话说,并没有启动子s h e l l。使用这一命令时任何现有环境都将会被清除,并重新启动一个s h e l l。它的一般形式为:

exec command

其中的c o m m a n d通常是一个s h e l l脚本。

我所能够想像得出的描述e x e c命令最贴切的说法就是:它践踏了你当前的s h e l l。

当这个脚本结束时,相应的会话可能就结束了。 e x e c命令的一个常见用法就是在用户的. p r o f i l e最后执行时,用它来执行一些用于增强安全性的脚本。如果用户的输入无效,该

s h e l l将被关闭,然后重新回到登录提示符。e x e c还常常被用来通过文件描述符打开文件。

记住,e x e c在对文件描述符进行操作的时候(也只有在这时),它不会覆盖你当前的s h e l l。

5.11 使用文件描述符

可以使用e x e c命令通过文件描述符打开和关闭文件。在下面的例子中,我选用了文件描述符4,实际上我可以在4到9之间任意选择一个数字。下面的脚本只是从s t o c k.t x t文件中读了两行,然后把这两行回显出来。

该脚本的第一行把文件描述符4指定为标准输入,然后打开s t o c k.t x t文件。接下来两行的作用是读入了两行文本。接着,作为标准输入的文件描述符4被关闭。最后,l i n e1和l i n e2两个

变量所含有的内容被回显到屏幕上。

下面是这个小小的股票文件s t o c k

.t x t的内容:

下面是该脚本的运行结果:

上面是一个关于文件描述符应用的简单例子。它看起来没有什么用处。在以后讲解循环的时候,将会给出一个用文件描述符代替c p命令拷贝文本文件的例子。

5.12 小结

本书通篇可见重定向的应用,因为它是s h e l l中的一个重要部分。通过重定向,可以指定命令的输入;如果有错误的话,可以用一个单独的文件把它们记录下来,这样就可以方便快捷地查找问题。

这里没有涉及的就是文件描述符的应用( 3~9 )。要想应用这些文件描述符,就一定会涉及循环方法,在后面讲到循环方法的时候,我们会再次回过头来讲述有关文件描述符的问题。

Microsoft Word - 输入输出流类库编程练习题 - 首都

注意:每道题的难度等级不同,*越多,难度等级越高。可以根据自己的能力,选做恰当难度的题。 8.1改写第五章编程练习5.4题的程序,使该程序在程序结束之前,先判断字典内容是否发 生了变化(单词的添加、修改、删除)。如果字典内容已经被修改,则提示是否保存修改后的新字典;若选择保存,则将字典的全部内容写入一个纯文本文件,该文件可以命名为dictionary.txt。每次程序重新运行时,先尝试打开dictionary.txt。如果该文件存在,则打开文件,并从该文本文件中输入产生一个字典。 难度等级:** 8.2编写一个用于统计英文纯文本文件的各项信息:文件内容的总字符数(包括标点符号), 单词个数,文本行数。 要求: 1.提示用户输入一个扩展名为.txt的纯文本文件名,如果指定文件存在,则打开该文 件,否则显示错误提示信息。 2.统计文件内容的上述信息,并显示所统计的信息。信息的显示格式自行确定,例如 可以按如下格式显示: 文件名:Information.txt 字符数:4854 单词数:853 文本行数:56 3.每个文件的信息显示后,提示用户是否继续统计其他文本文件,如果继续,则重复 1和2中的操作。 提示: 1.判断文本行的依据可以是每行的结尾应为‘\n’。 难度等级:*

8.3编写一个程序用于某大学的某信息专业学生的基础课成绩的录入、显示和相应数据文件 的读写。 要求: 1.成绩的按如下顺序录入: ⑴在学生成绩录入之前,先通过输入确定基础课程的门数和课程名称。例如: 基础课程1:高等数学 基础课程2:大学物理 基础课程3:大学英语 基础课程4:C语言程序设计 基础课程5:数据结构 … ⑵每个学生的成绩录入的内容包括学生的姓名、学号、性别和各门课程的成绩。成 绩按照A,B,C,D四个等级划分。录入格式可以参照如下: 姓名:李建国 学号:200410001 性别:男 高等数学:C 大学物理:B 大学英语:C C语言程序设计:B 数据结构:A … 2.保存学生成绩数据的文件的种类和结构、内容如下 ⑴课程信息索引文件courses.inx用于保存所有课程的索引信息,每门课程的索 引信息由课程索引序号和课程名组成。例如: 课程序号课程名 1高等数学 2大学物理 3大学英语 4C语言程序设计 5数据结构 … 注意,课程门数不得少于5门。 ⑵学生信息文件student.inx用于保存所有学生的索引信息,每个学生的索引信息 由学号和学生基本信息(姓名、性别)组成。例如: 学生学号学生基本信息 200410001李建国,男 … ⑶分课程成绩数据索引文件XXX.inx用于保存一门课程的所有学生成绩的索引信 息,每个学生的成绩索引信息由学号和成绩等级组成。每门课程有一个成绩数据 索引文件,文件名XXX由课程名确定。例如: 文件名:“高等数学.inx” 学生学号成绩等级 200410001C

linux+shell脚本语言基础知识

linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example

项目管理 输入输出 方法工具 汇总

项目整体管理(Project Integration Management)制定项目章程(Develop Project Charter) 输入工具与技术输出合同、项目工作说明书项目选择方法 企业环境因素项目管理方法项目章程 组织过程资产项目管理信息系统 专家判断 制定初步项目范围说明书(Develop Preliminary Project Scope Statement) 输入工具与技术输出 项目章程项目管理方法 项目工作说明书项目管理信息系统项目初步范围说明书 企业环境因素专家判断 组织过程资产 制定项目管理计划(Develop Project Management Plan) 输入工具与技术输出初步项目范围说明书项目管理方法 项目管理各个过程项目管理信息系统项目管理计划 企业环境因素专家判断 组织过程资产 指导与管理项目执行(Direct and Manage Project Execution) 输入工具与技术输出 项目管理计划可交付成果 批准的纠正措施请求的变更 批准的预防措施项目管理方法实施的变更请求 批准的变更请求项目管理信息系统实施的纠正措施 批准的缺陷补救实施的预防措施 确认的缺陷补救实施的缺陷补救 行政收尾程序工作绩效信息

监控项目工作(Monitor and Control Project Work) 输入工具与技术输出项目管理计划项目管理方法推荐的纠正措施 工作绩效信息项目管理信息系统推荐的预防措施 否决的变更请求挣值管理预测 专家判断推荐的缺陷修复 变更申请 整体变更控制(Integrated Change Control) 输入工具与技术输出项目管理计划批准的变更请求 变更请求否决的变更请求 工作绩效信息项目管理方法项目管理计划(更新) 推荐的预防措施项目管理信息系统项目范围说明书(更新)推荐的纠正措施专家判断批准的纠正措施 推荐的缺陷修复批准的预防措施 交付物批准的缺陷补救 确认的缺陷补救 交付物 项目收尾(Close Project) 输入工具与技术输出项目管理计划管理收尾规程 合同文件合同收尾规程 企业环境因素项目管理方法最终的产品、服务和 组织过程资产项目管理信息系统项目成果 工作绩效信息专家判断组织过程资产更新 可交付物

Shell脚本编写基础

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 一、什么是shell 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。 当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的https://www.360docs.net/doc/52488826.html,所做的一样,所不同的是,在DOS中,https://www.360docs.net/doc/52488826.html,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。 二、几种流行的shell 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型: #echo $SHELL $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令: #shell-name 来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。 使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍: 1.ash ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。 2.bash bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色: (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 (2)自动通过查找匹配的方式给出以某字符串开头的命令。 (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。 3.ksh ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。 4.csh

PMP项目管理五大过程组及42个过程输入_输出_工具与技术

P M P项目管理五大过程组及42个过程输入_ 输出_工具与技术 -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

项目管理五大过程组 过程总体描述 启动过程组:获得授权,定义一个新项目或现有项目的一个新阶段,正式开始该项目或阶段的一组过程。 规划过程组:明确项目范围,优化目标,为实现目标而制定行动方案的一组过程。 执行过程组:完成项目管理计划中确定的工作以实现项目目标的一组过程。 监控过程组:跟踪、审查和调整项目进展与绩效,识别必要的计划变更并启动相应变更的一组过程。 收尾过程组:为完结所有过程组的所有活动以正式结束项目或阶段而实施的一组过程。单个项目的项目管理过程 一、启动过程组 1、制定项目章程 制定项目章程是制定一份正式批准项目或阶段的文件,并记录能反映干系人的需要和期望的初步要求的过程。在多阶段项目中,这一过程可用来确认或优化在以前的制定项目章程过程中所做的相关决策。

2、识别干系人 识别干系人是识别所有受项目影响的人或组织,并记录其利益、参与情况和影响项目成功的过程。 二、规划过程组 3、制定项目管理计划 制定项目管理计划是对定义、编制、整合和协调所有子计划所必需的行动进行记录的过程。项目管理计划是关于如何对项目进行规划、执行、监控和收尾的主要信息来源。 4、收集需求 收集需求是为实现项目目标而定义并记录干系人的需求的过程。

5、定义范围 定义范围是制定项目和产品的详细描述的过程。 6、创建工作分解结构(WBS) 创建工作分解结构是把项目可交付成果和项目工作分解成较小的、更易于管理的组成部分的过程。 7、定义活动 定义活动是识别为完成项目可交付成果而需采取的具体行动的过程。

PMP项目管理五大过程组和42个过程输入-输出-工具和技术

项目管理五大过程组 过程总体描述 启动过程组:获得授权,定义一个新项目或现有项目的一个新阶段,正式开始该项目或阶段的一组过程。规划过程组:明确项目范围,优化目标,为实现目标而制定行动方案的一组过程。 执行过程组:完成项目管理计划中确定的工作以实现项目目标的一组过程。 监控过程组:跟踪、审查和调整项目进展与绩效,识别必要的计划变更并启动相应变更的一组过程。 收尾过程组:为完结所有过程组的所有活动以正式结束项目或阶段而实施的一组过程。 单个项目的项目管理过程 一、启动过程组 1、制定项目章程 制定项目章程是制定一份正式批准项目或阶段的文件,并记录能反映干系人的需要和期望的初步要求的过程。在多阶段项目中,这一过程可用来确认或优化在以前的制定项目章程过程中所做的相关决策。 2、识别干系人 识别干系人是识别所有受项目影响的人或组织,并记录其利益、参与情况和影响项目成功的过程。

二、规划过程组 3、制定项目管理计划 制定项目管理计划是对定义、编制、整合和协调所有子计划所必需的行动进行记录的过程。项目管理计划是关于如何对项目进行规划、执行、监控和收尾的主要信息来源。 4、收集需求 收集需求是为实现项目目标而定义并记录干系人的需求的过程。

5、定义范围 定义范围是制定项目和产品的详细描述的过程。 6、创建工作分解结构(WBS) 创建工作分解结构是把项目可交付成果和项目工作分解成较小的、更易于管理的组成部分的过程。 7、定义活动 定义活动是识别为完成项目可交付成果而需采取的具体行动的过程。 8、排列活动顺序 排列活动顺序是识别和记录项目活动间逻辑关系的过程。

9、估算活动资源 估算活动资源是估算各项活动所需材料、人员、设备和用品的种类和数量的过程。 10、估算活动持续时间 估算活动持续时间是根据资源估算的结果,估算完成单项活动所需工作时段数的过程。 11、制定进度计划 制定进度计划是分析活动顺序、持续时间、资源需求和进度约束并编制项目进度计划的过程。

常用shell脚本

如何用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi #TODO: test if $size is a valid integer filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize let pieces=$filesize/$size let remain=$filesize-$pieces*$size if [ $remain -gt 0 ]; then let pieces=$pieces+1 fi echo pieces: $pieces i=0 while [ $i -lt $pieces ]; do echo split: $file.$i: dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1 done echo "#!/bin/bash" >; merge echo "i=0" >;>; merge echo "while [ $i -lt $pieces ];" >;>; merge echo "do" >;>; merge echo " echo merge: $file.$i" >;>; merge echo " if [ ! -f $file.$i ]; then" >;>; merge echo " echo merge: $file.$i missed" >;>; merge

实验十一 流类库与输入/输出

实验十一流类库与输入/输出(2学时) 一、实验目的 1.熟悉流类库中常用的类及其成员函数的用法。 2.学习标准输入输出及格式控制。 3.学习对文件的应用方法(二进制文件、文本文件)。 二、实验任务 1.观察以下程序的输出,注意对输出格式的控制方法; //labll—1.cpp #include Using namespace std; #define D(a)<<#a<

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

第9章流类库与输入输出

第9章流类库与输入输出 9.1 本章提要 (1)C++语言提供一个用于输入/输出(I/O)操作的类族,这些操作是以对数据敏感 的方式实现的。类族提供了对预定义类型进行输入/输出操作的能力,程序员也 可以利用这个类族进行自定义类型的输入/输出操作。 (2)标准输出操作方法 ①将插入符作用在流对象cout上,可输出显示整型数、浮点数,字符和字符串。 ②使用成员函数put( )可输出一个字符 ③使用成员函数write( )可输出一个字符串 (3)标准输入操作方法 ①将提取符作用在流对象cin上,可输入整型数、浮点数、字符和字符串。 ②使用成员函数get( )可输入一个字符,使用成员函数getline( )可输入—行字符。 ③使用成员函数read( )可读取一个字符串。 (4)格式化输入输出的两种方式 ①使用标志字和成员函数 ②使用操作子 (5)磁盘文件的输入和输出,包括: ①磁盘文件的打开和关闭操作 ②文本文件的读写操作 ③二进制文件的读写操作 ④随机访问数据文件 9.2 程序举例 下面是一个展示用不同方法(使用重载运算符和成员函数)对标准的输入输出流对象(cin和cout)进行操作的例子。 例9-1 用不同方法操作流对象 //ch9_1.cpp 标准设备的输入输出 #include void main() { char buffer1[80],buffer2[80],buffer3[80];

cout<<"Please enter a sentence:"<>buffer1; cout< void main() { //设置整数流的格式和基数 int x=123; cout<<"dec: "<

常用shell脚本指令

常用shell脚本命令 1、显示包含文字aaa的下一行的内容: sed -n '/aaa/{n;p;}' filename 2、删除当前行与下一行的内容: sed -i '/aaa/{N;d;}' filename 3、删除当前行与下两行的内容: sed -i '/aaa/{N;N;d;}' filename 依次类推,删除三行,则为{N;N;N;d;},分析知:N为next 4、得出以空格为分割的字符串中单词的个数,即统计个数: awk ' { print NF } ' 如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f 则执行 echo $VALUE | awk ' { print NF } ' 后的结果为6 5、在linux中建立一个文件与另一文件的链接,即符号链接 ln -s /var/named/chroot/etc/named.conf named.conf 这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如: lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf -> /var/named/chroot/etc/named.conf 注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。所以需对实际文件进行删除操作。 6、显示指定字符范围内的内容: 如:显示文件test.txt中字符#test begin与#test end之间所有的字符 sed -n "/#test begin/,/#test end/p" test.txt 或 awk "/#test begin/,/#test end/" test.txt 在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则. 1. 单引号和双引号的区别 单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。请看如下例子: [root@linux ~]# name=HaHa [root@linux ~]# echo $name HaHa [root@linux ~]# myname="$name is wow" [root@linux ~]# echo $myname HaHa is wow [root@linux ~]# myname='$name is wow'

个人整理shell脚本编程笔记

shell脚本编程学习笔记(一) 一、脚本格式 vim shell.sh #!/bin/bash//声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program://程序内容说明 #History://时间和作者 二、shell变量的种类 用户自定义变量:由用户自己定义、修改和使用 与定义变量:Bash与定义的特殊变量,不能直接修改 位置变量:通过命令行给程序传递执行的参数 1、定义变量: 变量名要以英文字母或下划线开头,区分大小写。 格式:变量名=值 输出变量:echo $变量名 2、键盘输入为变量内容: 格式:read [-p "信息"] 变量名 如:read -p "pewase input your name:" name 3、不同引号对变量的作用 双引号"":可解析变量,$符号为变量前缀。 单引号'':不解析变量,$为普通字符。 反引号``:将命令执行的结果输出给变量。 三、shell条件测试 1、test命令: 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数字。 格式:test 条件表达式[ 条件表达式] (注意:[]与表达式之间存在空格) 2、常见的测试类型: 测试文件状态 格式:[ 操作符文件或目录] 如:if [ -d /etc ] then echo "exists" else echo "not exists" fi 常见的测试操作符: -d:测试是否为目录 -e:测试目录或文件是否存在 -f:测试是否为文件 -r:测试当前用户是否有读权限 -w:测试当前用户是否有写权限 -x:测试当前用户是否有执行权限

第12章流类库和输入输出概论

第12章流类库和输入输出 【内容提要】 流的概念及流类库 输入输出的格式控制 输入与输出运算符的重载 文件操作 【重点与难点】 12.1 流的概念及流类库 12.1.1 流的概念 C++中的流是指数据从一个对象传递到另一个对象的操作。从流中读取数据称为提取操作,向流内添加数据称为插入操作。流在使用前要建立,使用后要删除。如果数据的传递是在设备之间进行,这种流就称为I/O流。C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。 C++流预定义了4个标准流类对象,它们可以直接用来输入输出。这些标准流类对象都包含在头文件iostream.h中。 istream cin; //与标准输入设备相关联的标准输入流。 ostream cout; //与标准输出设备相关联的标准输出流。 ostream cerr; //与标准错误输出设备相关联的非缓冲方式的标准输出流。ostream clog; //与标准错误输出设备相关联的缓冲方式的标准输出流。12.1.2 流类库 C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。使用这些流类库时,必须包含相应的头文件。 ios类及其派生类为用户提供了使用流类的接口。以下给出ios类及其派生类的层次结构图。 ios istream ifstream istream_withassign iostream istrstream fstream ostream strstream ofstream sdiostream ostream_withassign ostrstream 图12.1 ios类的层次关系 12.2 输入输出的格式控制 C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。 12.2.1 用ios类的成员函数进行格式控制 使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。 设置及清除格式状态标志 格式状态标志说明 ios::skipws跳过输入中的空白,用于输入 ios::left左对齐输出,用于输出

pmbok输入输出和工具与技术

项目管理知识体系指南(第六版) 输入输出和工具与技术 by 未尝不可 2018.08.29

图 4-1项目整合管理概述

4.1 制定项目章程 制定项目章程是编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程。本过程的主要作用是,明确项目与组织战略目标之间的直接联系,确立项目的正式地位,并展示组织对项目的承诺。本过程仅开展一次或仅在项目的预定义点开展。图 4-2 描述本过程的输入、工具与技术和输出。 图 4-2制定项目章程:输入、工具与技术和输出 4.2 制定项目管理计划 制定项目管理计划是定义、准备和协调项目计划的所有组成部分,并把它们整合为一份综合项目管理计划的过程。本过程的主要作用是,生成一份综合文件,用于确定所有项目工作的基础及其执行方式,它仅开展一次或仅在项目的预定义点开展。图 4-4 描述本过程的输入、工具与技术和输出。 图 4-4制定项目管理计划:输入、工具与技术和输出

4.3 指导与管理项目工作 指导与管理项目工作是为实现项目目标而领导和执行项目管理计划中所确定的工作,并实施已批准变更的过程。本过程的主要作用是,对项目工作和可交付成果开展综合管理,以提高项目成功的可能性。本过程需要在整个项目期间开展。图 4-6 描述本过程的输入、工具与技术和输出。 图 4-6指导与管理项目工作:输入、工具与技术和输出 4.4 管理项目知识 管理项目知识是使用现有知识并生成新知识,以实现项目目标,并且帮助组织学习的过程。本过程的主要作用是,利用已有的组织知识来创造或改进项目成果,并且使当前项目创造的知识可用于支持组织运营和未来的项目或阶段。本过程需要在整个项目期间开展。图 4-8 描述本过程的输入、 工具以及技术和输出。 图 4-8管理项目知识:输入、工具与技术和输出

Shell脚本的特殊符号

这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下 在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我们编写的代码更加简洁和高效,这里给大家汇总下: 1、{} 大括号: 用法一:通配符扩展 eg: ls my_{finger,toe}s 这条命令相当于如下命令的组合: ls my_fingers my_toes eg: mkdir {userA,userB,userC}-{home,bin,data} 我们将得到userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data,use rC-home, userC-bin, userC-data,这几个目录。 用法二:可用于语句块的构造,语句之间用回车隔开。如果你想在某些使用单个语句的地方(比如在AND或OR列表中)使用多条语句,你可以把它们括在花括号{}中来构造一个语句块。 eg: { grep -v “$cdcatnum” $strack_file > $temp_file cat $temp_file > $strack_file echo cat -n file1 } (注:以上大括号中的四句命令够成了一个语句块) 用法三:参数扩展 ${name:-default} 使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量na me; ${name:=default}使用指定值来代替空的或者没有赋值的变量name; ${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退出码1。 ${#name} 给出name的长度 ${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分

shell脚本之前的基础知识

第十二章学习shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员。目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目。有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富。笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要不断的练习,只要你shell脚本写的好,相信你的linux求职路就会轻松的多。笔者在这一章中并不会多么详细的介绍shell脚本,而只是带你进入shell脚本的世界,如果你很感兴趣那么请到网上下载相关的资料或者到书店购买相关书籍吧。 在学习shell 脚本之前,需要你了解很多关于shell的知识,这些知识是编写shell脚本的基础,所以希望你能够熟练的掌握。 【什么是shell】 简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。 笔者接触的linux发布版本(Redhat/CentOS)系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢? 1)记录命令历史 我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。 与命令历史有关的有一个有意思的字符那就是”!”了。常用的有这么几个应用:(1)!! (连续两个”!”),表示执行上一条指令;(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3)!字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令。

Linux Shell脚本结构解析以及常用语句说明_总体了解

目录 2 BASH 的基本语法 (2) 2.1最简单的例子—— Hello World! (2) 2.2关于输入、输出和错误输出 (3) 2.3BASH 中对变量的规定(与C 语言的异同) (5) 2.3.1BASH 中的变量介绍 (5) 2.3.1.1简单变量 (5) 关于变量,我们需要注意下面几点: (6) 在比较操作上,整数变量和字符串变量各不相同,详见下表: (7) 列出了BASH 中用于判断文件属性的操作符,见下表: (7) 2.3.1.2关于局部变量 (8) 2.3.2 BASH中的变量与C 语言中变量的区别 (9) 2.4 BASH 中的基本流程控制语法 (9) 2.4.1 if...then...else (9) 2.4.2 for (10) 2.4.3 while (12) 2.4.4 until (12) 2.4.5 case (12) 2.4.6 break/continue (14) 2.5函数的使用 (14) (1)函数的定义 (14) (2)函数的参数与返回值 (14) 3 BASH 中的特殊保留字 (15) 3.1保留变量 (15) 3.2随机数 (16) 3.3运算符 (16) 3.4变量的特殊操作--${var}的一些用法 (17) 4.BASH中的其他高级问题 (17) 4.1 BASH 中对返回值的处理 (18) 4.2用BASH 设计简单用户界面 (18)

4.3在BASH 中读取用户输入 (19) 4.4 一些特殊的惯用法 (20) (1)() 一对括号 (20) (2):冒号--- 1空命令2求取后面变量的值 (20) 4.5 BASH 程序的调试 (21) 4.6 关于BASH2 (21) 2 BASH 的基本语法 最简单的例子——Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1最简单的例子——Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。 用vi 编辑器编辑一个hello 文件如下: #!/bin/bash -----#!表示此文件为可执行脚本文件,后边跟的是该文件所用的命令解释器# This is a very simple example-----#注释语句 echo Hello World 这样最简单的一个BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的#! 是什么意思 二,第一行的/bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示

c++流类库与输入输出习题答案

1.概念填空题 1.1头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。 1.2用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。 1.3每一个输入输出流对象都维护一个流格式状态字,用它表示流对象当前的格式状态并控制流的格式。C++提供了使用格式控制函数与操作子函数来控制流的格式的方法。 1.4 C++根据文件内容的数据格式可分为两类:文本文件和二进制文件。前者存取的最小信息单位为字节,后者记录。 1.5文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。文件的输入输出首先要打开文件;然后进行读写;最后关闭文件。 1.6文本文件是存储ASCII码字符的文件,文本文件的输入可用cin从输入文件流中提取字符实现。文本文件的输出可用cout将字符插入到输出文件流来实现。程序在处理文本文件时需要(需要/不需要)对数据进行转换。 1.7二进制文件是指直接将计算机内的数据不经转换直接保存在文件中。二进制文件的输入输出分别采用read()、write() 成员函数。这两个成员函数的参数都是2个,分别表示读写缓冲区和字节数。 1.8设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。 2 简答题 2.1 为什么cin输入时,空格和回车无法读入?这时可改用哪些流成员函数? 2.2 文件的使用有它的固定格式,试做简单介绍。 2.3 在ios类中定义的文件打开方式中,公有枚举类型open_mode的各成员代表什么文件打开方式? 2.4 简述文本文件和二进制文件在存储格式、读写方式等方面的不同,各自的优点和缺点。 2.5 文本文件可以按行也可以按字符进行复制,在使用中为保证能完整复制要注意哪些问题? 2.6 文件的随机访问为什么总是用二进制文件,而不用文本文件? 2.7 怎样使用istream和ostream的成员函数来实现随机访问文件? 3.选择题 3.1要进行文件的输出,除了包含头文件iostream外,还要包含头文件(C )。 A.ifstream B.fstream C.ostream D.cstdio 3.2执行以下程序: char *str; cin>>str; cout<

相关文档
最新文档