LINUX.ORG.RU

Bash скрипт

 ,


0

1

Пожалуйста посмотрите почему 11 строка не отрабатывается, какие ошибки я допустила (это строчка как бы просто игнорируется)

1  #!/bin/bash -x
2  folder=/home/lily/My/log
3  cd $folder
4  read dm3</home/lily/My/dm3.txt
5  read d3</home/lily/My/d3.txt
6  EXT=log
7  for aa in `find -maxdepth 1 -name "*.${EXT}" | sed "s,^.\/\(.*\)\.${EXT}\$,\1,"`; do
8  if [ $aa -le $d3 ]; then
9  tar cvr - "$aa".log>"$aa".tar
10 if [ $aa -le $dm3 ]; then
11 tar uf - "$aa".log>/home/lily/My/copy_log/Copy.tar
12 fi
13 fi
14 done

Такие штуки вылавливаются логированием.
Между 7 и 8 вставь такое:

echo "DEBUG: aa='$aa', d3='$d3', dm3='$dm3'"


Да, и в чём была задумка строк с tar, если они каждый раз перетирают предыдущие данные?

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)

И вообще код грустный. Для лабораторной работы сойдет, а если так на практике писать, можно словить много неочевидных багов. Даже сейчас скрипт неправильно отработает если find найдет файл с пробелом в имени или пути.

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)

tar uf - «$aa».log>/home/lily/My/copy_log/Copy.tar

$ man tar
-u, --update
              Append files which are newer than the corresponding copy in the archive.


А какой файл ты хочешь чтобы оно обновило если у тебя результат в stdio перенаправляется? Оно и не должно работать.

tar uf "/home/lily/My/copy_log/Copy.tar" "$aa".log


И вообще странный код: ты ищешь .log файл, потом выделяешь директорию, дописываешь к ней расширение .log и архивируешь (затирая предыдущий результат). А что должно произойти если «каталог.log» не существует? А ведь такое 100% случится согласно алгоритму.

В общем думай.

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 5)
Ответ на: комментарий от Kroz

Это кусок скрипта. Описывать что к чему долго, да и вам наверное не очень интересно. Спасибо, вы мне помогли, я поняла свою ошибку.

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