powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / ошибка в скрипте
9 сообщений из 9, страница 1 из 1
ошибка в скрипте
    #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
ошибка в скрипте
    #36536042
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24spam@tut.by,

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

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


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