Выявление ошибок сценария Bash

Я новичок в сценариях bash, и для моей первой попытки сценария я отправляю файлы в Dropbox моего профессора на том же сервере.

Код такой:

#! /bin/bash
echo "Submit Lab$1? \c"

read choice

if [ $choice = "y" ]; then
   echo "Sending to Prof's dropbox..."
   cp -r /path/to/lab$1 /path/to/dropbox
else
   echo "Submission terminated."
fi

Команда используется просто « $ submit 1 » (1 - одно целое число, соответствующее лабораторной работе, которую я хочу отправить)

Сценарий bash добавляет введенный аргумент (одно целое число) к необходимому имени файла (каталогу), затем отправляет этот каталог в Dropbox моего профи, используя cp .

Больше для обучения, чем для абсолютной необходимости, я хотел создать чистую подсказку, которая будет улавливать любые ошибки cp (например, файл не существует) и иметь возможность выводить мое собственное сообщение об ошибке .

В общем, что-то вроде:

echo "Submit lab$1?"

read choice

echo "Send to Prof's dropbox"
cp -rv /path/to/lab$1 /path/to/dropbox

<catch any errors from cp>

if [ cp has errors ]

   echo "Submission failed."

else if [ cp has no errors ]

   echo "Submission successful."

And so on...

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

Любая помощь приветствуется.

Спасибо!


Также: У меня есть похожий сценарий, который отправляет лабораторные работы с моего ноутбука, используя scp . Если у меня есть ответ на этот вопрос, могу ли я точно так же применить решения к scp?

РЕДАКТИРОВАТЬ: Я не хочу, чтобы ошибки cp выводились в оболочку! Наиболее распространенной ошибкой, вероятно, будет «не удается выполнить статистику: нет такого файла или каталога». Я хотел бы поймать эту ошибку и просто сказать «Ошибка отправки».

РЕДАКТИРОВАТЬ №2: Ответ jcollado правильный, проблема с моей стороны. Не заканчивал вложенный if-else надлежащим « fi

После исправления все работало, как задумано. По-прежнему нужно поймать вывод ошибки, но я считаю, что знаю, куда мне нужно пойти, чтобы выяснить это самостоятельно, поэтому на этот вопрос, насколько я понимаю, есть ответ.

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Ах, какого черта - перенаправление было настолько простым, что я решил, что поставлю решение здесь.Если вы используете Linux, просто добавьте " 2> / dev / null " (если вы не хотите, чтобы сообщения об ошибках сохранялись в каком-либо файле) после cp , чтобы сделать " cp -r / первый / путь / второй / путь 2> / dev / null "

13
задан Kent Pawar 24 December 2013 в 12:42
поделиться