Bash 如果找到字符串,请退出脚本
我需要运行2个构建命令。其中一个在下面。条件是,如果它在第一次构建时发现字符串“Error”,它必须退出循环并且不应该再运行,但如果它没有,它必须运行另一个构建命令,即./v post build。我有以下信息,但我认为缺少了一些信息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
#!/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出错,我不知道为什么。