LINUX.ORG.RU

Как лучше делать выход из if-then?

 


0

1

Проверяется наличие каталога, если он есть, то нужно выполнить команды после fi, если нет (else) - создать каталог. Как лучше прекратить выполнение if-then в случае наличия каталога? Я не придумал ничего лучше, чем сделать так:

if [ -d "$TRUNK_NAME" ]
then
    :
else
    mkdir $TRUNK_NAME
fi

if [ ! -d "папка" ]; then
  echo "нету папки!!!!"
fi
anonymous
()
Ответ на: комментарий от backbone

Ойбл, а я ! перед скобкой тыкал и удивлялся почему не работает. Ладно, спасибо.

cr0x
() автор топика

mkdir -p «${TRUNK_NAME}»

ABW ★★★★★
()

Тут другой вопрос - нужно ли выходить из if...

Всегда мучает вопрос - что лучше - выполнить тело функции внутри if или после.

Например:

if x!=0 then
    z = y/x
    return z
else
   return $error
endif
или
if x==0 then
   return $error
endif

z = y/x
return z

Suntechnic ★★★★★
()
Ответ на: комментарий от Suntechnic

Если у тебя есть некий блок кода (функция, например), из которого нужно выходить в случае чего (ошибки, например), то тело пиши после if. А если есть возможность обрабатывать исключения - выходи из функции сигнализировав исключение. Ку?

Zorn
()
[ -d "$TRUNK_NAME" ] || mkdir "$TRUNK_NAME"
mkdir -p "$TRUNK_NAME"

А ещё есть true, false и ;

schizoid ★★★
()
Ответ на: комментарий от Zorn

С исключениями очевидно. Но почему тело после if? Вроде как тело внутри if выглядит более логичным - всегда ясно что мы обработали все что нужно в if. С другой стороны я так делаю только если функция в 3-4 строки, а в остальных случаях пишу после if - типа вначале все обработали и «гуляем» спокойно.

Suntechnic ★★★★★
()

Щас придут лисперы и подробно тебе объяснят на десяти страницах.

anonymous
()

а зачем проверять?

mkdir -p $TRUNK_NAME

lazyklimm ★★★★★
()
Ответ на: комментарий от Suntechnic

Конечно же только второй вариант. Он даже чисто визуально менее загроможден, такой код легче читать. Представь ситуацию, тебе надо понять код

if condishion then
/* тут двадцать строк кода */
else
    return $error

К тому моменту как ты дочитаешь до else, врубаясь в алгоритм, ты потеряешь контекст и прийдется отматывать назад, чтоб посмотреть почему кидается ошибка.

Насколько лаконичней и элегантней смотрится

if not condition
     return $error

/* тут код */
return $result
Yur4eg ★★
()
Ответ на: комментарий от Yur4eg

Ну вот поэтому в больших функциях так и делаю. Но хотелось единообразия. Раз такой вариант набрал больше всего голосов - буду использовать его все время.

Suntechnic ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.