У вас есть такие строки:
`/usr/bin/rsync -av /var/games/minecraft $BKDIR/games/minecraft --exclude 'plugins/dynmap/web'`
Обратные кавычки означают выполнение вывода команды между ними. Таким образом, команда rsync
запускается, создает некоторый вывод, и оболочка пытается выполнить этот вывод . Просто уберите обратные галочки и все будет в порядке:
/usr/bin/rsync -av /var/games/minecraft $BKDIR/games/minecraft --exclude 'plugins/dynmap/web'
$$
— это специальная переменная, которая расширяется до идентификатора процесса оболочки, в данном случае в командной строке еще до запуска вашего скрипта. Попробуйте что-то вроде echo $$
. Вам нужно будет экранировать знаки доллара с помощью обратной косой черты или поместить их в одинарные кавычки, чтобы они не расширялись, т.е. echo '$$$$'
.
Двойные кавычки не помогают, они просто предотвращают разбиение расширенного значения на слова, как в случае с обычными переменными($foo
и"$foo"
).
Кроме того, в вашем цикле вы shift
только один раз, даже в тех случаях, когда вы также используете второй аргумент. Это означает, что аргументы ваших опций также обрабатываются как сами опции :
$./test.sh --one --two --three --four --five xyz
--two
--three
--four
--five
xyz
Если вы этого не хотите, вам потребуется shift
дополнительное время после использования$2
:
while [[ "$#" != 0 ]] ; do
case "$1" in
--one)
varone="$2"
shift
;;
--two)
vartwo="$2"
shift
;;
#...
esac
shift
done