学而实习之 不亦乐乎

Linux:set 命令

2022-07-02 08:47:29

set 命令用于设置 shell。

set 指令能设置所使用 shell 的执行方式,可依照不同的需求来做设置。

一、语法

set [+-abCdefhHklmnpPtuvx]

参数说明:

-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曾启动的参数。

二、实例

1、显示环境变量

# set

BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="00" [2]="15" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='3.00.15(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=99
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=hnlinux
HOSTTYPE=i386
IFS=$' '
INPUTRC=/etc/inputrc
KDEDIR=/usr
LANG=zh_CN.GB2312
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LINES=34
L
MAIL=/var/spool/mail/root
MAILCHECK=60
OLDPWD=/home/uptech
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin
PIPESTATUS=([0]="2")
PPID=26005
PROMPT_COMMAND='echo -ne "

2、set -e

-e 参数表示只要shell脚本中发生错误,即命令返回值不等于0,则停止执行并退出shell。
注:set +e 表示关闭-e选项,set -e 表示重新打开-e选项。

例如:test.sh 脚本内容如下:

#!/usr/bin/env bash
set -e

hello
echo "Hello set"

执行结果如下:

# sh test.sh
test.sh: 4: test.sh: hello: not found

3、set -u

-u 参数表示shell脚本执行时如果遇到不存在的变量会报错并停止执行。默认不加 -u 参数的情况下,shell脚本遇到不存在的变量不会报错,会继续执行。

例如:test.sh 脚本内容如下:

#!/usr/bin/env bash

set -u
echo $hello
echo $CUDA_HOME

执行结果如下:

# sh test.sh
test.sh: 2: test.sh: hello: parameter not set