shell学习笔记 (5)
---china.pub.com linux shell电子书学习笔记第5章 shell输入与输出
5.1 echo 使用e c h o命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为: echo string e c h o命令有很多功能,其中最常用的是下面几个: \c 不换行。 \f 进纸。 \t 跳格。 \n 换行。 如果是LINUX系统 必须使用- n选项来禁止echo命令输出后换行,必须使用-e选项才能使转义符生效。 如果想把一个字符串输出到文件中,使用重定向符号 >。在下面的例子中一个字符串被重 定向到一个名为m y f i l e的文件中: $ echo "The log files have all been done"> myfile 或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容: $ echo "$LOGNAME carried them out at `date`">>myfile 引号是一个特殊字符,所以必须要使用反斜杠 \ 转义。 5.2 read 可以使用r e a d语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。 如果指定了一个变量,那么 r e a d将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回 车。 它的一般形式为: read varible1 varible2 ... 5.3 cat 它来显示文件内容,创建文件,还可以用它来显示控制字符。在使用c a t命令时要注意,它不会在文件分页符处停下来;它会一下显示完整个文件 $ cat myfile | more或$ cat myfile | pg 增加翻页。 cat命令的一般形式为:cat [options] filename1 ... filename2 ... cat命令最有用的选项就是:-v 显示控制字符 (用于检测dos系统传来的乱码文件) 5.4 管道 管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 |表示。它的一 般形式为: 命令1 |命令2 其中|是管道符号。 5.5 tee t e e命令作用可以用字母 T来形象地表示。它把输出的一个副本输送到标准输出,另一个 副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命 令再合适不过了。 它的一般形式为: tee -a files 其中,- a表示追加到文件末尾。 5.6 标准输入、输出和错误 当我们在s h e l l中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描 述符来引用这些文件。由于文件描述符不容易记忆, s h e l l同时也给出了相应的文件名。 文 件 文件描述符 输入文件—标准输入 0 输出文件—标准输出 1 错误输出文件—标准错误 2 5.7 文件重定向 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 e 2文件 作为标准输出 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命令两个空格,否则该 命令会把它当作输入文件。 $ cat passwd | awk -F: '{print $1}' | sort 1>sort.out 如果想创建一个长度为0的空文件,可以用' > f i l e n a m e ': 5.7.2 重定向标准输入 可以指定命令的标准输入。 # sort < name.txt # mail louise < contents.txt 5.7.3 重定向标准错误 为了重定向标准错误,可以指定文件描述符 2。 grep命令没有找到该文件,缺省地向终端输出了一个错误信息。现在让我们把错误重定 向到文件/dev/null中(实际就上是系统的垃圾箱): $ grep "trident" missiles 2>/dev/null 这样所有的错误输出都输送到了/dev/null,不再出现在屏幕上。 5.8 结合使用标准输出和标准错误 一个快速发现错误的方法就是,先将输出重定向到一个文件中,然后再把标准错误重定 向到另外一个文件中。 # cat account_qtr.doc account_end.doc 1>accounts.out 2>accounts.err 5.9 合并标准输出和标准错误 在合并标准输出和标准错误的时候,切记 s h e l l是从左至右分析相应的命令的。 cleanup >cleanup.out 2>&1 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命令通过文件描述符打开和关闭文件 $ pg f_desc #!/bin/sh # f_desc exec 4<& 0 0<stock.txt read line1 read line2 exec 0<&4 echo $line1 echo $line2