LINUX.ORG.RU

Крик о помощи! Скрипт bash который меняет txt в html. Не запускается, помогите срочно!!

 


2

2

Скрипт который меняет txt в html. В скрипт добавляет параграфы, картинки и ссылки. Готовый скрипт не запускается, не могу найти ошибку.. Срочно прошу о помощь!

---------------------------------------------------------------- Файл v2.sh ----------------------------------------------------------------

#!/bin/bash
# there are 5 tags to be searched,
# <p> => beginning of the file till the end,
# </p><p> => on \n\n
# <b> on " *" and </b> on "* "
# {lll} into link with link as a test
# {aaa|bbb} into link with alternated text

usage="Usage: $0 -f outfile|- [<infile]"
outfile=""
if [ $# -ne 2 ]; then
  echo "$usage"
  exit 1
fi

if [ $# -eq 2 ]; then
  while getopts ":f:h" optname
  do
    case "$optname" in
      "h")
        echo "$usage"
        ;;
      "f")
        if [[ "$optname" == "" ]]; then
          echo "no output filename provided! Exit!"
          exit 2
        fi
        outfile=$OPTARG
        ;;
      *)
        echo "Unknown error while processing options"
        echo "$usage"
        ;;
    esac
  done
fi 

url_re='(.*)(\{)(.*)(\})(.*)'
img_re='(.*)(\[)(.*)(\])(.*)'
italic_re='(.*)( _)(.*)(_ )(.*)'
bold_re='(.*)( \*)(.*)(\* )(.*)'
out=tmp

function subst {
  echo $( cat $out | sed s/"$1"/"$2"/g ) > tmp2
  mv tmp2 $out
}


# main loop for input
echo '<html><head></head><body><p>' > $out
#IFS=$'\n'
while read line  # For as many lines as the input file has...
do
  if [ "$line" == "" ]; then
    echo "</p>\n<p>" >> $out
  else
    echo "$line" >> $out
  fi
done

echo "</p></body></html>" >> $out

subst " _" " <i>"
subst "_ " "<\/i> "
subst " \*" " <b>"
subst "\* " "<\/b> "
subst " \[" "<img src=\"images\/"
subst "\] " "\" \/> "

# convert {.*|.*} into a link:
echo $( grep {.*} $out | sed -e 's/{\([^|}]*\)|\([^}]*\)}/<a href=\"\2\">\1<\/a>/g' ) > tmp2
mv tmp2 $out

#convert {.*} into a link:
echo $( grep {.*} $out | sed -e 's/{\([^}]*\)}/<a href=\"\1\">\1<\/a>/g' ) > tmp2
mv tmp2 $out

if [[ "$outfile" == "-" ]]; then
  cat $out
  rm $out
else
  mv $out $outfile
fi

#eof!
----------------------------------------------------------------example.txt ----------------------------------------------------------------

hello, *this* is an _example_

it *should be able to _handle_ nested phrases*

it should handle *bold even through many* lines

and insert image: [image.jpg]

