输入输出
时间:2008-04-23 来源:peitomb
1.echo
显示文本行或变量,或把字符串输入到文件,形式:echo string
echo命令功能:
\c 不换行
\f 进纸
\t 跳格
\n 换行
希望提示符出现在输出的字符串之后,可以用:
$ echo "What isyou name :\c"
$ read me
可以用echo命令输出转义符以及变量。
$ echo "\007your home directory is $HOME, you are connected on 'tty'"
如果想把一个字符串输出到文件中,使用重定向符号>。
字符串被重定向到一个名为myfile的文件中
$ echo "The log files have all been done"> myfile
或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:
$ echo "$LOGNAME carried them out at 'date'">>myfile
把引号输出,在引号前面加上反斜杠\
$ echo "\"/dev/rmt0"\"
2.read
从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
形式:
read variable1 variable2 ...
指定一个变量
$ read name
Hello I am superman
$ echo $name
Hello I am superman
指定两个变量,shell用空格作为变量之间的分隔符
$ read name surname
John Lemon Doe
$ echo $name
John
$ echo $surname
Lemon Doe
3.cat
如果希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令中
例子:
$ cat myfile | more
或
$ cat myfile | pg
cat 最有用的选项就是:
-v 显示控制字符
如果希望创奸一个名为bigfile的文件,该文件包含上述三个文件的内容,可以把上面命令的输出重定向到新文件中:
$ cat myfile1 myfile2 myfile3 > bigfile
如果想创建一个文件,并向其中输入一些内容,只需使用cat 命令把标准输出重定向到该文件中,这时cat命令的输出是标准输入--键盘,输入一些文字,输入完毕后按CTRL-D结束输入
$ cat > myfile
This is great
<CTRL-D>
cat显示控制字符
$ cat -v life.tct
4.管道
通过管道把一个命令的输出传递给另一个命令的输入。管道用竖杠 | 表示。形式:命令1|命令2
eg1:
在当前目录中执行文件列表操作,如果没有管道的话,所有文件就会显示出来。当shell看到管道符号以后,就会把所有列出的文件交给管道右边的命令。接下来用grep命令在文件列表中搜索quarter1.doc
$ ls | grep quarter1.doc
sed、awk和grep都很适合用管道
eg2:
who 命令的输出通过管道传递给awk命令,以便只显示用户名和所在的终端
$ who | awk '{print $1"\t"$2}'
列出系统所有的文件系统,可以使用管道把df命令的输出传递给awk命令,awk显示出其中的第一列。还可以再次使用管道把awk的结果传递给grep命令,去掉最上面的题头filesystem
$ df -k | awk '{print $1}' | grep -v "Filesystem"
只显示其中的分区名,不显示/dev/部分
$ df -k | awk '{print $1}' | grep -v "Filesystem" | sed s'/\/dev\///g'
先对一个文件进行排序,然后通过管道输送到打印机
$ sort myfile | lp
5.tee
tee命令作用是:它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望看到输出的同时,也将其存入一个文件:
一般形式为:
tee -a files
-a表示追加到文件末尾
eg :
使用who 命令,结果输出到屏幕上,同时保存在who.out文件中:
$ who | tee who.out
把一些文件备份到磁带上,同时所有备份的文件记录在tape.log文件中。
$ find etc usr/local home -depth -print | cpio -vC65536 -O /dev/rmt/0n | tee -a tape.log
可以在执行脚本之前,使用一个echo 命令告诉用户谁在执行这个脚本,输出保存在什么地方
$ echo "myscript is now running, check out any erros...in myscript.lg" | tee -a myscript.log
$ myscript | tee -a myscript.log
如果不想输出重定向到文件中,可以不这样做,而是把它定向到某个终端上。
警告被发送到系统控制台上或(tty),表明一个磁盘清理进程即将运行
$ echo "stand-by disk cleanup starting in 1 minute" | tee /dev/console
如果让不同的命令使用同一个日志文件,不要忘记使用-a选项
$ sort myfil| tee -a accounts.log
$ myscript | tee -a accounts.log
6.标准输入、标准输出和错误
--------------------------------------------------------
文件 文件描述符
--------------------------------------------------------
输入文件---标准输入 0
输出文件---标准输出 1
错误输出文件---标准错误 2
--------------------------------------------------------
7.文件重定向
常用文件重定向命令
-----------------------------------------------------------------
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > filename 把标准输出重定向到一个文件中
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 <&- 关闭标准输入
------------------------------------------------------------------
重定向标准输出
eg1:
1.把/etc/passwd文件中的用户ID域按照用户名排列。该命令重定向到sort.out文件中。
提醒:要使用sort命令的时侯(或其他含有相似输入文件参数的命令),重定向符号一定要离开sort命令两个空格,否则该命令会把它当作输入文件
$ cat /etc/passwd | awk -F: '{print $1}' | sort 1>sort.out
或
$ cat /etc/passwd | awk -F: '{print $1}' | sort >sort.out
eg2:
把很多命令追加到同一个文件中
$ ls -l | grep ^d >> files.out
$ ls account* >> files.out
如果想创建一个长度为0的空文件,可以用'>filename'
$ >myfile
重定向标准输入
可以指定一个命令的标准输入
$ sort < name.txt
sort可以直接给出相应的文件
$ sort name.txt
可以通过重定义为sort命令指定一个输出文件name.out
$ sort < name.txt > name.out
在发送邮件时,可以用重定向的方式发送一个文件中的内容。用户louise将收到一个邮件,其中含有文件contents.txt中的内容
$ mail louise < contents.txt
分界符
重定向操作符command << delimiter是一种非常有用的命令,通常都被称为“此处”文挡。我们将在本书后面的章节深入讨论这一问题。现在只介绍它的功能。shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符,shell就知道输入结束了。可以自已定义分界符delimiter,最常见的是EOF
创建一个名为myfile的文件,并在其中使用TERM和LOGNAME变量
$ cat >> myfile <<MAYDAY
> Hello there I am using a $TERM ternimal
> and my user name is $LOGNAME
> bye...
> MAYDAY
exec
exec命令可以用来替代当前shell。使用这一命令时任何现在环境都会被清除,并重新启动一个shell
形式: exec command
exec命令的一个常见用法就是在用户的.profile最后执行时,用它来执行一些用于增强安全性的脚本