Я новичок в сценариях Bash, пытаясь сделать первый сценарий резервного копирования. Когда я запускаю его я всегда получаю что-то вроде этого:Bash-скрипт не распознает логическую логику, «команда не найдена»
./backupscript.sh: line 9: [3=1: command not found
./backupscript.sh: line 9: 3=2]: command not found
./backupscript.sh: line 15: [3=1: command not found
./backupscript.sh: line 15: 3=3]: command not found
Я пробовал много другой синтаксис, как ["var"="1"]||["var"=2]
, двойные квадратные скобки, без кавычек() -brackets одинарной и двойной, и я схожу с ума. Кажется, что bash вообще не признает, что это оператор if. Что не так? Благодаря!
#!/bin/bash
cd/
NOW=$(date +"%m_%d_%Y")
echo "Please input: 1=full 2=system 3=home"
read choice
if ["$choice"="1" || "$choice"="2"]; then
echo "--- STARTING SYSTEMBACKUP ---"
tar -cvpzf systembackup_$NOW.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/systembackup.tar.gz --exclude=/mnt --exclude=/sys --exclude=/dev --exclude=/run --exclude=/media --exclude=/home/
echo "--- SYSTEM BACKUP DONE ---"
fi
if ["$choice"="1" || "$choice"="3"]; then
echo "--- STARTING HOMEBACKUP (excluding ~/Seafile) ---"
tar -cvpzf homebackup_$NOW.tar.gz --exclude=/home/matias/Seafile /home
echo "--- HOMEBACKUP DONE ---"
fi
EDIT: Правильный синтаксис, предложенный здесь, сделал трюк, спасибо всем! Я по-прежнему ищу хорошие гид на Bash :)
добавить пробелы вокруг '[': 'if [" $ choice "==" 1 "...' и так далее. – fedorqui
Наряду с исправлением операторов if вы должны быть осторожны с 'cd /', поскольку это может привести к действиям, происходящим в неправильном каталоге. – Zlemini
Попробуйте http://shellcheck.net/ перед тем, как обратиться за помощью. – tripleee