Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / ошибка в скрипте / 9 сообщений из 9, страница 1 из 1
23.03.2010, 01:14
    #36535869
24spam@tut.by
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
Здравствуйте.
Написал простенький скрипт, но никак не могу его запустить. Задача стояла сравнить все файлы директории с каким-то файлом, находящимся внутри этой директрории (например, это будет 1.exe). Вроде всё просто, но ошибка (как я понял) в синтаксисе не позволяет запустить скрипт. Проверил, - вроде синтаксис правильный. Интерпретатор ругается на строку проверки условия. Подскажите как исправить?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#!/bin/bash

for file_for_check in 'ls -1'
do
      if [ cmp --silent file_for_check 1.exe ]; then 
          file_for_check > equal_files_list.txt
          echo file_for_check
      fi
done

...
Рейтинг: 0 / 0
23.03.2010, 09:06
    #36536042
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
24spam@tut.by,

ls - l не то же самое, что ls - 1
...
Рейтинг: 0 / 0
23.03.2010, 10:35
    #36536207
Мутаген
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
[ ] - тут лишние.
вместо ls -1 можно просто написать *
ну и это должно выглдяеть так, скорее всего:
Код: plaintext
1.
 echo $ file_for_check > equal_files_list.txt
echo  $ file_for_check
...
Рейтинг: 0 / 0
23.03.2010, 22:31
    #36538275
24spam@tut.by
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
Спасибо за попытки помочь. Но к сожалению, скрипт по-прежнему не работает. Кстати, в первоначальной версии у меня стояло именно ls -1, а не ls -l.
2 Мутаген

После ваших исправлений интерпретатор больше не ругается, но выходной файл не создаётся и на экран ничего не выводится. Как исправить?
...
Рейтинг: 0 / 0
24.03.2010, 01:24
    #36538414
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
Создадим контрольный пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
for i in 10 20 30 40 50; do
  for n in `seq 1 $i`; do echo $i >> a$i.exe; done
done

for n in `seq 1 28`; do echo 30 >> fail.dll; done
echo FA-IL >> fail.dll;

cp a30.exe wow1.exe
cp a30.exe wow2.bin
ls -la
итого 40
drwxr-xr-x  2 bs bs 4096 2010-03-24 00:35 .
drwxr-xr-x 12 bs bs 4096 2010-03-24 00:20 ..
-rw-r--r--  1 bs bs   30 2010-03-24 00:35 a10.exe
-rw-r--r--  1 bs bs   60 2010-03-24 00:35 a20.exe
-rw-r--r--  1 bs bs   90 2010-03-24 00:35 a30.exe
-rw-r--r--  1 bs bs  120 2010-03-24 00:35 a40.exe
-rw-r--r--  1 bs bs  150 2010-03-24 00:35 a50.exe
-rw-r--r--  1 bs bs   90 2010-03-24 00:35 fail.dll
-rw-r--r--  1 bs bs   90 2010-03-24 00:35 wow1.exe
-rw-r--r--  1 bs bs   90 2010-03-24 00:35 wow2.bin

Вот скрипт test.sh

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#!/bin/bash

FN=a30.exe
FSIZE=`ls -la $FN | cut -d ' ' -f  5 `
REPORT=report.log

if [ -f $REPORT ]; then
    rm -f $REPORT
fi

for file in `find . -maxdepth  1  -size ${FSIZE}c -type f -print | xargs`; do
    if [ "$file" != "./$FN" ]; then
	if cmp --silent $FN $file; then
	    echo $file >> report.log;
	    echo $file;
	fi
    fi
done

а вот и результат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
bs@Orion:~/prj/a$ ./test.sh 
./a30.exe
./wow1.exe
./wow2.bin
bs@Orion:~/prj/a$ cat report.log 
./a30.exe
./wow1.exe
./wow2.bin
bs@Orion:~/prj/a$ 

--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
24.03.2010, 01:26
    #36538415
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
Вернее результат такой
Код: plaintext
1.
2.
3.
4.
5.
6.
bs@Orion:~/prj/a$ ./test.sh 
./wow1.exe
./wow2.bin
bs@Orion:~/prj/a$ cat report.log 
./wow1.exe
./wow2.bin
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
30.03.2010, 00:58
    #36549476
24spam@tut.by
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
Спасибо всем за помощь. Задача немного модифицировалась.

Поэкспериментировав с более лёгкими версиями скриптов я решил создать скрипт, который будет сравнивать файлы по содержанию в двух каталогах. Сами каталоги будут передаваться скрипту в качестве параметров. Если (по содержанию!!!) файлы в каталогах будут равны, то имена этих файлов надо записать в выходной файл.

Вот текущая версия скрипта. Он выводит в файл else-ветвь.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
#!/bin/bash

dir1=$ 1 
dir2=$ 2 

i= 0 
truncate -s  0  equal_files.txt

files1=`ls $ 1 `
files2=`ls $ 2 `

for file1 in `ls $ 1 `
do
    
    if [ -f $(file1) ]
    then

         for file2 in `ls $ 2 `
         do

           if [ -f $(file2) ]         
           then
                  
              i=$((i+ 1 ))

              #if [ cmp $file1 $file2 ]
                
              are_equal=`diff $file1 $file2`
              #echo $are_equal
                 
              if [ $are_equal -eq  0  ] 
              then
                 echo $i $file1  $file2 "are equal"
                 echo $i $file1  $file2 "are equal" >> equal_files.txt
              else
                 echo $i $file1  $file2 "are not equal"
                 echo $i $file1  $file2 "are not equal" >> equal_files.txt
              fi
              
           
           fi


         done
    fi
    

done

Проблема в блоке проверки условия на тождественность файлов. Я уже все варианты пробовал - и с cmp и с diff. Не могу сделать корректно проверку на равенство файлов. При любых двух файлах условие получается ложным. Просьба не пинать ногами. Помогите, пожалуйста, исправить ...
...
Рейтинг: 0 / 0
30.03.2010, 01:56
    #36549525
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
Пипец!

Дружище, задача diff - найти различия между двумя почти равными файлами.
И показать эти различия. Сравнивать файлы байт за байтом - задача cmp.

Далее вы пишите
Код: plaintext
1.
2.
3.
4.
for file1 in `ls $ 1 `
do
   ... [skip] ...
done

Вы хотя бы потрудились посмотреть ЧТО это даст вам в file1?
Видимо нет. Раз продолжаете упорствовать в играх с ls.
Возьмите пример который вам предоставили, наверните на него сверху
еще один цикл, и получите то что хотели.

--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
30.03.2010, 02:05
    #36549531
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в скрипте
ЗЫ Боджи мой, спаси нас от графоманов!
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / ошибка в скрипте / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]