嵌入式成长轨迹6 【嵌入式环境及基础】【Linux shell强化】【Shell输入输出】
一、命令
1、echo
可以显示文本行或变量,或者把字符串输入到文件
echo [option] string
-e 保持字符串中转义字符特殊含义(否则会直接输出)
-n 回车不换行
转义符(\c回车不换行 \f禁止 \t相当于tab \n换行)
2、read
可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
read var1 var2
如果只指定了一个变量,那么read会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车;如果给出了多个变量,则按顺序被分别赋值,以空格作为变量之间的分隔符
3、cat
用来显示文件内容,创建文件,还可以用它来显示控制字符
cat [options] name1 name2
-v 显示控制字符
使用cat命令时要注意,它不会在分页符时停下来。除非使用管道与more、less连接,或者直接使用less
4、管道
之前已经提及
df -k |awk '{print $1}' |grep -v "Filesystem"
显示所有分区(显示分区资料|得到第一列|去除“Filesystem”)
5、tee
把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。
tee -a files
-a 指插入原有文件末尾(没有则会重写该文件)
比较常用于管道之后
如
who |tee who.out
df -k|awk '{print $1}'|grep -v "Filesystem"|tee partation.txt
6、exec
重新启动一个shell用来替代当前shell
exec command 其中的command通常是个shell脚本
只有在对文件描述符进行操作时不会覆盖你当前的shell
二、标准输入、输出和错误
输入、输出、错误文件描述符分别是0,1,2(输入缺省是键盘,后两个缺省是屏幕)
系统中实际上有12个文件描述符,可以任意使用文件描述3到9
1、文件重定向
之前说过> <
>file.txt 创建一个空的file.txt
command >> file 追加
command 1 > file 标准输出重定向到文件(等同于不加1)
command > file 2>&1 把标准输出和标准错误一起重定向到一个文件中(>>可以追加)
command 2 > file 把标准错误重定向到一个文件中
command 2 >> file 追加标准错误到文件
command <file> file1 以file作为command标准输入,file1作为command标准输出
command << delimiter 从标准输入中读入直至遇到delimiter分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 关闭标准输入
2、举例
cat >>team.txt <<;
将读取标准输入到文本team.txt,直至遇到分号
grep "haha" miss > /dev/null
无视错误
cat file.txt file1.txt 1>file.out 2>file.err
输出正常的到file.out,错误到file.err
3、合并标准输出和标准输入
shell是从左到右分析相应的命令的
grep "standard" standard.txt > grep.out 2>&1
标准输出到grep.out,标准错误输出到标准输出
三、文件描述符
exec与文件描述符结合,此时不会覆盖当前的shell
#!/bin/bash
#file_desc
#将3作为标准输入,name.txt输入到标准输入,相当于打开文件描述符3
exec 3<&0 0<name.txt
read line1
read line2
#将0作为标准输入,相当于关闭文件描述符3
exec 0<&3
echo $line1
echo $line2