簡體   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