Sto riscontrando problemi con uno script bash molto semplice (test.sh):
if [ $# >=1 ]
then
backup_file=$1
else
backup_file=~/standard.tar.bz2
fi
echo $backup_file
Se passo un argomento:
test.sh myfile
Ottengo l'output atteso: myfile
Altrimenti, non ottengo alcun output. Mi aspetto di vedere (quando test.sh viene eseguito senza argomenti): ~/standard.tar.bz2
Che cosa sto facendo di sbagliato?
risposte:
4 per risposta № 1Questa valutazione delle condizioni è il problema:
[ $# >=1 ]
Cambia questo a:
[ $# -ge 1 ]
O altrimenti in BASH:
[[ $# -ge 1 ]]
O:
(( $# ))
[...]
e[[...]]
non permettere>=
come operatore- Hai bisogno di uno spazio dopo gli operatori.
3 per risposta № 2
Se stai utilizzando operatori matematici, utilizzalo nel contesto corretto. Invece di dire:
if [ $# >=1 ]
dire
if (( $# >=1 ))
(E non devi preoccuparti degli spazi attorno agli operatori o della loro mancanza.)
3 per risposta № 3
Altri hanno affrontato il problema sintattico immediato, ma un modo completamente diverso di scrivere questo sarebbe quello di trarne vantaggio espansione dei parametri per utilizzare un valore predefinito:
backup_file="${1:-$HOME/standard.tar.bz2}"
Ciò sostituirà backup_file con il valore in $1
se e solo se esiste.