Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1014807
  • 博文数量: 128
  • 博客积分: 10012
  • 博客等级: 上将
  • 技术积分: 2050
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 17:49
文章分类

全部博文(128)

文章存档

2011年(16)

2009年(57)

2008年(55)

分类:

2009-05-15 18:49:39

在shell脚本中,可以用几种不同的方式读入数据:可以使用标准输入,缺省为键盘,或者指定一个文件
作为输入.对于输出也是一样,如果不指定某个文件作为输出,标准输出问题和终端屏幕相关联,也可以
把信息指定到一个文件中.
1.echo
    使用echo命令可以显示文本行或变量,或者把字符串输入到文件.它的一般形式为:
    echo string
    echo命令有很多功能,其中最常用的是下面几个:
    \c 不换行
    \t 跳格
    \n 换行
    如果是Linux系统,那么必须使用-n选项来禁止echo命令后换行:
    必须使用-e选项才能使转义符生效.
    如果希望在echo命令输出之后附加换行,可以使用\n选项.
    如果想把一个字符串输出到文件中,使用重定向符号>.
    引号是一个特殊的字符,所以必须要使用反斜杠\来使shell忽略它的特殊意义.假设希望使用echo
命令输出这样的字符串: "/dev/rmt0", 那么只要在引号前面加上反斜杠就可以了:
    echo "\"/dev/rmt0\""
2.read
    可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量.如果只指定了一
个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车.
    它的一般形式为:
    read varible1 varible2
    在下面的例子中,只指定了一个变量 ,它将被赋予直至回车之前的所有内容.
    read name
    hello i am a man
    echo $name
    hello i am a man
    在下面的例子中,给出了两个变量,它们分别被赋予名字和姓氏,shell将用空格作为变量之间的分
隔符.
    read name surname
    john doe
    echo $name $surname
    john doe
    如果文本域过长,shell将所有的超长部分赋予最后一个变量.
3.cat
    cat是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控制字符.
在使用cat命令时要注意,它不会在文件分页符处停下来.它会一下显示完整个文件.如果希望每次显示
一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令中.
    cat myfile | more
    cat命令的一般形式为:
    cat [options] filename1 ... filename2
    cat命令最有用的选项就是:
    -v显示控制字符.
    如果希望显示myfile1, myfile2, myfile3这三个文件,可以用:
    cat myfile1 myfile2 myfile3
    如果希望创建一个名为bigfile的文件,该文件包含上述三个文件的内容,可以把上面命令的输出
重定向到新文件中:
    cat myfile1 myfile2 myfile3 > bigfile
4.管道
    可以通过管道把一个命令的输出传递给另一个命令作为输入,管道用竖杠|表示,它的一般形式为:
    命令1|命令2
5.tee
    tee命令作用可以用字母T来形象地表示,它把输出的一个副本输送到标准输出,另一个副本拷贝到
相应的文件中.如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了.
    它的一般形式为:
    tee -a files
    其中-a表示追加到文件末尾
    在执行某些命令或脚本时,如果希望把输出保留下来,tee命令非常方便.
    who | tee who.out
    就将who的结果显示给标准输出,同时保存到who.out文件中.
    如:
    who | tee who.out | awk '{print $1"\t"$2}' | tee -a who.out
6.标准输入,输出和错误
6.1标准输入
    标准输入是文件描述符0,它是命令的输入,缺省是键盘,也可以是文件或其它命令的输出.
6.2标准输出
    标准输出是文件描述符1,它是命令的输出,缺省是屏幕,也可以是文件.
6.3标准错误
    标准错误是文件描述符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以filename文件作为标准输入,以filename2文件作为标准输出
    command < filename  以filename文件作为标准输入
    command << delimiter 从标准输入中读入,直到遇到delimiter分界符
    command <&m  把文件描述符m作为标准输入
    command >&m  把标准输出重定向到文件描述符m中
    command <&-  关闭标准入
7.1 重定向标准输出
    在下面的命令中,把/etc/passwd文件中的用户ID域按照用户名排列,该命令的输出重定向到
sort.out文件中,要提醒注意的是,在使用sort命令的时候,重定向符号一定要离开sort命令两个空格,
否则该命令会把它当作输入文件.
    cat passwd | awk -F: '{print $1}' | sort  1>sort.out
    可以把很多命令的输出追回到同一个文件中.
    ls -l | grep ^d >> file.out
    如果希望把标准输出重定向到文件中,可以用>filename.如果希望追加到已有的文件中,那么可以
使用>>filename.如果想创建一个长度为0的空文件,可以用>filename.
7.2 重定向标准输入
    可以指定命令的标准输入.
    sort < name.txt
    在上面的命令中,sort命令的输入是采用重定向的方式给出的.不过也可以直接把相应的文件作为
该命令的参数.
    sort name.txt
    在发送邮件的时候,可以用重定向的方法发送一个文件中的内容,如:
    mail louise < contents.txt
    重定向操作符command << delimiter是一种非常有用的命令,通过都被称为"此处"文档.shell将
分界符delimiter之后直至下一个同样的分界符之前的所有内容作为输入,遇到下一个分界符,shell就
知道输入结束了.这一命令对于自动或远程的例程非常有用.可以用任意定义分界符delimiter,最常见
的是EOF.
7.3 重定向标准错误
    为了重定向标准错误,可以指定文件描述符2.如:
    grep "trident" missiles 2> /dev/null
8.结合使用标准输出和标准错误
    一个快速发现错误的方法就是,先将输出重定向到一个文件中,然后再把标准错误重定向到另外一
个文件中.下面给出一个例子:
    在审计文件时,其中一个的确存在,而且包含一些信息,而另一个由于某种原因已经不存在了,想把
这两个文件合并到accounts.out文件中.
    cat account_qtr.doc account_end.doc 1> accounts.out 2>accoutns.err
    现在如果出现了错误相应的错误将会保存在accounts.err文件中.
9.合并标准输出和标准错误
    在合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令的.
    cleanup > cleanup.out 2>&1
    在上面的例子中,将cleanup脚本的输出重定向到cleanup.out文件中,而且其错误也被重定向到相
同的文件中.
10.exec
    exec命令可以用来替代当前shell,换句话说,并没有启动子shell.使用这一命令时任何现有的环
境将会被清除,并重新启动一个shell,它的一般形式为:
    shell command
    其中的command通常是一个shell脚本.
    当这个脚本结束时,相应的会话就可能结束了.exec在对文件描述符进行操作的时候,它不会覆盖
当前的shell.
11.使用文件描述符
    可以使用exec命令通过文件描述符打开和关闭文件,在下面的例子中.选用了文件描述符4,下面的
脚本只是从stock.txt文件中读了两行,然后把这两行回显出来.
    该脚本的第一行把文件描述符4指定为标准输入,然后打开stock.txt文件,接下来两行的作用是读
入了两行文本,接着,作为标准输入的文件描述符4被关闭.最后line1和line2两个变量所含有的内容都
被回显到屏幕上.
#!/bin/sh
exec 4<&0 0read line1
read line2
exec 0<&4
echo $line1
echo $line2
阅读(2191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~