我需要运行2个构建命令。其中一个在下面。条件是,如果它找到字符串"错误"在第一次构建时,它必须退出循环并且不应该再运行但是如果它不是必须运行另一个构建命令,即./v后构建。我有以下内容,但我认为缺少了一些东西。
#!/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
答案 0 :(得分:2)
除非您需要保存输出以进行后期处理,否则无需生成中间文件。您的脚本可以像下面这样简单:
#!/bin/bash
cd /etc/logs
./v pre-build | grep -q Error && exit 1
./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
这会删除输出"它可用"而是在预构建生成错误时返回失败。如果您拥有v
的控制权,那么您应该让它返回错误而不是在其输出中生成一个字符串,因为您可以使脚本变得如此简单:
./v pre-build && ./v post-build
(在该行中,&&
短路,因此只有在预构建成功后才会运行后期构建。)
答案 1 :(得分:0)
您正在检查 1 出现的单词Error。
我建议您检查是否有一个或多个:
if [ $value -eq 1 ]
# change to:
if [ $value -gt 1 ]
答案 2 :(得分:0)
如果发现任何错误,您可以使用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