[linux就该这么学] 第三章. 管道符、重定向及环境变量

输入输出重定向

输入重定向是将文件导入到命令
输出重定向是将原本要输出到屏幕的信息写入到指定文件

名称 专业术语 文件描述符 描述
标准输入重定向 STDIN 0 默认从键盘输入,也可以从其他文件或命令中输入
标准输出重定向 STDOUT 1 默认输出到屏幕,可指定文件
错误输出重定向 STDERR 2 默认输出到屏幕,可指定文件

将输出写入文件时需要区别标准输出和错误输出信息。

输入重定向

符号 作用
< 将文件作为命令的标准输入
<< 从标准输入值中读入,直到遇到分界符
<文件1 >文件2 将文件1作为命令的标准输入并将标准输出到文件2

i. < 标准输入重定向

将readme.txt作为wc的输入

wc -l < readme.txt

ii. << 读取命令行输入,直到遇到指定的分界符停止

cat << STOP > 1.txt
> 1
> 2
> 3
> STOP
# 1.txt
1
2
3

iii. 命令 < 文件1 > 文件2

将readme.txt的行数统计到count.txt

wc -l < readme.txt > count.txt

输出重定向

符号 作用
>,1>(1可以省略) 将输出到屏幕的信息重定向到文件
2> 将错误输出重定向到文件
>>,1>>(1可以省略) 将输出到屏幕的信息重定向到文件,如果文件存在则追加到文件原有内容后
2>> 将错误输出重定向到文件,如果文件存在则追加到文件原有内容后
>>文件 2>&1, &>>文件 将输出和错误输出共同追加到文件原有内容后

i. > 标准输出重定向

将输出到屏幕的Hello,World重定向写入welcome文件

echo "Hello World" > welcome

ii. 2> 错误输出重定向

pp文件夹不存在,报错

# 不使用重定向
ls -l pp
ls: 无法访问'pp': 没有那个文件或目录
# 使用2>错误输出重定向
ls -l pp 2> error.log

# 错误提示被重定向到error.log中
# error.log
ls: 无法访问'pp': 没有那个文件或目录
# 使用标准输出重定向,无法拦截错误
ls -l pp > error.log
ls: 无法访问'pp': 没有那个文件或目录

iii. >> 标准输出追加到文件原有内容后

echo Hello > welcome
echo World >> welcome

# welcome
Hello
World

ix. 2>> 错误输出追加到文件原有内容后

ls -l xx 2>> error.log

# error.log
ls: 无法访问'pp': 没有那个文件或目录
ls: 无法访问'xx': 没有那个文件或目录

x. >>文件 2>&1, &>>文件 输出和错误输出共同追加到文件原有内容后

mkdir -p a/b/c/d 
ls -l a b >> record.log 2>&1 # >> record.log 即打开record.log文件追加标准输出 2>&1(&1是对>> record.log的引用) 比 >> record.log 2>> record.log效率更高

# record.log
ls: 无法访问'b': 没有那个文件或目录
a:
总用量 4
drwxrwxr-x 3 ling ling 4096 8月  15 10:33 b

ls -l a b &>> record.log

# record.log
ls: 无法访问'b': 没有那个文件或目录
a:
总用量 4
drwxrwxr-x 3 ling ling 4096 8月  15 10:33 b
ls: 无法访问'b': 没有那个文件或目录
a:
总用量 4
drwxrwxr-x 3 ling ling 4096 8月  15 10:33 b

管道命令符

格式: Command1 | Command2 将Command1的结果传递给Command2

举个例子: 批量删除大量相同后缀名文件的时候就可以用到管道符

ls | grep .log | xargs rm -rf 
# ls 列出当前目录下文件/文件夹
# grep 文本匹配 .log文件类型文件
# xargs 将管道或者标准输入转换为命令行参数传递给rm

命令行的通配符

支持通配符操作

例如: 查询多个文件夹下的所有.log文件

ls /log/test-[0-9] | grep .log

常用的转义字符

符号 作用
| 符号后一个变量变为单纯的字符串
‘’ 转义其中所有的变量为单纯的字符串
“” 保留其中的变量属性
`` 把其中的命令执行后返回结果

i. \ 反斜杠

PRICE=5
echo "Price is $PRICE"
# Price is 5

echo "Price is $$PRICE" # $$ 是返回当前进程PID
# Price is 22835PRICE

echo "Price is \$$PRICE" # 所以我们需要用\来将第一个$转义成单纯的字符
# Price is $5

ii. ‘’ 单引号

PRICE=5
echo 'Price is $PRICE'
# Price is $PRICE

iii. “” 双引号

PRICE=5
echo "Price is $PRICE"
# Price is 5

ix. ``

` 这叫什么?

echo `expr 9+3`
# 12

环境变量

环境变量是计算机系统用于保存可变值的数据类型,一般在LINUX系统中都是习惯大写。环境变量用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。

猜你喜欢

转载自blog.csdn.net/qq_35104586/article/details/108017949