shell重定向与变量
一、重定向与管道符
重定向
重定向:改变电脑的数据输出方向,默认是输出在屏幕上
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 |
交互式硬件设备
-
标准输入:从该设备接收用户输入的数据
-
标准输出:通过该设备向用户输出数据
-
标准错误:通过该设备报告执行出错信息
重定向输入输出
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | 1>或> | 将输出结果保存到指定的文件(覆盖原有内容) |
1>>或>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 标准错误输出结果追加到指定的文件尾部 | |
混合输出 | &>无论对错都可以重定向 |
|
/dev/pts改变输出的终端显示器
管道符 |
将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用
管道符 |
结合 xargs
通常在以下情况下会很有用:
-
将命令的输出作为另一个命令的参数: 当你想要将一个命令的输出作为另一个命令的参数时,可以使用管道符结合
xargs
来实现。例如,你可能想要对find
命令的结果应用某种操作,而xargs
可以帮助你将这些结果作为参数传递给另一个命令。 -
批量处理文件列表: 当你需要对一个命令的输出中的每一行进行处理时,
xargs
就会派上用场。它可以将输入分割成适当大小的块,并将它们作为参数传递给另一个命令,从而避免参数列表过长的问题。 -
处理特殊字符: 在某些情况下,命令的输出可能包含特殊字符(如空格或换行符),而
xargs
可以帮助你处理这些特殊字符,确保命令的正确执行。 -
多线程执行命令: 通过
xargs
的-P
选项,你可以实现多线程执行命令,从而加速处理过程,特别是在处理大量数据时。
总的来说,当你需要将命令的输出作为另一个命令的参数,并且希望能够灵活地处理这些参数时,结合管道符和 xargs
是一个不错的选择。
例如批量操作文件: 可以使用 find
命令查找符合条件的文件,然后通过管道符将文件列表传递给 xargs
,再执行相应的操作,如删除、移动或压缩等。
find /path/to/files -type f -name "*.txt" | xargs rm
二、变量
变量类型
常见的shell变量类型包括:
- 自定义变量:由用户自己定义,修改和使用
- 预定义变量:Bash中内置的一类变量 shell 不能修改 规定好的变量 放在那里让你使用
- 环境变量:由系统维护,用于设置工作环境 当前目录 当前主机名 $PATH
- 只读变量:只可以读取不可以更改 只能不能修改
- 位置变量:通过命令行给脚本传递参数
变量调用
- 赋值时使用双引号(" ")可以直接调用变量
- 赋值时使用单引号(' ')变量$只会被认为是字符$ 不会调用变量
- 赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同
- {}可以分隔变量值
整数运算
运算符:
加法 + ; 减法 - ; 乘法 \* ; 除法 / ; 取余(取模)% ;
1.let
2.(())
3.$[]
4.expr(注意在运算符前后加空格)
5.bc
6.生成随机数
生成1-34的随机数:
i=$(expr 12 \ * 5 ) i=$((12 * 5)) i=$[12 * 5] let i=12*5 i++ 相当于 i=$[ $i+1 ] i-- 相当于 i=$[ $i - 1 ] i+=2 相当于 i=$[ $i+2 ]
环境变量
env查看环境变量
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径
预定义(状态)变量
bash 帮你定义的常见状态变量如下:
-
$*:表示所有位置参数的内容看成一个整体返回 返回所有
-
$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
-
-
$#:表示命令行中位置参数的总个数
-
$0:表示当前执行的脚本或程序的名称 当前脚本的名字
-
$$:当前bash的进程id
-
$!: 后台任务最后一个id
位置变量
位置变量也称为位置参数,使用$1、$2、$3、…$9 表示。
只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快方法重启