首页 > 代码库 > SHELL脚本攻略--2.1 cat

SHELL脚本攻略--2.1 cat

cat可以接受来自stdin的信息,一般用来显式或查看内容,如果信息来源是多个,则可以进行内容的追加拼接(上下拼接,而不是左右拼接)。

-n显示行号。

-E将每行结尾的换行符用$表示出来,以分辨哪里是换行了的。

-A-E效果更多,不仅行尾用$表示,空格也表示

-s压缩空行,将有连续空行的地方压缩成一行。

-T将制表符使用^I标记出来,这主要是为了将制表符和空格区分开。

示例:

[root@xuexi tmp]# cat test1.sh

#!/bin/bash

 

i=4

until echo "$i"

        test $i -eq 0

 

 

do

echo "in looping"

        let i-=1

done

加上几个参数。

[root@xuexi tmp]# cat -sTn test1.sh

     1  #!/bin/bash

     2

     3  i=4

     4  until echo "$i"

     5  ^Itest $i -eq 0        ç制表符被标识为^I

     6                       ç空行被压缩

     7  do

     8  echo "in looping"

     9  ^Ilet i-=1

    10  done

内容拼接。

[root@xuexi tmp]# cat -Tsn test1.sh test1.sh          çTsn选项会作用于拼接后的内容

     1  #!/bin/bash

     2

     3  i=4

     4  until echo "$i"

     5  ^Itest $i -eq 0

     6

     7  do

     8  echo "in looping"

     9  ^Ilet i-=1

    10  done

    11  #!/bin/bash

    12

    13  i=4

    14  until echo "$i"

    15  ^Itest $i -eq 0

    16

    17  do

    18  echo "in looping"

    19  ^Ilet i-=1

    20  done

关于cat还有一个很重要的功能,可以以分行写的方式将多行内容输入到一个文件中去。

首先测试第一步:可以知道<<eof配对中的内容是cat命令的标准输入stdin,这时候eof可以随便使用其他符号代替。

[root@xuexi tmp]# cat <<eof

> abc.com

> eof

abc.com

[root@xuexi tmp]# cat <<EOF

> EOF

[root@xuexi tmp]# cat <<EOx

> EOx

那么测试使用<eof试试。发现没有输入的机会。并且此时只能使用eof作为符号,EOF或其他任何都不可以。因为<eof是直接覆盖stdin,也就是没有输入。所以一定要使用<<eof。

[root@xuexi tmp]# cat <eof

[root@xuexi tmp]# cat <eox

-bash: eox: No such file or directory

[root@xuexi tmp]# cat <EOF

-bash: EOF: No such file or directory

再进一步测试<<eof的功能,使用它来分行输入内容到文件中。这时有两种方案:

第一种方案:

[root@xuexi ~]# cat >>/tmp/test.txt<<EOF    ç输入到这里按回车键继续输入下一行  ç覆盖的方式到test.txt

> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   ç按回车输入下一行

> yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy                          ç按回车输入下一行

> zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz         ç按回车输入下一行

> EOF                                                     ç顶格写EOF结束输入

第二种方案: 

[root@xuexi tmp]# cat <<eof>log.txt  ç追加的方式到log.txt

> abc.com

> eof

两种方案结果是一样的,只是注意<<eof是cat的stdin就是了,顺便控制好是对文件进行覆盖还是追加输入。

(1). 文件test.txt可以预先不存在,输入完毕后会自动创建;

(2). <<EOF的EOF可以换成任意其他字母,但是结束输入时,必须和开始输入字母对应。

SHELL脚本攻略--2.1 cat