/ / Variabile di impostazione dei problemi in uno script bash - bash

Difficoltà impostando la variabile in uno script bash - bash

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 № 1

Questa 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.