代码之家  ›  专栏  ›  技术社区  ›  Abhinav

unixshell脚本中的嵌套for循环

  •  0
  • Abhinav  · 技术社区  · 6 年前

    我创建的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:算术语法错误

    请帮我解决这个问题。

    3 回复  |  直到 6 年前
        1
  •  0
  •   l0b0    6 年前

    不能直接在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
    
        2
  •  0
  •   Ken Jackson    6 年前

    你把两个混在一起了 looping constructs

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

    for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
    
        3
  •  0
  •   choroba    6 年前

    这个 ((...)) 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