Hjælp til bash script
Jeg har lavet et bash script som konvertere nogle figurer/billeder. Men findes der en måde at:
1) Tjekke at fx filtypen .png, .eps etc eksistere før der forsøges at konvertere.
2) Kun konvertere hvis originalerne har ændret sig siden sidste konvertering (ala make)
Konverteringen udføres i nedenstående loops, hvis i har forslag til andre forbedringer som kom gerne med dem!
#!/bin/bash
# Enter below:
START=/home/bob/Desktop/test/ # Location of .tex files.
INC=pic/ # Location of images and figures.
TEXFILE=test # Name of main .tex file to compile (without extension)
# Based on above config.
DVIFILE=${TEXFILE}.dvi # Name of main .dvi file.
PSFILE=${TEXFILE}.ps # Name of main .ps file.
latex=1 # Convert to eps.
pdflatex=2 # Convert to pdf.
userinput=$@ # If pdflatex or latex should be used.
# latex: PDF + PNG >> PS and FIG >> EPS + PDF
if [ $userinput == $latex ];then
# Convert
cd $INC
for i in *pdf; do j=`echo $i |sed -e 's/.pdf//'`; pdf2ps "$i" ${j}.ps; done;
for i in *png; do j=`echo $i |sed -e 's/.png//'`; convert "$i" ${j}.ps; done;
for i in *fig; do j=`echo $i |sed -e 's/.fig//'`; figtex2pdf -k "$i"; done;
# Compile
cd $START
latex $TEXFILE
dvips $DVIFILE
epstopdf $PSFILE
fi
# pdflatex: EPS + PS >> PDF and FIG >> PDF
if [ $userinput == $pdflatex ];then
# Convert
cd $INC
# Might throw error!
# for i in *ps; do j=`echo $i |sed -e 's/.ps//'`; epstopdf "$i"; done;
for i in *ps; do j=`echo $i |sed -e 's/.ps//'`; ps2pdf "$i"; done;
for i in *fig; do j=`echo $i |sed -e 's/.fig//'`; figtex2pdf "$i"; done;
# Compile
cd $START
pdflatex $TEXFILE
fi
1) Tjekke at fx filtypen .png, .eps etc eksistere før der forsøges at konvertere.
2) Kun konvertere hvis originalerne har ændret sig siden sidste konvertering (ala make)
Konverteringen udføres i nedenstående loops, hvis i har forslag til andre forbedringer som kom gerne med dem!
#!/bin/bash
# Enter below:
START=/home/bob/Desktop/test/ # Location of .tex files.
INC=pic/ # Location of images and figures.
TEXFILE=test # Name of main .tex file to compile (without extension)
# Based on above config.
DVIFILE=${TEXFILE}.dvi # Name of main .dvi file.
PSFILE=${TEXFILE}.ps # Name of main .ps file.
latex=1 # Convert to eps.
pdflatex=2 # Convert to pdf.
userinput=$@ # If pdflatex or latex should be used.
# latex: PDF + PNG >> PS and FIG >> EPS + PDF
if [ $userinput == $latex ];then
# Convert
cd $INC
for i in *pdf; do j=`echo $i |sed -e 's/.pdf//'`; pdf2ps "$i" ${j}.ps; done;
for i in *png; do j=`echo $i |sed -e 's/.png//'`; convert "$i" ${j}.ps; done;
for i in *fig; do j=`echo $i |sed -e 's/.fig//'`; figtex2pdf -k "$i"; done;
# Compile
cd $START
latex $TEXFILE
dvips $DVIFILE
epstopdf $PSFILE
fi
# pdflatex: EPS + PS >> PDF and FIG >> PDF
if [ $userinput == $pdflatex ];then
# Convert
cd $INC
# Might throw error!
# for i in *ps; do j=`echo $i |sed -e 's/.ps//'`; epstopdf "$i"; done;
for i in *ps; do j=`echo $i |sed -e 's/.ps//'`; ps2pdf "$i"; done;
for i in *fig; do j=`echo $i |sed -e 's/.fig//'`; figtex2pdf "$i"; done;
# Compile
cd $START
pdflatex $TEXFILE
fi
Kommentarer3
Re: Hjælp til bash script
file=$1
if [ -e $file ]; then
echo $file eksisterer;
else
echo $file eksisterer ikke;
fi
Hvilken er nyest:
file1=$1
file2=$2
if [ $file1 -nt $file2 ]; then
echo $file1 er nyest;
else
echo $file2 er nyest;
fi
Bemærk iøvrigt at programmet der bliver kørt når du laver en [ EXPRESSION ] er "test", så "man test" er en glimrende kilde til bash script oplysninger.
Re: Hjælp til bash script
pdf=*.pdf
if [ $pdf != '*.pdf' ]; then
echo $pdf #eksisterer;
fi
Men hvis der er flere end een pdf så får jeg en fejl om at der er for mange argumenter. Er der en mere elegant måde at gøre ovenstående på eller findes der en operator som piller den første streng udad $pdf ($pdf[0] dur ikke).
Re: Hjælp til bash script
pdf=(*.pdf)
får du et array hvor du kan validere på
${pdf[0]}