概述
set
命令主要是显示系统中已经存在的变量和修改选项。
使用 set
命令可以更改选项,其中 +
表示关闭选项,-
表示打开选项。
注:
set
命令不能够定义新的变量,但能改变变量的值。
语法
该命令的语法如下:
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
该命令支持的选项有:
选项 | 说明 |
---|---|
-a | 标示已修改的变量,以供输出至环境变量 |
-b | 使被中止的后台程序立刻回报执行状态 |
-C | 转向所产生的文件无法覆盖已存在的文件 |
-d | Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消 |
-e | 若指令传回值不等于0,则立即退出shell |
-f | 取消使用通配符 |
-h | 自动记录函数的所在位置 |
-H | Shell可利用”!”加<指令编号>的方式来执行history中记录的指令 |
-k | 指令所给的参数都会被视为此指令的环境变量 |
-l | 记录for循环的变量名称 |
-m | 使用监视模式 |
-n | 只读取指令,而不实际执行 |
-p | 启动优先顺序模式 |
-P | 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接 |
-t | 执行完随后的指令,即退出shell |
-u | 当执行时使用到未定义过的变量,则显示错误信息 |
-v | 显示shell所读取的输入值 |
-x | 执行指令后,会先显示该指令及所下的参数 |
使用
显示所有变量
如果要显示所有变量,语法格式如下:
set
查找指定变量
如果要查找指定变量,可以通过 grep
命令来检索。命令格式如下:
# 语法
set | grep 变量名
# 示例,查找 msg 变量
set | grep msg
查看所有选项的设置情况
如果要查看所有属性的设置情况,即是打开还是关闭状态。命令格式如下:
set -o
关闭或打开指定选项
关闭或打开指定选项的命令格式如下:
# 语法
# 关闭指定选项
set +o 选项名
# 打开指定选项
set -o 选项名
# 示例
# 关闭 vi 选项
set +o vi
# 打开 vi 选项
set -o vi
-e
选项
可以把 set -e
放在脚本的开头位置,它之后出现的代码,一旦出现了返回值非零的情况的,整个脚本就会立即退出。
#!/bin/bash
set -e
# 之后的脚本内容,一旦某个命令的返回值出现了非零则会退出脚本
而 set +e
是默认的状态,表示后续的命令如果返回值不是零,脚本仍然向下执行。
注:
set +e
是关闭-e
选项;set -e
表示打开-e
选项。
-u
选项
-u
选项表示shell脚本执行时如果遇到不存在的变量会报错并停止执行。默认不加 -u
选项的情况下,shell脚本遇到不存在的变量不会报错,会继续执行。
set -u
通常也是放在开头,而 set +u
可以关闭该选项。
#!/bin/bash
# 默认是 set +u 关闭选项的,所以输出不存在的变量不会报错也不会结束脚本
echo "$hello"
# 开启 -u 选项,之后的代码中如果遇到不存在的变量则会报错并且停止执行
set -u
echo "$test"
获取位置参数
在调用 shell 脚本时,通常需要传递参数给 shell 脚本,这些参数就是位置参数,但如果想要在没用用 shell 脚本时也使用位置参数,那么就可以用 --
来实现。这个符号 --
是用来分隔后面的内容的,这样 set
命令就不会把后面的选项和内容解析成 set
本身的选项,而是当作位置参数,可以通过 $1
这样的格式来获取:
set -- p1 p2 -host -3