Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Robert1106 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".
#!/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.
-
Co něco takovýho ?
#!/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 :)
-
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.
-
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í :)
-
Tak to projeď třeba grepem a kontroluj jestli něco nalezl :)
Třeba takhle
#!/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