我有test.sh,它有多个返回条件,test1.sh只是echo语句。当我运行test2.sh时,我的逻辑应该运行test.sh处理文件,即“文件成功”并调用test1.sh脚本。它当其他条件执行时,不应该运行test1.sh脚本。“文件不成功”,“目录中不存在输入文件”
我面临的问题是,当它执行其他条件如“文件未成功”,“输入文件在目录中不存在”时,它不会将指定的退出代码重新调整为“1”,而是返回0即来自操作系统意味着工作成功。所以我从test.sh获得了所有不同条件的“0”,所以test1 .sh被调用,无论文件处理失败等等.Pls建议带有返回码
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
答案 0 :(得分:2)
当你在echo中使用它时,你会覆盖$?
- 之后,它包含echo本身的退出代码。将其存储在变量中以避免这种情况。
echo "In test2 script"
./test.sh
testresult=$?
echo "return code" $testresult
if [[ $testresult -eq 0 ]]; then
echo "inside"
./test1.sh
fi
编辑添加:由于您粘贴的代码不完整甚至无法运行,因此很难从test.sh中分辨出您想要的内容。 看起来像,就像cat
位于if
内一样,否则在输入文件丢失时会出错,而$?
测试什么都不做。所以我重新排列了这个:
FILES=input.txt
if [[ -f $FILES ]]; then
cat $FILES | awk -F '|' '/bad/{ exit 1 }'
if [[ $? -eq 0 ]]; then
echo "File processed successfully"
else
echo "File processing failed"
exit 1
fi
else
echo "Input file doesn't exist in directory"
exit 1
fi
我已经更改了awk脚本来演示条件全部工作:现在,如果我在input.txt中添加单词bad
,您将看到“文件处理失败”消息,否则您会看到成功;删除文件,你会看到输入文件不存在消息。