文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也须要使用文件描述符来访问文件。shell
内核为每一个进程维护该进程打开的文件记录表。文件描述符只适于Unix、Linux操做系统。数组
文件描述符bash |
描述运维 |
映射关系ide |
0spa |
标准输入,键盘操作系统 |
/dev/stdin -> /proc/self/fd/0orm |
1blog |
标准输出,屏幕进程 |
/dev/stdout -> /proc/self/fd/1 |
2 |
标准错误,屏幕 |
/dev/stderr -> /proc/self/fd/2 |
符号 |
描述 |
> |
符号左边输出做为右边输入(标准输出) |
>> |
符号左边输出追加右边输入 |
< |
符号右边输出做为左边输入(标准输入) |
<< |
符号右边输出追加左边输入 |
& |
重定向绑定符号 |
输入和输出能够被重定向符号解释到shell。
shell命令是从左到右依次执行命令。
下面n字母是文件描述符。
1)覆盖输出
通常格式:[n]>word
若是n没有指定,默认是1
示例:
打印结果写到文件:echo "test" > a.txt
当没有安装bc计算器时,错误输出结果写到文件:echo "1 + 1" |bc2 > error.log
2)追加剧定向输出
通常格式:[n]>>word
若是n没有指定,默认是1
示例:
打印结果追加到文件:echo "test" >> a.txt
当没有安装bc计算器时,错误输出结果追加文件:echo "1 + 1" |bc2 > error.log
通常格式:[n]<word
若是n没有指定,默认是0
示例:
a.txt内容做为grep输入:grep "test" --color < a.txt
1)覆盖重定向标准输出和标准错误
两种格式重定向标准输出和标准错误:
&>word和>&word 等价于 >word 2>&1
&将标准输出和标准输入绑定到一块儿,重定向word文件。
示例:
当不肯定执行对错时都覆盖到文件:echo "1 + 1" |bc &> error.log
当不肯定执行对错时都覆盖到文件:echo "1 + 1" |bc > error.log 2>&1
2)追加标准输出和标准错误
追加格式:&>>word 等价于>>word2>&1
当不肯定执行对错时都追加文件:echo "1 + 1" |bc &>> error.log
将标准输出和标准标准输入追加剧定向到word:
<<[-]word
here-document
delimiter
从当前shell读取输入源,直到遇到一行只包含delimiter终止,内容做为标准输入。
将eof标准输入做为cat标准输出再写到a.txt:
# cat << eof 123 abc eof 123 abc # cat > a.txt << eof > 123 > abc > eof
/dev/null是一个空设备,向它写入的数组都会丢弃,但返回状态是成功的。与其对应的还有一个/dev/zero设备,提供无限的0数据流。
在写Shell脚本时咱们常常会用到/dev/null设备,将stdout、stderr输出给它,也就是咱们不想要这些输出的数据。
经过重定向到/dev/null忽略输出,好比咱们没有安装bc计算器,正常会抛出没有发现命令:
# echo "1 + 1" |bc >/dev/null 2>&1
这就让标准和错误输出到了空设备。
忽略标准输出:
# echo "test" >/dev/null
忽略错误输出:
# echo "1 + 1" |bc 2>/dev/null
博客地址:http://lizhenliang.blog.51cto.com
QQ群:323779636(Shell/Python运维开发群)
read命令从标准输入读取,并把输入的内容复制给变量。
命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars][-p prompt] [-t timeout] [-u fd] [name ...]
-e |
在一个交互shell中使用readline获取行 |
-r |
不容许反斜杠转义任何字符 |
-s |
隐藏输入 |
-a array |
保存为数组,元素以空格分隔 |
-d delimiter |
持续读取直到遇到delimiter第一个字符退出 |
-i text |
将test文本做为 |
-n nchars |
读取nchars个字符返回,而不是等到换行符 |
-N nchars |
读取nchars个字符返回,除非遇到文件结束符或超时,其余分隔符都被忽略 |
-p prompt |
提示信息 |
-t timeout |
等待超时时间,秒 |
-u fd |
指定文件描述符号码做为输入,默认是0 |
name |
变量名 |
示例:
获取用户输入保存到变量: # read -p "Please input your name:" VAR Please input your name: lizhenliang # echo $VAR lizhenliang 用户输入保存为数组: # read -p "Please input your name:" -a ARRAY Please input your name: a b c # echo ${ARRAY[*]} a b c 遇到e字符返回: # read -d e VAR 123 456 e # echo $VAR 123 456 从文件做为read标准输入: # cat a.txt adfasfd # read VAR < a.txt # echo $VAR adfasfd while循环读取每一行做为read的标准输入: # cat a.txt |while read LINE; do echo$LINE; done 123 abc 分别变量赋值: # read a b c 1 2 3 # echo $a 1 # echo $b 2 # echo $c 3 # echo 1 2 3 | while read a b c;do echo"$a $b $c"; done 1 2 3