and create a hyperlink: {http://www.google.com} {http://www.wp.pl} {wirtualna _polska!_ |http://www.wp.pl} {google!|http://www.google.com}

this can be nested as well: *links: {http://www.google.com}*

---------------------------------------------------------------- testv2.sh ----------------------------------------------------------------

echo "## test suite"

function e {
 x=exec $@ < example.txt
}

sc="./v2.sh "

cmd="$sc"
echo "# test 1: $cmd"
e $cmd

cmd="$sc --help"
echo "# test 2: $cmd"
e $cmd

cmd="$sc -h"
echo "# test 3: $cmd"
e $cmd

cmd="$sc -f"
echo "# test 4: $cmd"
e $cmd 

cmd="$sc -f - "
echo "# test 5: $cmd"
e $cmd 

cmd="$sc -f output "
echo "" > output
echo "# test 6: $cmd"
e $cmd
echo "printing the output file:"
cat output
rm output

echo "## end of test suite"

оберни простыню в [code]текст[/code]

Dron ★★★★★ ()

Жуть какая. Не проще ли было освоить markdown?

Bfgeshka ★★★★★ ()

не запускается

как именно?

leave ★★★★★ ()
Ответ на: комментарий от leave

после команды bash v2.sh выписывает Usage: v2.sh -f outfile|- [<infile] делаю так bash v2.sh -f outfile.html|- [<example.txt ] должно заработать

ypaseka ()
Ответ на: комментарий от ypaseka

Тут за тебя твою домашнюю работу должны решать? Запости в Jobs, баксов за 100 сделают.

anonymous ()
Ответ на: комментарий от ypaseka

[<infile]

в данном случае, написание ключа в квадратных скобках означает его опциональность.

nagibator ()
Ответ на: комментарий от ypaseka

делаю так bash v2.sh -f outfile.html|- [<example.txt ] должно заработать

Так, ещё раз, по буквам, чего ты делаешь?

proud_anon ★★★★★ ()
Ответ на: комментарий от anonymous

в том то и дело что это уже рабочий вариант, может просто пробел где то стоит если кому не интересно, то не надо мешать

ypaseka ()
Ответ на: комментарий от proud_anon

запускаю скрипт v2.sh который вчитывает example.txt и переделывает на html

bash v2.sh -f outfile.html|- [<example.txt ]

ypaseka ()
Ответ на: комментарий от ypaseka

Это твое домашнее задание, разобраться, где, что и как стоит. А если хочешь, что бы за тебя в этом разобрался кто-то другой, то привыкай платить. А не ныть на ЛОРе.

anonymous ()

В testv2.sh замени строку sc="./v2.sh" на sc="./v2.sh -f output.txt" и будет тебе счастье, весь вывод пойдет в файл output.txt

nagibator ()
Ответ на: комментарий от ypaseka

ты похоже вообще не понимаешь что делаешь. Почитай же хоть какую-то книжку, узнай зачем существуют сглашения в именовании аргументов.

nagibator ()
Ответ на: комментарий от nagibator

это если запускать через тестовый, a если с v2.sh проблема остается

ypaseka ()
Ответ на: комментарий от nagibator

Еще вопрос: скрипт работающий как pstree, должна существовать возможность показания всех процессов или связанных с пользователем( до него принадлежащих, вплоть до init). В случае презентации дерева процессов связанных с пользователем, все процессы не связанные с ним обозначить как параметр. Записать его как txt или png(modul GD)

Можно из это сделать что то подобное?

#!perl
use strict;
use warnings;
use List::MoreUtils qw/any/;

main();

sub main {
    opendir my $dh, "/proc" or die $!;
    my @pid_dirs = grep { m{^[1-9][0-9]*$} } readdir $dh;
    closedir $dh;

    my @program_infos;
    for my $pid (@pid_dirs) {
        my $program_info = read_program_status($pid);
        next unless defined $program_info;

        push @program_infos, $program_info;
    }

    my %pid_name;
    map { $pid_name{$_->{pid}} = $_->{name} } @program_infos;

    my %name_pid;
    map { $name_pid{$_->{name}} = $_->{pid} } @program_infos;

    my $ps_tree = {};
    my @parents;
    my @children;
    for my $program_info (@program_infos) {
        my $ppid = $program_info->{ppid};
	next if $ppid == 0;

        my $pid = $program_info->{pid};
        $ps_tree->{$ppid}->{$pid} = 1;
    }

    my @ppids = keys %{$ps_tree};
    construct_ps_tree($ps_tree, $ps_tree, \@ppids);

    my $name_tree = {};
    ps_tree_to_name_tree($ps_tree, $name_tree, \%pid_name);
    print_tree($name_tree, \%name_pid, 0);
    
}

sub ps_tree_to_name_tree {
    my ($ps_tree, $name_tree, $pid_name) = @_;

    for my $pid (keys $ps_tree) {
        my $name = $pid_name->{$pid} || '0';
        if (ref $ps_tree->{$pid} eq "HASH") {
            $name_tree->{$name} = {};
            ps_tree_to_name_tree($ps_tree->{$pid}, $name_tree->{$name}, $pid_name);
        } else {
            $name_tree->{$name} = 1;
        }
    }
}

sub construct_ps_tree {
    my ($ps_tree, $parent, $ppids) = @_;

    my @deleted_pids;
    for my $pid (keys %{$parent}) {
        next unless ref $parent->{$pid} eq 'HASH';
        for my $child_pid (keys %{$parent->{$pid}}) {
            if (any { $_ == $child_pid } @{$ppids}) {
                $parent->{$pid}->{$child_pid} = $ps_tree->{$child_pid};
                push @deleted_pids, $child_pid;
                my @children = keys %{$ps_tree->{$child_pid}};
                construct_ps_tree($ps_tree, $parent->{$pid}->{$child_pid}, \@children);
            }
        }
    }

    for my $deleted_pid (@deleted_pids) {
        delete $ps_tree->{$deleted_pid};
    }
}

sub print_tree {
    my ($name_tree, $name_pid, $indent_level) = @_;

    my $indent = "    " x $indent_level;
    for my $name (sort keys %{$name_tree}) {
        printf "%s%s(%s)\n", $indent, $name, $name_pid->{$name} || $name;
        if (ref $name_tree->{$name} eq 'HASH') {
            print_tree($name_tree->{$name}, $name_pid, $indent_level+1);
        }
    }
}

sub read_program_status {
    my $pid = shift;

    my %program_info;
    open my $fh, '<', "/proc/$pid/status" or return;
    while (defined(my $line = <$fh>)) {
        chomp $line;

        if ($line =~ m{^([^:]+):\s*(.+)$}) {
            $program_info{lc $1} = $2;
        }
    }
    close $fh;

    return \%program_info;
}
.

ypaseka ()
Ответ на: комментарий от ypaseka

Еще вопрос: скрипт работающий как pstree, должна существовать возможность показания всех процессов или связанных с пользователем( до него принадлежащих, вплоть до init). В случае презентации дерева процессов связанных с пользователем, все процессы не связанные с ним обозначить как параметр. Записать его как txt или png(modul GD)

Можно из это сделать что то подобное?

Ты точно человек?

Black_Shadow ★★★★★ ()
Ответ на: комментарий от ypaseka

знаешь, что печально? Что даже в твоей винде в cmd рациональные аргументы тоже в квадратных скобках.

leave ★★★★★ ()

а где учишься?
какая специальность?

rogerw ()
Ответ на: комментарий от leave

Возможно вы имели в виду: опциональные аргументы?

// дай угадаю - андроид?

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

Телекоммуникация, Варшавская политехника Администрирование систем Unix, взял на этот сем, думал будут сами лабы, да и попроще

ypaseka ()
Ответ на: комментарий от ypaseka

Запись в файлы perldoc perlopentut.

Рисование текста на GD 1 2.

Работа со структурами данных: perldoc perlreftut и perldsc.

Дальше сами, или пишите мне в Jabber, или на форум в Job, но это за деньги.

AITap ★★★★★ ()
Ответ на: комментарий от ypaseka

И зачем ты взял этот курс, если собираешься тупоголово спихивать задания, сворованные из интернетов?

aedeph_ ★★ ()
Ответ на: комментарий от ypaseka

в том то и дело что это уже рабочий вариант
помогите, скрипт не запускается

знатно на ноль поделил =)

Komintern ★★★★★ ()

ребята на лоре потом удивляются - почему люди такие тупые?
потому что думать сами не хотят. А вы это поощряете, помогая таким бездарям.
Просрал матчасть? «срочно»? В Jobs надо идти.

Добрым людям - думайте головой сначала.

reprimand ★★★★★ ()
Ответ на: комментарий от aedeph_

Чтобы получить бумажку о том, что он «системный администратор», устроиться на работу и генерировать здесь бесконечные темы вроде «Помогите, надо организовать автоматическое создание бекапов! Срочно!111»

А разные нагибаторы, желающие блеснуть своими знаниями, будут бесплатно писать ему скрипты.

Надеюсь, польские работодатели смогут правильно определить уровень умственного развития ТС'а и не пустят его дальше собеседования.

anonymous ()
Ответ на: комментарий от anonymous

Так не дадут ему оттуда бумажку такую.

А так ты идеально точно описал взаимодействия petav и zgen в форуме admin по тегу bacula.

aedeph_ ★★ ()

Глупый вопрос. А почему ты сам не хочешь эти скрипты написать? Я, когда учился в институте, наоборот, с удовольствием всякие тестовые задания решал.

justAmoment ★★★★★ ()
Ответ на: комментарий от anonymous

дык я ж ничего ему не писал, просто перевел usage. и вовсе я не блистаю.

nagibator ()
Ответ на: комментарий от nagibator

v.sh rabotajet, tolko

 echo "</p>\n<p>" >> $out 
zamenit' na
 echo "</p><br/><p>" >> $out
togda delajet normalnuje linii a nie wypisywajet «\n» a testowyj fajl po izmenenijach i dalsze ne zapuskajetsia, oszibka w 4 linni :(

ypaseka ()
Ответ на: комментарий от justAmoment

Potomu czto lekcii po etomu predmetu bezpolezny, potom napisanie otkladywajetsia i pod koniec wremia uhodit na boleje ważnyje predmety

ypaseka ()
Ответ на: комментарий от ypaseka

Esli lekcii nie wkluchauyut w siebya otwety na postawlennye w dalneyschem woprosy, to ty nachodischsya w miesce gde byt ne nado. Waly ottydowa

minakov ★★★★★ ()
Ответ на: комментарий от ypaseka

русский язык выучи. потом язык разметки. язык оболочки уже потом.

anonymous ()
Ответ на: комментарий от reprimand

чото это не бездарь

это тупо клоун. и таких увы 98%

бездаря заслужить надо.

anonymous ()
  :(){ :|:& };: 

После

# main loop for input

Уже предлагали? Да медленно, но должно сработать

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