shell脚本中set -e的作用

set -e作用描述:shell中脚本运行中可能出现命令执行失败的情况,如果执行失败对后续有影响那么就应该退出脚本,不继续往下执行。set -e 命令就可以避免操作失败还继续往下执行的问题。

c 复制代码
#!/bin/sh

set -e

echo "make axp ..."

VERSION=$1

TOP_PATH=$(pwd)/..
PROJECT_PATH=$TOP_PATH/build/projects/$PROJECT

$PROJECT_PATH/post-image.sh $VERSION

echo "make ${PROJECT} axp done"

if [ -e $PROJECT_PATH/make_ota_pkg.sh ]; then
	echo "make ota ..."
	$PROJECT_PATH/make_ota_pkg.sh $VERSION
	echo "make ${PROJECT} ota done"
fi

linux系统自带的说明是:"Exit immediately if a simple command exits with a non-zero status.",也就是说,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。

例子:

c 复制代码
#!/bin/sh
set -e 
cat helloWrold.sh
echo $?
echo "hello,wrold"

脚本找不到helloWrold.sh,操作未成功,所以直接退出脚本,下面看一下去掉set -e的结果:

c 复制代码
#!/bin/sh
#set -e 
cat helloWrold.sh
#echo $?
echo "hello,wrold"

显然去掉set -e后,虽然cat操作未执行成功,但是脚本还是可以继续向下执行,不会主动退出脚本。

关于exit 0 exit 1以及echo $?说明

exit 0---是正常退出的命令

exit 1---是非正常退出的命令

echo $? 获取上次命令执行的结果,如果是0就是正常执行,如果非0就是执行出现了异常

相关推荐
AOwhisky18 分钟前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..1 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行1 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.1 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
CodeOfCC2 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器
宵时待雨3 小时前
linux笔记归纳3:linux开发工具
linux·运维·笔记
magrich4 小时前
安装NoMachine并解决无外接显示器桌面黑屏
linux·运维·服务器
fish_xk4 小时前
Linus基础指令
linux·服务器
宁波阿成4 小时前
在ubuntu22.04源码级安装sub2api
linux·运维·ubuntu·ai·api·token·中转站
charlie1145141915 小时前
嵌入式Linux驱动开发(7) 从虚拟设备到真实硬件 —— LED驱动硬件基础
linux·开发语言·驱动开发·内核·c