我必须编写一个shell脚本,我不知道如何去做。 基本上我必须编写一个脚本,我会找到一个文件(可能有不同的命名)。如果任一文件存在则必须执行,如果它返回0(无错误),它应该继续构建,如果它不等于0(返回错误),它应该退出。如果找不到任何一个文件,它应该继续构建。
我必须找到的文件可以是file.1或file.2,因此可以命名为(file.1)或(file.2)。
使其更清晰的一些条件。 1)如果任一文件存在,它应该执行 - 如果它有任何错误它应该退出,如果没有错误它应该继续。 2)没有可能存在,如果是这种情况那么它应该继续构建。 3)两个文件不会同时出现(附加信息)
我试过写一个脚本,但我怀疑它更接近我正在寻找的东西。
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
非常感谢任何帮助。
提前致谢
答案 0 :(得分:2)
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
对于那些对我的语法感到困惑的人,请尝试运行:
true && echo "is true" || echo "is false"
false && echo "is true" || echo "is false"
答案 1 :(得分:0)
只需放行
file.sh
如果您将脚本设置为在出错时退出,则脚本中的应该可以正常工作。
例如,如果您的脚本是
#!/bin/bash -e
echo one
./file.sh
echo two
然后,如果file.sh
存在且可执行,它将运行并且您的整个脚本将运行。如果不是,则在尝试执行不存在的文件时脚本将失败。
如果要执行一个文件或另一个文件,请将想法扩展到以下内容:
#!/bin/bash -e
echo one
./file1.sh || ./file2.sh
echo two
这意味着如果file1.sh
不存在,它将尝试file2.sh
,如果存在,它将会运行并且您的整个脚本将会运行。
这当然会优先考虑file1
,这意味着如果它们都存在,那么只有file1会运行。