shell学习笔记 (5)

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

你可能感兴趣的:(linux,学习,职场,电子书,休闲)