Linux CAT与ECHO+tee命令详解

cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的;
cat主要有三大功能:
1.一次显示整个文件。
$ cat   filename
2.从键盘创建一个文件。
$ cat  >  filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件。
$cat   file1   file2  > file
cat具体命令格式为 : cat [-AbeEnstTuv] [–help] [–version] fileName
说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)
参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 –show-nonprinting
范例:
cat -n linuxfile1 > linuxfile2 把 linuxfile1 的档案内容加上行号后输入 linuxfile2 这个档案里
cat -b linuxfile1 linuxfile2 >> linuxfile3 把 linuxfile1 和 linuxfile2 的档案内容加上行号(空白行不加)之后将内容附加到linuxfile3 里。
范例:
把 linuxfile1 的档案内容加上行号后输入 linuxfile2 这个档案里
cat -n linuxfile1 > linuxfile2
把 linuxfile1 和 linuxfile2 的档案内容加上行号(空白行不加)之后将内容附加到 linuxfile3 里。
cat -b linuxfile1 linuxfile2 >> linuxfile3
cat /dev/null > /etc/test.txt 此为清空/etc/test.txt档案内容

在linux shell脚本中我们经常见到类似于cat << EOF的语句,不熟悉的童鞋可能觉得很奇怪:EOF好像是文件的结束符,用在这里起到什么作用?
EOF是“end of file”,表示文本结束符。
<<EOF
(内容)
EOF


首先必须要说明的是EOF在这里没有特殊的含义,你可以使用FOE或OOO等(当然也不限制在三个字符或大写字符)。
可以把EOF替换成其他东西,意思是把内容当作标准输入传给程
结合这两个标识,即可避免使用多行echo命令的方式,并实现多行输出的结果。

接下来,简单描述一下几种常见的使用方式及其作用:
1、cat<<EOF,以EOF输入字符为标准输入结束:
2、cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束:
注意:输入时是没有’>’的。
3、cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样:

二、使用
看例子是最快的熟悉方法:
# cat << EOF > test.sh
> #!/bin/bash             #“shell脚本”
> #you Shell script writes here.
> EOF

结果:
引用# cat test.sh
#!/bin/bash
#you Shell script writes here.

可以看到,test.sh的内容就是cat生成的内容。
cat <<EOF >test.sh  内容 EOF
—就是将内容写入test.sh,之前存在的内容会被覆盖掉。EOF可以换成其他符号比如EEE:cat <<EEE  >test.sh  内容 EEE

三、其他写法
1、追加文件
# cat << EOF >> test.sh  内容  EOF
—将内容追加到 test.sh 的后面,不会覆盖掉原有的内容
2、换一种写法
# cat > test.sh << EOF 内容  EOF
3、EOF只是标识,不是固定的
# cat << HHH > iii.txt
> sdlkfjksl
> sdkjflk
> asdlfj
> HHH
这里的“HHH”就代替了“EOF”的功能。结果是相同的。
引用# cat iii.txt
sdlkfjksl
sdkjflk
asdlfj

4、非脚本中
如果不是在脚本中,我们可以用Ctrl-D输出EOF的标识
# cat > iii.txt
skldjfklj
sdkfjkl
kljkljklj
kljlk
Ctrl-D

结果:
引用# cat iii.txt
skldjfklj
sdkfjkl
kljkljklj
kljlk

※关于“>”、“>>”、“<”、“<<”等的意思,请自行查看bash的介绍。

ECHO命令详解

linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
该命令的一般格式为: echo [ -n ] 字符串
其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。

