ubuntu · 2025-02-19 0

sh -x -e 参数和退出状态码

1.参数

sh 执行 shell 脚本

参数

  • -x 调试模式,在执行过程中,将每一条被执行的命令行显示出来。
  • -e 遇到错误时立即退出,如果一个命令返回非零状态(即发生错误),则立即退出整个脚本。

2.例子

a.txt 内容有:

this is a.txt

test.sh 内容有:

echo "- - - 1 - - -"
cat a.txt
echo "- - - 2 - - -"
cat b.txt
echo "- - - 3 - - -"

执行结果:

zxm@zxm-pc:~/shell$ sh test.sh 
- - - 1 - - -
this is a.txt
- - - 2 - - -
cat: b.txt: 没有那个文件或目录
- - - 3 - - -
zxm@zxm-pc:~/shell$ sh -x test.sh 
+ echo - - - 1 - - -
- - - 1 - - -
+ cat a.txt
this is a.txt
+ echo - - - 2 - - -
- - - 2 - - -
+ cat b.txt
cat: b.txt: 没有那个文件或目录
+ echo - - - 3 - - -
- - - 3 - - -
zxm@zxm-pc:~/shell$ sh -e test.sh 
- - - 1 - - -
this is a.txt
- - - 2 - - -
cat: b.txt: 没有那个文件或目录

3.脚本退出状态码

在 Unix 和类 Unix 系统(如 Linux)中,每个执行的命令或脚本完成后都会返回一个退出状态码,它是一个介于 0 到 255 之间的整数。这个状态码通常用来表示命令执行的结果:0 表示成功,非零值表示不同的错误情况。
要获取命令执行后的退出状态码,可以使用特殊变量 $?。该变量保存了最后执行的命令或脚本的退出状态码。

查看退出状态码

zxm@zxm-pc:~/shell$ cat a.txt
this is a.txt
zxm@zxm-pc:~/shell$ echo $?
0
zxm@zxm-pc:~/shell$ cat b.txt
cat: b.txt: 没有那个文件或目录
zxm@zxm-pc:~/shell$ echo $?
1

主动设置退出状态码

#!/bin/bash
# 检查文件是否存在
if [ -f "a.txt" ]; then
    echo "File exists."
    exit 0 # 成功退出
else
    echo "File does not exist."
    exit 1 # 错误退出
fi