shell 第三篇

187 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、输入输出

echo

  1. 回声,用于打印输出工作

    1. -n: 可以不换行
    2. -e:对字符进行转义,\t ===》 enable

1585703937444.png

printf

  1. printf "%d,%s\n" 10 "你好"
  2. 注意10 和 “你好” 两个参数之间,没有逗号

3

管道|

  1. 使用| 可以将多个命令拼接在一起

     cat /etc/passwd  | grep itcast | cut -d: -f4
    1000
    
  2. 原理:将前一个命令的标准输出作为后一个命令的标准输入

  3. 标准错误输出是不会被管道传递的

    cp | grep information.  # 这个是不生效的
    cp  --help | grep existing --color  #这个是正确用法
    

1585704600675.png

  1. 并不是所有的命令都可以接受|的数据,比如说ls

      find ../../01-shell-basic/ | ls
    
  2. 需求:实现一个接收管道输出的命令:读取标准输入,将标准输入的数据转成大写,然后输出:

    #include<stdio.h>
    #include<ctype.h>int main()
    {
        int ch=getchar();
        while(ch != EOF)
        {
            putchar(toupper(ch));
            ch = getchar();
        }
    ​
        return 0;
    }
    
  3. 经常与more和less使用

    1. more,只可以单向查阅
    2. less可以双向查阅
    3. ctrl + f(前),ctrl+B(后)

tee

作用之一:

  1. 将标准输出重新输出到指定的文件

  2. 公司服务器打印log,希望能够在屏幕上打印,同时保存到文件:

    ping www.baidu.com | tee ping.log
    
  3. 如果想动态查看ping.log文件内容

    1. vim ping.log, 然后输入:e,可以随时刷新
    2. tail -f ping.log,动态刷新
    3. alias tailf=tail -f

作用之二:

当修改了一个文件很多内容,但是没有修改权限的时候,可以直接使用tee命令来激活sudo 权限,从而完成修改

1585705922820.png

重定向

  1. cmd > 1.txt , 将输出写入到1.txt,每一次都是重新覆盖,等同于: cmd 1> 1.txt(常用)

  2. cmd > > 1.txt,将输出追加到1.txt

  3. , >> 两者只能将标准输出重定向到文件,而标准错误输出无法直接写入

  4. 案例:

    $  cp > cp.txt
    cp: missing file operand
    Try 'cp --help' for more information.
    ​
    cat cp.txt 返回空
    
  5. 文件描述符:

    1. 标准输入文件描述符:0
    2. 标准输出文件描述符:1
    3. 标准错误输出文件描述符:2
  6. 如果想将错误的信息重定向到文件,需要使用文件描述符2

    cp 2> cperr.txt  #2> 表示对错误信息重定向
    
  7. ==如何将正确输出和错误输出都写入到一个文件中?(最常用)==

    cp > /tmp/cperr1.txt 2>&1
    
  8. 写一段c代码,里面同时输出:stdout, stderr

    #include<stdio.h>int main()
    {
        //写一段c代码,里面同时输出:stdout, stderr
        fprintf(stdout, "this is stdout\n"); //fd 1
        fprintf(stderr, "this is stderr\n"); //fd 2
    ​
        return 0;
    }
    

    结果:

1585707830592.png

  1. 使用重定向进行输入

    cmd < file

    cat < /etc/passwd
    
  2. 其他:

    1. cmd < &fd
    2. cmd > &fd
    3. cmd < &-