логика программирования unix для проверки директории - PullRequest
0 голосов
/ 31 марта 2011

Сценарий для новичка здесь. Просто хотел получить какой-то вклад в мой сценарий оболочки. Я в основном хочу запустить Perl-скрипт из сценария оболочки, если существует определенный каталог.

Моя логика звучит? Мои чеки в порядке?

if [ $# != 2 ]; then
    echo "USAGE: ./mytest.sh <host> <name>" 2>&1
    echo "       ./mytest.sh foo101.test.in foo" 2>&1 
    exit 1
fi

#Directories
DIRDATE=`date '+%Y%m%d'`
BASE=/dumps
STGDIR=$BASE/temp/$DIRDATE

#Check if directory exists
if [ -d "$STGDIR" ] then
        echo "$STGDIR directory exists!"
        perl foobar.pl -n $1 -d $STGDIR/ -s $2
else
        echo "$STGDIR directory not found! Create the directory"
        mkdir $STGDIR || { echo 'mkdir command failed' ; exit 1;}
        if [ -d "STGDIR" ] then
                echo "$STGDIR directory exists!"
                perl foobar.pl -n $1 -d $STGDIR/ -s $2
fi

Ответы [ 3 ]

1 голос
/ 31 марта 2011

Нет проблем, но все это можно упростить так:

if [ $# != 2 ]; then
    echo "USAGE: $0 <host> <name>" 2>&1
    echo "       $0 foo101.test.in foo" 2>&1 
    exit 1
fi

#Directories
DIRDATE=$(date '+%Y%m%d')
BASE=/dumps
STGDIR=$BASE/temp/$DIRDATE

# create directory $STGDIR if needed
[ ! -d "$STGDIR" ] && ( mkdir "$STGDIR" || { echo 'mkdir command failed'; exit 1; } )

# execute your perl script
perl foobar.pl -n $1 -d $STGDIR/ -s $2
1 голос
/ 31 марта 2011
  • хорошее отступление
  • правильные имена переменных
  • правильная проверка ввода
    (вы можете проверить правильность ввода $ 1 и $ 2 перед запуском скрипта, который может взорватьвверх, если у вас неправильные значения)
  • хорошо, чтобы обернуть переменные в dbl-кавычки "$ DIR"

  • не рекомендуется использовать замену команды back-tic.Используйте $ (cmd)

  • сообщение должно быть «Попытка создать каталог ...» или simliar (но очень незначительная проблема)
  • в первом блоке if, если вы не можете создатьdir, затем выйдите из
  • Намерение, почему есть вызов Perl в 2 местах.переместите его за пределы блока if / then / else, чтобы он выполнялся только в том случае, если вы не вышли с ошибкой выше.Это дублирующий код, и если ваш сценарий становится намного больше, вы можете изменить одну копию этой строки, а не другую.
  • за куруми, пропуская fi

Надеюсь, это поможет.

0 голосов
/ 31 марта 2011

Не очень важно, но вы можете изменить обратные пометки на $(), если ваша оболочка поддерживает это. Вы исключили закрытие fi во внутренней if конструкции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...