Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果找到字符串,请退出脚本_Bash_Unix_Build_Oracle Sqldeveloper - Fatal编程技术网

Bash 如果找到字符串,请退出脚本

Bash 如果找到字符串,请退出脚本,bash,unix,build,oracle-sqldeveloper,Bash,Unix,Build,Oracle Sqldeveloper,我需要运行2个构建命令。其中一个在下面。条件是,如果它在第一次构建时发现字符串“Error”,它必须退出循环并且不应该再运行,但如果它没有,它必须运行另一个构建命令,即./v post build。我有以下信息,但我认为缺少了一些信息 #!/bin/bash cd /etc/logs ./v pre-build > test_file File=test_file value=$(grep -c Error $File ) if [ $value -eq 1 ] then echo "It

我需要运行2个构建命令。其中一个在下面。条件是,如果它在第一次构建时发现字符串“Error”,它必须退出循环并且不应该再运行,但如果它没有,它必须运行另一个构建命令,即./v post build。我有以下信息,但我认为缺少了一些信息

#!/bin/bash
cd /etc/logs
./v pre-build > test_file
File=test_file
value=$(grep -c Error $File )
if [ $value -eq 1 ]
then
echo "It's available"
else
./v post-build > test_file1
fi

您正在检查单词错误是否出现1

我建议您检查是否有一个或多个:

   if [ $value -eq 1 ]
   # change to:
   if [ $value -gt 1 ]

您正在检查单词错误是否出现1

我建议您检查是否有一个或多个:

   if [ $value -eq 1 ]
   # change to:
   if [ $value -gt 1 ]

如果发现任何错误,您可以使用grep进行如下静默测试:

!/bin/bash

cd /etc/logs

./v pre-build > test_file
grep -q "Error" test_file

if [ "$?" -ne "0" ]; then
    echo "It's available"
else
    ./v post-build > test_file1
fi

如果发现任何错误,您可以使用grep进行如下静默测试:

!/bin/bash

cd /etc/logs

./v pre-build > test_file
grep -q "Error" test_file

if [ "$?" -ne "0" ]; then
    echo "It's available"
else
    ./v post-build > test_file1
fi

除非需要为后期处理保存输出,否则不需要生成中间文件。您的脚本可以简单到:

#!/bin/bash
cd /etc/logs
./v pre-build | grep -q Error && exit 1
./v post-build
./v pre-build && ./v post-build
如果要保留中间文件,只需使用
tee

#!/bin/bash
cd /etc/logs
./v pre-build | tee test_file | grep -q Error && exit 1
./v post-build > test_file1
这将删除输出“It's available”,而不是在预构建生成错误时返回失败。如果您控制了
v
,那么您应该让它也返回一个错误,而不是在其输出中生成一个字符串,因为您可以将脚本简化为:

#!/bin/bash
cd /etc/logs
./v pre-build | grep -q Error && exit 1
./v post-build
./v pre-build && ./v post-build

(在该行中,
&&
短路,因此只有在预构建成功时,后构建才会运行。)

除非需要保存输出以进行后处理,否则无需生成中间文件。您的脚本可以简单到:

#!/bin/bash
cd /etc/logs
./v pre-build | grep -q Error && exit 1
./v post-build
./v pre-build && ./v post-build
如果要保留中间文件,只需使用
tee

#!/bin/bash
cd /etc/logs
./v pre-build | tee test_file | grep -q Error && exit 1
./v post-build > test_file1
这将删除输出“It's available”,而不是在预构建生成错误时返回失败。如果您控制了
v
,那么您应该让它也返回一个错误,而不是在其输出中生成一个字符串,因为您可以将脚本简化为:

#!/bin/bash
cd /etc/logs
./v pre-build | grep -q Error && exit 1
./v post-build
./v pre-build && ./v post-build

(在该行中,
和&
短路,因此只有在预构建成功时,后期构建才会运行。)

这里没有循环。您可以使用
grep-q
并检查退出状态,当我使用grep-q测试时,我得到一个错误。@james,请记住
if
条件实际上是一个命令--
[
是一个命令。shell根据该命令的退出状态进行分支。您需要:
if grep-q error“$File”;然后…
@glennjackman第5行:如果找不到grep-q:command。我一直收到这个错误,这就是我更改脚本的原因。这是一个多么奇怪的错误。这向我表明您的编辑器很时髦(空格不是普通的ascii空格)或者你在奇怪的地方有引号。你需要显示你更新的代码。这里没有循环。你可以使用
grep-q
并在我用grep-q测试时检查退出状态,我得到一个错误。@james,请记住
if
条件实际上是一个命令--
[
是一个命令。shell根据该命令的退出状态进行分支。您需要:
如果grep-q错误“$File”;然后…
@glennjackman第5行:如果grep-q:command未找到。我一直收到此错误,这就是我更改脚本的原因。这是一个多么奇怪的错误。这向我表明,您的编辑器很时髦(空格不是纯ascii空格)或者你在奇怪的地方有引号。你需要显示你的更新代码。谢谢,但没有帮助。谢谢,但没有帮助。你的第一个没有tee的代码很好,只是我不得不用-c而不是-q。我总是用-q出错,我不知道为什么。你的第一个没有tee的代码很好,只是我不得不用-c而不是-q。我总是用-q出错,我不知道为什么。