Я создал сценарий оболочки для выполнения трех простых задач (заархивировать каталог, переименовать окончательный файл и удалить исходный каталог). Источник скрипта ниже:
#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
src= $2"/*";
dest= $1".zip";
# Just for test
echo $src;
# Commented for now
#zip -r -j $dest $src
#mv $dest $1
#rm -rf $2
else
echo "Invalid arguments";
fi
Когда я запускаю приведенный выше сценарий с этими параметрами, у меня возникает ошибка:
./scriptzip.sh /data/file-new /data/file-old
./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory
Как можно запретить оболочке проверять переменную на предмет строки, подобной «директории»? Есть ли способ пропустить это?
Пространство в оболочке имеет большое значение, так как это то, что разделяет токены в таких командах, как echo foo bar
или хуже rm -rf /some/where /
. Следовательно, присвоение не должно включать пробелы вокруг =
:
foo=/etc/*
echo $foo
Переменные также могут нуждаться в цитировании, в зависимости от того, что именно вы хотите сделать для расширения здесь глобуса, а также для разделения слов (неправильное разделение слов на rm
может привести к неожиданной (и веселой) очистке файловой системы).
echo "$foo"