2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Скрипт на bash
Сообщение21.05.2011, 10:11 
Аватара пользователя
Добрый день. Прошу помочь со скриптом. Имеется массив файлов file-1, file-2, ... file-50 в директории dirA. В директории dirB содержится массив поддиректорий с файлами: file-a, file-b, file-c ... file-z. Мне нужно в цикле для каждого file-i (i=1,2...50), и каждого file-X(X=a,b,.. z) отработать перловый скрипт script.pl и сохранить результат в файле с названием file-i_file-X.txt; не знаю синтаксиса чтобы организовать последнее. Вот код:
Код:
#/usr/bin/bash
for FILES in $HOME/Desktop/dirA/*
do
echo $FILESI
if [ -f  $FILESI ]
then
do
   for FOLDERS in $HOME/Desktop/dirB/*
   do
      echo $FOLDERS
      for FILES2 in $FOLDERS/*
      do
              if [ -f  $FILESX ]
              then
         script.pl $FILESI  -p $FILES2 >  {не знаю что здесь}.txt
              fi
      done
   done   
done
fi
done

Благодарю заранее.

 
 
 
 Re: Скрипт на bash
Сообщение21.05.2011, 11:23 
Аватара пользователя
Dan B-Yallay в сообщении #448254 писал(а):
{не знаю что здесь}.txt

Код:
`basename $FILESI`_`basename $FILES2`.txt

(Оффтоп)

Dan B-Yallay в сообщении #448254 писал(а):
for FILES in $HOME/Desktop/dirA/*

FILESI ?

 
 
 
 Re: Скрипт на bash
Сообщение21.05.2011, 16:26 
Аватара пользователя
Спасибо!
Насколько я понимаю, переменные
Код:
$FILES ,  $FILES2
будут включать весь путь к файлу от корня / .
Надо ли с ними заранее что-то делать (укорачивать) или 'basename' сам побеспокоится об этом?

PS
Код:
$FILESI
- неаккуратно набирал на телефоне.

 
 
 
 Re: Скрипт на bash
Сообщение21.05.2011, 17:09 
2Dan B-Yallay
Цитата:
будут включать весь путь к файлу от корня

Да вроде нет. Выполните for f in *; do echo $f; done, будет выдаваться просто список файлов из текущей директории, без полных путей.

 
 
 
 Re: Скрипт на bash
Сообщение21.05.2011, 19:42 
Аватара пользователя
Dan B-Yallay в сообщении #448377 писал(а):
будут включать весь путь к файлу от корня / .

Нет. Включается только путь от текущей директории. basename стирает весь путь, оставляя только имя файла, см. man basename.

 
 
 
 Re: Скрипт на bash
Сообщение22.05.2011, 06:51 
Аватара пользователя
Спасибо Всем за советы/информацию. Запустил этот скрипт:

Код:
#/usr/bin/bash

for MOTIFS in $HOME/Desktop/Devia/*
do
echo $MOTIFS
if [ -f MOTIFS ]   #Проверка, является ли файлом
then
   for FOLDERS in $HOME/Desktop/Devia/*
   do
      if [ -d $FOLDERS ] #Проверка, является ли директорией
      then
      do     ####  line 12
      echo $FOLDERS
         for PEAKS in $FOLDERS/*   
         do
                 if [ -f $PEAKS ] #Проверка, является ли файлом
                 then
            echo $PEAKS
            script.pl $PEAKS  -size 1000 -m $MOTIFS >  $FOLDERS/`basename $PEAKS`_`basename $MOTIFS`.txt
                 fi
         done      
      done
      fi
   done   
fi
done

а он ругается:
Код:
dan@squeeze:~$ MyScripts/Annotating.sh
MyScripts/Annotating.sh: line 12: syntax error near unexpected token `do'
MyScripts/Annotating.sh: line 12: `      do   '
dan@squeeze:~$

Чего он хочет?

 
 
 
 Re: Скрипт на bash
Сообщение22.05.2011, 10:31 
Аватара пользователя
После if не надо do. (У вас же уже стоит then.)
Соответствующий done тоже надо убрать. (У вас уже есть fi, который завершает блок.)

-- 22 май 2011, 11:33 --

(Лично я)

Предпочитаю более компактно писать
Код:
for ...; do
  ...
done

if ...; then
  ...
fi

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group