在Unix shell脚本中设置退出代码

时间:2014-02-20 02:23:56

标签: shell unix exit-code

我有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

1 个答案:

答案 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,您将看到“文件处理失败”消息,否则您会看到成功;删除文件,你会看到输入文件不存在消息。