如何在shell脚本中处理来自for循环的值

时间:2015-09-02 12:23:06

标签: shell

我在shell脚本中有以下for循环

test1
test2
test3

我得到的输出如下。

grep test12345 /home/ptc/storage/**'ABCD'**/apache/$curr_year/logs/access.log* | grep GET > /tmp/test.access.txt

我想将test2从上面的结果处理到下面的脚本代替' ABCD'

<tbody>
<?php

mysql_data_seek($result, 0);
while ($row = mysql_fetch_assoc($result)) {
    ?>
    <tr>
        <?php         
        foreach($row as $key => $value){
            echo "<td>";
            echo $value;
            echo "</td>";
        }
        ?>
        <td><a href="/DeletePerson.php?id=<?php echo $result['Person ID']; ?>" class="btn btn-danger">Delete</a></td>
    </tr>
    <?php } ?>
</tbody>

我尝试了所有选项,但由于我不熟悉shell脚本,因此无法成功。

1 个答案:

答案 0 :(得分:0)

忽略其他地方的许多错误并专注于你想要改变的一段代码:

for i in "${arr[@]}"; do 
  val=$(echo "$i" | head -n1 | cut -d "." -f1)
  grep test12345 /dev/null "/home/ptc/storage/$val/apache/$curr_year/logs/access.log"* \
    | grep GET
done > /tmp/test.access.txt

注意:

  • 始终引用您的扩展。 "$i""/path/with/$val/"*等(*
  • for i in $prop_value会有完全相同的(错误)行为;使用arr无需购买任何东西。如果您希望使用arr来提高正确性,请正确填充:read -r -a arr <<<"$prop_value"
  • 重定向移出循环 - 这样循环的第二次迭代不会覆盖第一次重写的文件。
  • 传递给/dev/null的额外grep可确保无论匹配数量多少,其行为都是一致的;否则,仅当存在多个匹配的日志文件时才会显示文件名,否则不显示。