管道主要是将两个应用程序连接在一起,将第一个应用程序的输出作为第二个应用程序的输入。
管道符是 |,例如:
ps | cat
ls -l | more
它将前一个命令执行的结果传递给后面的命令。使用管道符时,会为管道符前后的命令创建子进程,如
cd /bin | ls
会发现当前进程的目录并没有因为执行 cd /bin 而改变。
一个进程在运行时,默认会打开标准输入(0)、标准输出(1)、错误输出(2)这三个文件描述符。
<````read var < /path/to/a/file ```* 输出重定向符号 >、>>、2>、&>````echo 123 > /path/to/a/fileecho 123 >> /path/to/a/fileecho 123 2> /path/to/a/fileecho 123 &> /path/to/a/file 上例中,使用 `>` 和 `>>` 都会将内容写到文件中。对于 `>` ,会先将原文件中的内容清空,然后再将内容写进去。`>>` 则会保持原文件中的内容不变,在原文件内容的下一行进行追加。`2>` 是对文件描述符2进行操作,也叫做错误重定向。`&>` 输入的内容不管是正确的、还是错误的,都写到指定的文件中,上例是 `/path/to/a/file`。* 输入和输出重定向组合使用一般在 shell 中产生一个新文件时,会组合使用输入、输出重定向。#!/bin/bashcat > /path/to/a/file << EOFecho "hello world"EOF ```变量变量名的命名规则
为变量赋值的过程,称为变量替换。
Shell 中的变量是不区分类型的,所以 Shell 也叫做弱类型语言。
a=123 * 使用 let 为变量赋值let 可以让等号后的数值进行计算let a=10+20 * 将命令赋值给变量将命令赋值给变量的场景用的不多,大多数情况下,是将命令执行的结果赋值给某一个变量,就是下述的列举的场景。l=ls * 将命令结果赋值给变量,使用 $() 或者 ``l=$(ls -l) 或l=`ls -l` * 变量值有空格等特殊字符可以包含在 “” 或 ‘’ 中l="hello world"