本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、输入输出
echo
-
回声,用于打印输出工作
- -n: 可以不换行
- -e:对字符进行转义,\t ===》 enable
printf
- printf "%d,%s\n" 10 "你好"
- 注意10 和 “你好” 两个参数之间,没有逗号
3
管道|
-
使用| 可以将多个命令拼接在一起
cat /etc/passwd | grep itcast | cut -d: -f4 1000 -
原理:将前一个命令的标准输出作为后一个命令的标准输入
-
标准错误输出是不会被管道传递的
cp | grep information. # 这个是不生效的 cp --help | grep existing --color #这个是正确用法
-
并不是所有的命令都可以接受|的数据,比如说ls
find ../../01-shell-basic/ | ls -
需求:实现一个接收管道输出的命令:读取标准输入,将标准输入的数据转成大写,然后输出:
#include<stdio.h> #include<ctype.h> int main() { int ch=getchar(); while(ch != EOF) { putchar(toupper(ch)); ch = getchar(); } return 0; } -
经常与more和less使用
- more,只可以单向查阅
- less可以双向查阅
- ctrl + f(前),ctrl+B(后)
tee
作用之一:
-
将标准输出重新输出到指定的文件
-
公司服务器打印log,希望能够在屏幕上打印,同时保存到文件:
ping www.baidu.com | tee ping.log -
如果想动态查看ping.log文件内容
- vim ping.log, 然后输入:e,可以随时刷新
- tail -f ping.log,动态刷新
- alias tailf=tail -f
作用之二:
当修改了一个文件很多内容,但是没有修改权限的时候,可以直接使用tee命令来激活sudo 权限,从而完成修改
重定向
-
cmd > 1.txt , 将输出写入到1.txt,每一次都是重新覆盖,等同于: cmd 1> 1.txt(常用)
-
cmd > > 1.txt,将输出追加到1.txt
-
, >> 两者只能将标准输出重定向到文件,而标准错误输出无法直接写入
-
案例:
$ cp > cp.txt cp: missing file operand Try 'cp --help' for more information. cat cp.txt 返回空 -
文件描述符:
- 标准输入文件描述符:0
- 标准输出文件描述符:1
- 标准错误输出文件描述符:2
-
如果想将错误的信息重定向到文件,需要使用文件描述符2
cp 2> cperr.txt #2> 表示对错误信息重定向 -
==如何将正确输出和错误输出都写入到一个文件中?(最常用)==
cp > /tmp/cperr1.txt 2>&1 -
写一段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; }结果:
-
使用重定向进行输入
cmd < file
cat < /etc/passwd -
其他:
- cmd < &fd
- cmd > &fd
- cmd < &-