重定向 多行重定向
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | ( )> | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | ( )> | 将错误信息保存到指定的文件(覆盖原有内容) |
( )>> | 标准错误输出结果追加到指定的文件尾部 | |
混合输出 | &>无论对错都可以重定向 | 将标准输出、标准错误的内容保存到同一个文件中 |
& 代表混合
多行重定向
可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。
可用于将内容写入文件,修改密码,变量赋值,多行注释
管道符
将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用
*管道符 | *
假设我们要只显示网卡的ip地址就会用到管道符
查看网卡
只显示ip地址
弱引用和强引用
"$name " 弱引用,其中的变量引用会被替换为变量值
'$name ’ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
1.赋值时使用双引号(" ")可以直接调用变量
2.赋值时使用单引号(’ ') 只会被认为是字符 只会被认为是字符 只会被认为是字符 不会调用变量
3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同
4.{}可以分隔变量值
read -p
从键盘输入的内容变成变量
变量作用范围
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用
方法:
- 格式1:export 变量名
- 格式2:export 变量名=变量值
可以使用pstree 查看shell的环境
输入bash进入子shell
ctrl+D组合exit 退出子shell
整数的运算
expr只能进行整数的运算
格式: expr 变量1 运算符 变量2 [运算符 变量3]
运算符:
加法 +
减法 -
乘法 \ *
除法 /
取余 (取模)%
例
let 支持加加减减 使用较多
i++ 是先赋值再加
++i 是加后再赋值
例
i++ 相当于 i=$[ $i+1 ]
i-- 相当于 i=$[ $i - 1 ]
i+=2 相当于 i=$[ $i+2 ]
环境变量
- 由系统提前创建,用来设置用户的工作环境
- 可以使用env查看环境变量
- 需要记住的常用环境变量
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径
环境变量:
- 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
- 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
- 一般只在系统配置文件中使用,在脚本中较少使用
只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快解决方法重启
位置变量
位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示
测试
操作符:
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-a:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-L: 测试是否为软连接文件
属性测试补充:
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某终端已经打开
-N FILE #文件自从上一次被读取之后是否被修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组
测试过程,实现评估布尔声明,以便用在条件性环境下进行执行
若真,则状态码变量 $? 返回0
若假,则状态码变量 $? 返回1
比较整数数值
[ 整数1 操作符 整数2 ] 公式
- -eq:第一个数等于(Equal)第二个数
- -ne:第一个数不等于(Not Equal)第二个数
- -gt:第一个数大于(Greater Than)第二个数
- -lt:第一个数小于(Lesser Than)第二个数
- -le:第一个数小于或等于(Lesser or Equal)第二个数
- -ge:第一个数大于或等于(Greater or Equal)第二个数