/ / Trouble setting variable w skrypcie bash - bash

Problem z ustawianiem zmiennej w skrypcie bash - bash

Mam problem z bardzo prostym skryptem bash (test.sh):

if [ $# >=1 ]
then
backup_file=$1
else
backup_file=~/standard.tar.bz2
fi

echo $backup_file

Jeśli podam argument:

test.sh myfile

Otrzymuję oczekiwany wynik: myfile

W przeciwnym razie nie otrzymuję żadnych danych wyjściowych. Spodziewam się zobaczyć (gdy test.sh zostanie wykonany bez argumentów): ~/standard.tar.bz2

Co ja robię źle?

Odpowiedzi:

4 dla odpowiedzi № 1

Ta ocena stanu jest problemem:

[ $# >=1 ]

Zmień to na:

[ $# -ge 1 ]

LUB w BASH:

[[ $# -ge 1 ]]

LUB:

(( $# ))
  • [...] i [[...]] nie pozwól >= jako operator
  • Potrzebujesz miejsca po operatorach.

3 dla odpowiedzi № 2

Jeśli używasz operatorów matematycznych, używaj ich w odpowiednim kontekście. Zamiast mówić:

if [ $# >=1 ]

mówić

if (( $# >=1 ))

(I nie musisz się martwić o przestrzenie wokół operatorów lub ich brak).


3 dla odpowiedzi nr 3

Inni zajęli się bezpośrednim problemem składniowym, ale zupełnie innym sposobem napisania tego byłoby skorzystanie rozszerzenie parametru, aby użyć wartości domyślnej:

backup_file="${1:-$HOME/standard.tar.bz2}"

Spowoduje to zastąpienie pliku backup_file wartością w $1 jeśli i tylko wtedy, gdy istnieje.