Назад | Перейти на главную страницу

Сценарий оболочки

Пожалуйста, просветите меня. Что означает следующий фрагмент сценария оболочки?

FNAME=Grapes.txt

touch Apple.txt
   ls Banana.txt | while read FNAME
   do
    /somePath/ftp_autojobs.sh someFolder/LG $FNAME Apple.txt
   done

РЕДАКТИРОВАТЬ: ftp_autojobs.sh передает файлы на сервер.

Содержимое ftp_autojobs.sh:

SO=`tput smso`
SE=`tput rmso`
RETURN="$SO RETURN $SE"

TEMP_FN=`mktemp -c -d . -p ftp`
TEMP_LOG=`mktemp -c -d . -p log`

echo open some.server.com>>$TEMP_FN
echo user user pass>>$TEMP_FN
echo cd \"$1\">>$TEMP_FN
echo binary>>$TEMP_FN

shift
until [ $# -eq 0 ]
do
   echo mput \"$1\">>$TEMP_FN
   shift
done

echo bye>>$TEMP_FN

ftp -vin < $TEMP_FN > $TEMP_LOG

FILE_COUNT=`grep "226 Transfer complete" $TEMP_LOG|eval wc -l|cut -d ' ' -f 1`

if [ $FILE_COUNT -eq 0 ]
then
   rm -f ftp_commands.txt 2>/dev/null
   rm -f ftp.log 2>/dev/null
   mv $TEMP_FN ftp_commands.txt
   mv $TEMP_LOG ftp.log
   cat ftp.log
   banner "WARNING" "FTP FAILED"
else
   rm -f $TEMP_FN
   rm -f $TEMP_LOG
   echo $FILE_COUNT Files sucessfully transferred.
fi

Большое спасибо.

  • Он обновляет метку времени в Apple.txt (или создает ее, если она не существует)
  • Если Banana.txt существует и является файлом, цикл while будет запущен один раз с Banana.txt вместо $ FNAME.
  • Если Banana.txt существует и является каталогом, для каждого элемента в Banana.txt / оператор ftp_autojobs.sh будет запускаться с именем файла элементов вместо $ FNAME.

В простом формате ....

УСТАНОВИТЬ FNAME в Grapes.txt

создает Apple.txt

затем делает ftp_autojobs.sh someFolder / LG Grapes.txt Apple.txt

Готово

Не более того ....

Мое слепое предположение - это резервное копирование некоторых файлов на FTP-сервер. Есть некоторые «волшебные» вещи, которые мы не можем знать об этом сценарии. Похоже, что файл "Apples.txt" это какой-то лог.

Самая большая загадка - это содержание и параметры ftp_autojob.sh сценарий. Может быть, вы могли бы добавить некоторую информацию к своему вопросу.

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

 while read FNAME
 do
    /somePath/ftp_autojobs.sh someFolder/LG "$FNAME" Apple.txt
 done < Banana.txt