功能说明:显示文字。
语   法:echo [-ne][字符串]或 echo [–help][–version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参   数:-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
–help 显示帮助
–version 显示版本信息

echo和tee的使用

tee作用

从标准的输入读取并写入标准输出或文件中,即双向覆盖重定向(屏幕输出|文本输入)

echo hello|tee demo.txt (demo.txt不存在,会自己创建,并将hello写入到文件中)

echo -e “<?php\n phpinfo();\n ?>” | tee info.php #建立一个PHPinfo文件,并在屏幕显示出内容。

-a 追加写入,将内容追加到上次内容之后

ECHO命令是大家都熟悉的DOS批处理命令的一条子命令,但它的一些功能和用法也许你并不是全都知道,不信你瞧:

1. 作为控制批处理命令在执行时是否显示命令行自身的开关 格式:ECHO [ON|OFF] 如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。

2. 显示当前ECHO设置状态 格式:ECHO

3. 输出提示信息 格式:ECHO信息内容 上述是ECHO命令常见的三种用法,也是大家熟悉和会用的,但作为DOS命令淘金者你还应该知道下面的技巧:

4. 关闭DOS命令提示符 在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现。

5. 输出空行,即相当于输入一个回车 格式:ECHO. 值得注意的是命令行中的“.”要紧跟在ECHO后面中间不能有空格,否则“.”将被当作提示信息输出到屏幕。另外“.”可以用,:;”/[/]+等任一符号替代。 在下面的例子中ECHO.输出的回车,经DOS管道转向作为TIME命令的输入,即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态: C:〉ECHO.|TIME ECHO命令输出空行的另一个应用实例是:将ECHO.加在自动批处理文件中,使原本在屏幕下方显示的提示画面,出现在屏幕上方。

6. 答复命令中的提问 格式:ECHO答复语|命令文件名 上述格式可以用于简化一些需要人机对话的命令(如:CHKDSK/F;FORMAT Drive:;del *.*)的操作,它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入“Y”回车: C:〉ECHO Y|CHKDSK/F C:〉ECHO Y|DEL A :*.*

7. 建立新文件或增加文件内容 格式:ECHO 文件内容>文件名 ECHO 文件内容>>文件名 例如:C:〉ECHO @ECHO OFF〉AUTOEXEC.BAT建立自动批处理文件 C:〉ECHO C:/CPAV/BOOTSAFE〉〉AUTOEXEC.BAT向自动批处理文件中追加内容 C:TYPE AUTOEXEC.BAT显示该自动批处理文件 @ECHO OFF C:/CPAV/BOOTSAFE

8. 向打印机输出打印内容或打印控制码 格式:ECHO 打印机控制码>PRN ECHO 打印内容>PRN 下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推: C:〉ECHO 〈Alt〉+156〈Alt〉+42〈Alt〉+116〉PRN(输入下划线命令FS*t) C:〉ECHO 〈Alt〉+155@〉PRN(输入初始化命令ESC@) C:〉ECHO.〉PRN(换行)

9. 使喇叭鸣响 C:〉ECHO ^G “^G”是用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。

10.执行ESC控制序列修改屏幕和键盘设置 我们知道DOS的设备驱动程序ANSI.SYS提供了一套用来修改屏幕和键盘设置的ESC控制序列。如执行下述内容的批处理程序可以把功能键F12定义为DOS命令“DIR/W”,并把屏幕颜色修改为白色字符蓝色背景。 @ECHO”←[0;134;”DIR/W”;13p @ECHO”←[1;37;44m (注:批处理文件中“←”字符的输入方法是在编辑状态下按Alt中小键盘上的27)

补充:

比较echo 和 cat的重定向功能

1、echo 1 > /proc/xxx

解析: echo 进行重定向的时候,仅仅是将字符“1” 输出到 /proc/xxx文件中

2、cat /tmp/vmlinux.bin  > /dev/mtdblock2

解析: cat 进行重定向的时候,将/tmp/vmlinux.bin中的内容输出到/dev/mtdblock2中

结论:如果需要覆盖flash中的内容,只能用cat或dd命令,不能使用echo命令。

>>实例

  • 建立一个空的文件:

    touch akeke.log

  • 用echo建立新文件、简单的编辑一个文件:

    #echo “I am wuyike”>wuyike.txt

    然后用cat查看:#cat wuyike.txt

  • >和>>的区别:

>是清空并添加新内容,即重定向

>>是在文件内容后面追加新内容,即追加重定向

  • 用cat对文件追加内容:(优点:可增加多行内容)

    [root@wuyike ~]# cat >>wuyike.txt<<EOF

    > I am beautiful

    > EOF

    查看结果:

    [root@wuyike ~]# cat wuyike.txt

    I am wuyike

    I am beautiful

  • cat -n显示行号
  • 用cat对文件重定向:(优点:可增加多行内容)

    [root@wuyike ~]#cat >wuyike.txt<<EOF

    > I am a student

    > EOF

    查看结果:

    [root@wuyike ~]# cat wuyike.txt

    I am a student

  • 也可用echo对文件增加多行内容:

    [root@wuyike ~]# echo “wuyike

    > wuyikeke”>>wuyike.txt

    查看结果:

    [root@wuyike ~]# cat wuyike.txt

    I am a student

    wuyike

    wuyikeke

  • 正确输出重定向:代码为1,使用>或>>。

    错误输出重定向:代码为2,使用2>或2>>。使报错信息存入文件内。

    [root@wuyike ~]# ech wuyike 2>test.txt

    [root@wuyike ~]# cat test.txt

    -bash: ech: command not found

    或者:

    [root@wuyike ~]# echo 111 1>wuyike.txt 2>wuyike1.txt

    [root@wuyike ~]# cat wuyike.txt

    111

    [root@wuyike ~]# cat wuyike1.txt

    [root@wuyike ~]#

    [root@wuyike ~]# ech 111 1>wuyike.txt 2>wuyike1.txt

    [root@wuyike ~]# cat wuyike.txt

    [root@wuyike ~]# cat wuyike1.txt

    -bash: ech: command not found

下面的三种方法是等价的:

/dev/null 空设备  黑洞

1)1>/dev/null   2>/dev/null

2)1>/dev/null   2>&1

3)&>/dev/null

