![将退出代码读取到脚本中](https://linux22.com/image/181575/%E5%B0%86%E9%80%80%E5%87%BA%E4%BB%A3%E7%A0%81%E8%AF%BB%E5%8F%96%E5%88%B0%E8%84%9A%E6%9C%AC%E4%B8%AD.png)
我创建此脚本是为了查找我需要测试的某些参数的退出代码。现在我需要创建第二个脚本来调用该脚本来检查退出代码。但是,第二个脚本需要从此脚本读取退出代码,然后为其分配文本。
例子:
传递/etc/resolve.conf
然后使用echo $?
返回0
现在我想要类似found file
回声的东西。
这是第一个查找退出代码的脚本
#/bin/bash
shopt -s -o nounset
if [ $# != 1 ]; then
exit 2
fi
if [[ ${1:0:1} = /* ]]; then
:
else
exit 3
fi
if [ -f ${1} ]; then
exit 0
else
exit 1
fi
这就是我的第二个脚本所处的位置。调用 ./script1.sh 后,我不明白如何将退出代码 0 设置为 = text。
#/bin/bash
shopt -s -o nounset
./script1.sh
我知道像这个例子一样在 script1 中包含 echo 会更容易,但在这种情况下它们需要从第二个文件中读取。
if [ -f ${1} ]; then
echo "file found"
exit 0
else
echo "file not found"
exit 1
fi
答案1
您拨打的电话script1.sh
是:
./script1.sh
调用后,脚本的退出代码将位于$?
.
但是,您在没有任何参数的情况下调用脚本,并且脚本的头部对参数数量进行了以下测试,并以错误代码 2 退出,除非恰好有 1 个。这与您在评论中提到的行为相符。
if [ $# != 1 ]; then
exit 2
fi
您可能想打电话script1.sh
提出一些争论。如果您想传递主脚本收到的参数,请使用
./script1.sh "$@" # pass all arguments
或者
./script1.sh "$1" # pass the first argument
(尽管即使没有为主脚本提供参数,后者也会传递一个空字符串。)
作为次要问题,您应该引用变量扩展,即"$#"
用 代替 $#
,"${1}"
或"$1"
用 代替${1}
。否则,脚本将因文件名包含空格而失败,甚至如果在脚本启动时将 设置为某个疯狂的值,也$#
可能会出错。IFS
另外,代替
if something; then
:
else
exit 3
fi
你可以写
if ! something; then
exit 3
fi
答案2
假设这是您的第二个脚本:
#/bin/bash
shopt -s -o nounset
./script1.sh
result=$?
echo $result
我将其分配给变量的原因是我存储以供将来处理 - 如果您调用另一个程序$?
将与另一个程序相关
这$?
就是之前的脚本返回的内容