【发布时间】:2014-02-20 02:23:55
【问题描述】:
我有 test.sh 它有多个返回条件和 test1.sh 只是回显语句。当我运行 test2.sh 我的逻辑应该运行 test.sh 处理文件,即“文件成功”并调用 test1.sh 脚本。它执行其他 else 条件时不应运行 test1.sh 脚本。即“文件未成功”、“目录中不存在输入文件”
我面临的问题是,当它执行“文件未成功”、“目录中不存在输入文件”等其他条件时,它没有将“1”重新调整为指定的退出代码,而是返回 0,即从操作系统意味着工作成功。因此,对于所有不同的条件,我都从 test.sh 获得“0”,因此无论文件处理是否失败等都会调用 test1 .sh。请提供返回码的建议
test.sh
FILES=/export/home/input.txt
cat $FILES | nawk -F '|' '{print $1 "|" $2 "|" }' $f > output.unl
if [[ -f $FILES ]];
then if [[ $? -eq 0 ]]; then
echo "File successfully"
else
echo "File not successfully"
exit 1
fi
else
echo "Input file doesn't exists in directory" exit 1 fi
================================================ ==========================
test1.sh
echo "Input file exists in directory"
test2.sh
echo "In test2 script"
./test.sh
echo "return code" $?
if [[ $? -eq 0 ]]; then
echo "inside"
./test1.sh
fi
【问题讨论】:
-
test.sh的格式似乎不正确(见最后一行)。另外,$FILES是如何初始化的?此外,在test.sh中测试$?似乎没有必要,因为您已经在使用-f测试$FILES的存在。 -
您的
test.sh在语法上无效 -nawk程序缺少单引号,并且最后一行将不起作用,除非您至少将fi放在单独的行上。如果您确实有exit 1与您的echo语句在同一行,那么它只会成为另一个输出字符串,这将解释为什么未设置退出代码。 -
当您避免显式测试
$?时,此类问题通常会消失。无需测试$?,只需检查实际调用。也就是说,写if ./test.sh; then echo inside; ...; fi -
您显示的示例代码显然不是您的实际代码(您真的“回显 ... exit 1 fi”吗?它使
if未关闭,只是回显exit 1而不是执行exit?),所以任何答案都纯属推测,但我认为您的exit可能是从子外壳中调用的。