我想知道如何执行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。
答案 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"
答案 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
现在所有文件都已删除。