shell to find a file , execute it - exit if 'error' and continue if ' no error'

 ̄綄美尐妖づ 提交于 2019-12-13 08:13:37

问题


I have to write a shell script and i don't know how to go about it. Basically i have to write a script where i'd find a file ( it could be possibly named differently). If either file exists then it must be executed, if it returns a 0 ( no error), it should continue the build, if it's not equal to 0 ( returns with error), it should exit. If either file is not found it should continue the build.

the file i have to find could be either file.1 or file.2 so it could be either named (file.1), or (file.2).

some of the conditions to make it more clear. 1) if either file exists , it should execute - if it has any errors it should exit, if no errors it should continue. 2) none could exist, if that's the case then it should continue the build. 3) both files will not be present at the same time ( additional info)

I have tried to write a script but i doubt it's even closer to what i am looking for.

if [-f /home/(file.1) or (file.2)]
then 
  -exec /home/(file.1) or (file.2)
   if [ $! -eq 0]; then
   echo "no errors continuing build"
   fi
   else
   if [ $! -ne 0] ; then
   exit ;
   fi
else 
   echo "/home/(file.1) or (file.2) not found, continuing build"
fi

any help is much appreciated.

Thanks in advance


回答1:


DOIT=""
for f in file1.sh file2.sh; do
  if [ -x /home/$f ]; then DOIT="/home/$f"; break; fi
done
if [ -z "$DOIT" ]; then echo "Files not found, continuing build"; fi
if [ -n "$DOIT" ]; then $DOIT && echo "No Errors" || exit 1; fi

For those confused about my syntax, try running this:

true && echo "is true" || echo "is false"
false && echo "is true" || echo "is false"



回答2:


Just putting the line

file.sh

in your script should work, if you set up your script to exit on errors.

For example, if your script was

#!/bin/bash -e
echo one
./file.sh
echo two

Then if file.sh exists and is executable it would run and your whole script would run. If not, the script would fail when it tried to execute the non-existing file.

If you want to execute one file or the other, extend the idea to the following:

#!/bin/bash -e
echo one
./file1.sh || ./file2.sh
echo two

This means if file1.sh does not exist, it will try file2.sh and if that is there it will run and your whole script will run.

This give preference to file1 of course, meaning if they both exist, then only file1 will run.



来源:https://stackoverflow.com/questions/11595846/shell-to-find-a-file-execute-it-exit-if-error-and-continue-if-no-error

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!