2015-11-19 4 views
0

Я пытаюсь создать скрипт, который принимает два аргумента, исходную папку и целевую папку. Я пытаюсь показать сообщение об ошибке, если исходный каталог не найден и не выйдет из программы. Если целевой каталог не найден, я бы хотел, чтобы он создал этот каталог. Затем я хотел бы скопировать все содержимое из исходного каталога в целевой каталог.борется со сценарием оболочки в linux

Когда я запускаю программу с двумя переданными аргументами, например./Мнт/sdb1 и -root/мои-документы/photoarch, я получаю ошибку:

ф: не может стат «/ шоссе/adb1 /»: Нет такого файла или каталога

Я хотел бы, чтобы показать мою ошибку, которую я закодировал, и создать папку, если она еще не создана, но она не делает этого.

Благодаря

#!/bin/sh 
clear 
#checking that arguments exist 
if [ $# -eq 0 ]; then 
    echo "Usage: phar image_path archive_path" 
elif [ -d $1 ]; then 
    echo "Source directory not found" 
    exit 
elif [ -d $2 ]; then 
    mkdir ~root/my-documents/$2 
else 
    cp -r $1 $2 
fi 

ответ

2

Вы отсутствуют отрицания:

elif [ ! -d $1 ]; then 
... 
elif [ ! -d $2 ]; then 

В качестве рекомендации лучшей практики, я предлагаю вам заключить все вхождения $1 и $2 в двойных кавычках. В противном случае могут возникнуть проблемы с путями, содержащими пробелы. Например:

cp -r "$1" "$2" 
0

В 3 elif статье, вы делаете папку назначения, если она уже не существует, но вы создаете его как подкаталог домашнего каталога root'а, а затем попытаться скопировать несуществующий каталог, который вы только что проверили, не существует (как только вы инвертируете флаги, как отметил @Stefan Majewsky). Если вы собираетесь создавать каталог назначения в качестве подкаталога корневого дома (или где-нибудь еще, если на то пошло), я бы рекомендовал немного изменить структуру вашего кода, чтобы установить такие переменные, как SRCDIR и DSTDIR, чтобы вы могли более легко манипулировать ими, если они должны измениться. С этим вы могли бы прочитать код примерно так:

#!/bin/sh 
clear 
#checking that arguments exist 
if [ $# -eq 0 ]; then 
    echo "Usage: phar image_path archive_path" 
    exit 1 
fi 
SRCDIR="$1" 
DSTDIR="$2" 

if [ ! -d $SRCDIR ]; then 
    echo "Source directory not found" 
    exit 
elif [ ! -d $DSTDIR ]; then 
    DSTDIR="~root/my-documents/$DSTDIR" 
    echo "Creating destination directory $DSTDIR" 
    mkdir $DSTDIR 
fi 

cp -r "$SRCDIR/*" "$DSTDIR" 

Надеюсь, это ответ на ваш вопрос будет адекватным.

Смежные вопросы