繁体   English   中英

在Unix Shell脚本中嵌套for循环

[英]Nested for loop in unix shell script

我正在创建将首先满足两个条件的shell脚本,它将获取所有文件名,并在html字段中一个接一个地插入其他for循环将获取计数,并将其用于序列号的自动递增。

我写了这样的代码

cnt=`find /optware/oracle/logs/20190311_JAVA/TEMP/  -type f | wc -l`
    for ((i in `ls -l /optware/oracle/logs/20190311_JAVA/TEMP/|grep -v ^$|awk '{print $9}` && a=1; a <= $cnt ; a++)) 
    do
    echo "  <tr> $a <td></td><td>$i</td></tr>" >>Temp.lst
    done

我收到错误,因为&& a = 1:算术语法错误

请帮我解决这个问题。

((...))应该包含三个算术表达式。 in不是算术运算符。 实际上,目前尚不清楚您要实现什么目标。

窝两个循环,指定每个都拥有自己for

for i in `ls -l /optware/oracle/logs/20190311_JAVA/TEMP/|grep -v ^$|awk '{print $9}` ; do
    for (( a = 1 ; a <= cnt ; a++ )) ; do
        echo "$i:$a"
    done
done

如果只需要一个计数器,则不需要第二个循环:

a=1;
for i in `ls -l /optware/oracle/logs/20190311_JAVA/TEMP/|grep -v ^$|awk '{print $9}` ; do
    echo "$i:$a"
    (( ++a ))
done

您不能直接在Bash中循环使用“索引+值”对。 我将编写以下代码:

index=0
for path in /optware/oracle/logs/20190311_JAVA/TEMP/*
do
    echo "  <tr>${index}<td></td><td>${path}</td></tr>" >> Temp.lst
    ((++index))
done

您正在混淆两个循环结构 您可以使用任何一个,但不能同时使用。

for name [ [in [words …] ] ; ] do commands; done

for (( expr1 ; expr2 ; expr3 )) ; do commands ; done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM