文章目录
输入输出重定向
输入重定向是将文件导入到命令
输出重定向是将原本要输出到屏幕的信息写入到指定文件
名称 | 专业术语 | 文件描述符 | 描述 |
---|---|---|---|
标准输入重定向 | 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系统中都是习惯大写。环境变量用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。