我想改进我制作的一个简单脚本。
虽然它对于单个参数运行良好并且可以完成我想要的操作,但我遇到了一些问题,使其对于我的所有参数值并行或同时运行。我想改进它以在多个参数上运行并同时输出我的 grep 结果而不是按顺序,但这不是好的选择吗?任何使此输出工作的帮助将不胜感激。非常感谢。
- 我有多个文件 file1.log file1.txt file2.log file2.txt
- 需要从 *.log 和 *.txt 中 grep 一些内容
- 将所有参数的 grep 行输出到同一个 echo 中。
到目前为止我的脚本看起来像这样:
#!/bin/bash
filename=$@
error=$(grep 'ERROR' ${filename}.l)
phone=$(grep 'phone' ${filename}.e)
invalid=$(grep 'invalid' ${filename}.l)
while true ; do
echo -e " Start of message \n :
$error \n
$invalid \n
$phone \n
End of message \n "
break
done
exit
这就是我希望输出的样子
Start of message
error form file1
Phone number from file1
Invalid from file1
error form file2
Phone number from file2
Invalid from file2
error form file3
Phone number from file3
Invalid from file3
etc
End of message
答案1
$@ 是一个数组而不是字符串,因此您真正想要做的是使用循环来迭代数组。尝试这个:
#!/bin/bash
for filename in "$@"; do
error=$(grep 'ERROR' "${filename}.l")
phone=$(grep 'phone' "${filename}.e")
invalid=$(grep 'invalid' "${filename}.l")
echo -e " Start of message \n :
$error \n
$invalid \n
$phone \n
End of message \n "
done
exit
答案2
echo "Start of message "
for file in "$@"
do
error=$(grep 'ERROR' ${file}.l)
phone=$(grep 'phone' ${filee}.e)
invalid=$(grep 'invalid' ${file}.l)
echo -e "${error} from ${file}\n ${phone} from ${file}\n $invalid from ${file}\n\n"
done
echo -e "End of message \n"