我正在创建将首先满足两个条件的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:算术语法错误
请帮助我解决这个问题。
答案 0 :(得分:0)
((...))
应该包含三个算术表达式。 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
答案 1 :(得分:0)
您无法在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)
您正在混淆两个looping constructs。您可以使用任何一个,但不能同时使用。
for name [ [in [words …] ] ; ] do commands; done
和
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done