基于grep返回的操作

时间:2015-08-23 16:02:16

标签: bash shell

我想知道如何执行shell命令并根据返回执行另一个命令。

我现在只有这个命令可以玩,无处可去。

grep "data" `ls -tr | tail -1`

单独运行正常,并在最新的时间戳文件中greps'数据'。 我知道我需要if语句和条件,但我的结构不起作用,请你告诉我最好的方法。

所以重申一下,我希望能够在文件夹中grep最新文件,并根据我在案例'data'中从grep中找到的返回执行另一个命令,在我的例子中是:

ping google.com > ping.txt

我的文件结构是... / test / test_files / test.1.txt

我需要从... / test / location。

运行脚本

我的test1.txt文件如下:

send data ping

我还需要排除搜索我正在运行的实际脚本,因此将使用--exclude = myscript.sh。

取自amdixon的答案,并重新调整了一点,这是有效的。

#!/bin/bash

last_file=$(ls -tr ../test/test_files/* | tail -1);
grep -r "data" --exclude=test1.txt "$last_file" 1>/dev/null;

if [[ $? -eq 0 ]]; then
  printf "found..\n";
  ping google.com > googlestack.txt
else
  printf "not found..\n";
fi

// Bubs。

4 个答案:

答案 0 :(得分:1)

只需添加一个if:

if grep data "$(ls -tr | tail -1)"; then
  cmd  # some command to execute if the file matches
else
  cmd # command to execute if the file does not match
fi

请注意,您已将双引号放在错误的位置:'data'不受字段拆分的影响,因为它不包含空格,但是由进程替换生成的字符串需要进行字段拆分,因此它必须是引述。

答案 1 :(得分:1)

查找当前目录without using ls中的最新条目:

#!/bin/bash

unset -v latest
dir="."

for file in "$dir"/*; do
  [[ $file -nt $latest ]] && latest="$file"
done

echo "Latest: $latest"

来源:http://mywiki.wooledge.org/BashFAQ/003

答案 2 :(得分:0)

我错过了路径中的/ *现在工作正常。 感谢你所有的帮助,特别是amdixson !!

#!/bin/bash

last_file=$(ls -tr ../test/test_files/* | tail -1);
grep -r "data" --exclude=test1.txt "$last_file" 1>/dev/null;

if [[ $? -eq 0 ]]; then
  printf "found..\n";
  ping google.com > googlestack.txt
else
 printf "not found..\n";
fi

答案 3 :(得分:0)

我认为" xargs"也是如下的好方法: 我创建了一个包含3个文件的目录" test" 测试 ├──t1 ├──t2 └──t3 执行以下命令来删除所有文件

find test/t* -print|xargs rm -rf

现在所有文件都已删除。