Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: for cyklus [vyřešeno]  (Přečteno 2007 krát)

Robert1106

  • Návštěvník
  • Příspěvků: 69
for cyklus [vyřešeno]
« kdy: 05 Června 2009, 15:28:10 »
Chcem napísať shell script, ktorý prehľadá rekurzívne všetky pod-adresáre a a do každého súboru .c a .h doplní copyright, pokiaľ tam už nie je.
Skript som ako tak napísal ale mám problém s for cyklusom píše mi to "9: Syntax error: Bad for loop variable".

Kód: [Vybrat]
#!/bin/bash

FILES=`tempfile`
find . -type f -name \*.c > ${FILES}
find . -type f -name \*.h >> ${FILES}

SUBOROV=`cat ${FILES} | wc -l`

for ((i=1; i<${SUBOROV}; i++))
do
  NAZOV_SUBORU=`cat ${FILES} | head -n ${i} | tail -n 1`
  NOVY_SUBOR=`tempfile`
  echo "Copyright" > ${NOVY_SUBOR}
  cat ${NAZOV_SUBORU} >> ${NOVY_SUBOR}
  cat ${NOVY_SUBOR}
  mv ${NOVY_SUBOR} ${NAZOV_SUBORU}
done

Za pomoc ďakujem.
« Poslední změna: 05 Června 2009, 17:15:49 od Premet »

premet

  • Host
Re: for cyklus
« Odpověď #1 kdy: 05 Června 2009, 15:41:36 »
Co něco takovýho ?
Kód: [Vybrat]
#!/bin/bash


find . -type f -name \*.c > /tmp/$$.temp
find . -type f -name \*.h >> /tmp/$$.temp

for i in $(cat /tmp/$$.temp )

do
    echo "Copyright" > novy_soubor
    cat $i >> novy_soubor
    mv novy_soubor $(basename $i)
   
done

rm /tmp/$$.temp
Když odstraníš to $(basename $i) a dáš jen $i tak to udělá přímo v těch adresářích  :)
« Poslední změna: 05 Června 2009, 15:44:26 od Premet »

premet

  • Host
Re: for cyklus
« Odpověď #2 kdy: 05 Června 2009, 15:52:33 »
Navíc tam máš pár chyb, špatně používáš v Bashi proměnné, když je dáš do $() tak Bash vyhodnotí to co je v těch závorkách, takže se proměnné používají bez závorek.

Robert1106

  • Návštěvník
  • Příspěvků: 69
Re: for cyklus
« Odpověď #3 kdy: 05 Června 2009, 16:11:09 »
Dik, tvoj shell script vyzerá lepšie. Ešte by som chcel aby to kontrolovalo či už tam je "Copyright". Dúfam že sa mi to podarí :)

premet

  • Host
Re: for cyklus
« Odpověď #4 kdy: 05 Června 2009, 16:13:41 »
Tak to projeď třeba grepem a kontroluj jestli něco nalezl :)
Třeba takhle
Kód: [Vybrat]
#!/bin/bash


find . -type f -name \*.c > /tmp/$$.temp
find . -type f -name \*.h >> /tmp/$$.temp

for i in $(cat /tmp/$$.temp )

do

    grep "Copyright" $i > /dev/null

    if [ $? -eq 1 ]; then
   
       echo "Copyright" > novy_soubor
       cat $i >> novy_soubor
       mv novy_soubor $i

    fi

done

rm /tmp/$$.temp
« Poslední změna: 05 Června 2009, 16:17:10 od Premet »

 

Provoz zaštiťuje spolek OpenAlt.