1、shell输入与输出
在shell脚本中,可以用几种不同的方式读入数据:可以使用标准输入—缺省为键盘,或 者指定一个文件作为输入。对于输出也是一样:如果不指定某个文件作为输出,标准输出总 是和终端屏幕相关联。如果所使用命令出现了什么错误,它也会缺省输出到屏幕上,如果不 想把这些信息输出到屏幕上,也可以把这些信息指定到一个文件中。
1.1 echo的使用
使用echo命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
echo命令有很多功能,其中最常用的是下面几个:
\c 不换行。
\f 进纸。
\t 跳格。
\n 换行。
必须使用- n选项来禁止echo命令输出后换行,必须使用-e选项才能使转义符生效。
如果想把一个字符串输出到文件中,使用重定向符号 >。或者可以使用重定向符号>>追加到一个文件的末尾,这意味着不覆盖原有的内容:
在下面的例子中一个字符串被重定向到一个名为myfile的文件中:
$ echo "The log files have all been done"> myfile
1.2 read的使用
可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。指定了一个变量,那么 read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
它的一般形式为:
read varible1 varible2 ...
在下面的例子中,我们给出了两个变量,它们分别被赋予名字和姓氏。 shell将用空格作 为变量之间的分隔符:
read name sname
echo $name $sname
1.3 管道的使用
可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 |表示。它的一 般形式为:
命令1 | 命令2
sed、awk和grep都很适合用管道,特别是在简单的一行命令中。在下面的例子中, who命令的输出通过管道传递给awk命令,以便只显示用户名和所在的终端。
如果你希望列出系统中所有的文件系统,可以使用管道把 df命令的输出传递给 a wk命令, awk显示出其中的第一列。你还可以再次使用管道把 awk的结果传递给grep命令,去掉最上面的题头filesystem。
df -k | awk '{print $1}' |grep -v "filesystem"
/dev/vda1
devtmpfs
tmpfs
tmpfs
tmpfs
tmpfs
1.4 tee命令的使用
tee命令作用可以用字母 T来形象地表示。它把输出的一个副本输送到标准输出,另一个 副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
它的一般形式为:
tee -a files
其中,- a表示追加到文件末尾
输入文件—标准输入 0
输出文件—标准输出 1
错误输出文件—标准错误 2
标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中 command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中 (追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以 filename2文件 作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符 command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入