[英]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.