则程序执行后,没有任何的输出

  • echo与{}配合使用,输出字母序列或者数字序列
  • [root@wuyike data]# echo {1..10}

    1 2 3 4 5 6 7 8 9 10

  • [root@wuyike data]# echo {a..z}

    a b c d e f g h i j k l m n o p q r s t u v w x y z

  • 创建100个目录:

    [root@wuyike data]# mkdir student{001..100}

  • [root@wuyike data]# ll

    total 416

    drwxr-xr-x. 3 root root 4096 Mar  3 14:45 a

    drwxr-xr-x. 2 root root 4096 Mar  3 14:27 b

    drwxr-xr-x. 2 root root 4096 Mar  3 14:45 c

    drwxr-xr-x. 2 root root 4096 Mar  3 17:55 student001

    drwxr-xr-x. 2 root root 4096 Mar  3 17:55 student002

    drwxr-xr-x. 2 root root 4096 Mar  3 17:55 student003

    drwxr-xr-x. 2 root root 4096 Mar  3 17:55 student004

    drwxr-xr-x. 2 root root 4096 Mar  3 17:55 student005

    ……

  • cd -:

    [root@wuyike data]# cd wuyike

    [root@wuyike wuyike]# cd –

    /root/data

    [root@wuyike data]#

  • history命令:打印用户操作的历史记录。
  • !+字母表示调出最近一次以此字母开头的命令。

    !!表示使用最近一次操作的命令。

    !+数字  表示调出历史的第几条命令。

  • tab命令或路径补全。如果tab不出,可能不存在或者权限不对
  • ctrl+c:终止
  • ctrl+a:光标从命令的结尾到开头
  • ctrl+e:光标从命令的开头到结尾
  • ctrl+u:将光标以前的内容删掉
  • ctrl+k:将光标以后的内容删掉
  • ctrl+shift+c:复制(ssh客户端)
  • ctrl+shift+v:粘贴(ssh客户端)
  • ctrl+d:退出当前用户环境,相当于exit,logout
  • ctrl+l:清屏