shell 管道与重定向

Shell 管道与重定向

一、管道与管道符:

管道概念:管道和信号一样,也是进程通信的方式之一。

管道符概念:也叫做匿名管道,是shell编程经常用到的通信工具,管道符是 “|”,将前一个命令执行的结果传递给后面的命令:

  • 执行命令:

    [root@iZbp1e44zna0rzyna76eszZ nginx]# cat nginx.conf | more
    

    查看 cat nginx.conf 配置文件的命令执行结果,传递给 | 后面的 more 命令,进行分页查看 nginx.conf 文件

二、重定向符号:

概念:一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。

  • 输入重定向符号 <

    read var < /path/to/a/file
    
  • 输出重定向符号>、>>、2>、&>

    echo 123 > /path/to/a/file/
    

    >:一个符号表示,将当前文件内容清空,在新加进去。

    # 查看原有的test.log文件中的内容
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat test.log
    123
    # 使用 > 输出符号 将456 输出到 test.log中
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# echo 456 > test.log
    # 查看test.log文件中的内容, 可以看出文件的内容被清空
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat test.log
    456
    

    >>:二个符号表示,将当前内容追加到文件中。

    # 查看当前test.log文件中的内容
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat test.log
    456
    # 使用追加符号 >>  将789追加到test.log中
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# echo 789 >> test.log
    # 查看追加后的结果
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat test.log
    456
    789
    

    2>:表示当前命令执行错误,会把错误信息输出到当前文件中。

    # 输入一个错误的命令
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# nocmd
    -bash: nocmd: command not found
    # 使用2>符号将错误的信息输入到test.log文件中
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# nocmd 2> test.log
    # 查看test.log文件中的内容
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat test.log
    -bash: nocmd: command not found
    

    &>:表示无论输出是正确还是错误,都会把信息输出到当前文件中。

    # 无论是错误还是正确的输入命令都想存储到test.log文件中,使用&>
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# nocmd &> test.log
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat test.log
    -bash: nocmd: command not found
    

三、通过输出与输入产生一个新的脚本文件:

  1. 新创建一个shell.sh脚本文件,命名为shell_test.sh:

    #!/bin/bash
    
    # EOF 表示命令的结束, 新创建一个new_shell.sh 脚本, 里面存储的命令是 echo "hello bash"
    cat > /home/lvhuiqi/new_shell.sh << EOF
    echo "hello bash"
    EOF
    
  2. 运行test_shell.sh脚本:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ./shell_test.sh
    
  3. 查看新生成的new_shell.sh脚本文件:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ll
    total 28
    -rw-r--r-- 1 root root   18 Jan  1 22:29 new_shell.sh
    -rwxr--r-- 1 root root   75 Jan  1 22:29 shell_test.sh
    
    
  4. 查看新生成的new_shell.sh脚本文件:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat new_shell.sh
    echo "hello bash"
    

版权声明:本文为Fe_cow原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。