PDA

View Full Version : Bash script: testare l'esistenza di un comando


Gica78R
19-09-2007, 23:21
Ciao bacarospi! :p

La mia mente malata ha appena partorito il primo script leggermente più complicato di un
#!/bin/bash
echo "Ciao mondo"

Lo riporto qui di seguito:
#!/bin/bash

# makehtml.sh
# Author: Gica78R
# This script takes all .c and .h source files in the
# current directory and generates the corresponding
# html files using the webcpp program. Output files
# will be stored in the html subdirectory. An eventually
# existing html subdirectory will be deleted.


DEST=html # destination directory

if [[ $# -gt 0 ]]
then
echo "Non sono consentiti parametri"
exit
fi

if [[ -e "${DEST}" ]]
then if [[ -d "${DEST}" ]]
then
echo "Rimuovo la vecchia directory \"${DEST}\""
rm -Rf "${DEST}"
else
echo "\"${DEST}\" non è una directory. Rimuoverla manualmente e rieseguire lo script!"
exit
fi
else
echo "La directory \"${DEST}\" non esiste, la creo"
fi

mkdir html

for arg in `ls *.c *.h`
do
webcpp "${arg}" "${DEST}/${arg}.html" -l -m
done
exit


In pratica, come ho scritto con il mio fluentissimo inglese nei commenti, lo script prende tutti i file con estensione .c e .h e, con il comando webcpp, genera la corrispondente versione html.
Prima che faccia ciò, però, vorrei inserire il codice per controllare l'esistenza nel sistema, e in particolare nel PATH dell'utente che lancia lo script, del programma webcpp. Esiste un modo rapido per farlo? Se uso la condizione -e in un if credo controlli solo nella directory corrente; usando invece il pathname assoluto la cosa è poco pratica, perché su alcuni sistemi magari il programma è installato in una directory non standard...

Suggerimenti? :D
Grazie! :)

ilsensine
19-09-2007, 23:27
Usa which; ad es.
which webcpp >/dev/null || exit

Gica78R
19-09-2007, 23:29
Usa which; ad es.
which webcpp >/dev/null || exit

:doh:

Grazie mille! :ave:

Gica78R
19-09-2007, 23:41
Quale versione è migliore?

if [[ ! `which webcpp 2>/dev/null` ]]
then
echo "webcpp non trovato. Esco!"
exit
fi

oppure

which webcpp>/dev/null || { echo "webcpp non trovato. Esco!"; exit; }

Scusate il doppio post... :stordita: