1 (24.01.2011 20:46:07 отредактировано Gard)

Дело в чём, 1й семестр изучения предмета "операционные системы" подошёл к концу. Получили варианты задач от препода и у группы отвисли челюсти. Если самая последняя лабораторная работа была - решение систем 3х уравнений с 3я неизвестными, то на экзамене нам надо писать то с чем уравнения и рядом не лежали. Пожалуйста помогите, через 4 дня экзамен. Возможна символическая плата...



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


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

2

сколько вы готовы заплатить?

2модераторы - это в раздел "работа" надо перенести.

ладно. сделаем тему:

Типовые задачи по bash с решением ab

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

3

Gard пишет:

Возможна символическая плата...

не отделаетесь. задачи простые, но писать долго.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

4

В общем как:
Наилучший вариант, дать консультацию по этим задачам, чтобы понять и научиться их делать.
Либо задачи с построчным комментированием, рублей 30 за задачу... что скажете?

5

Gard пишет:

Наилучший вариант, дать консультацию по этим задачам, чтобы понять и научиться их делать.
Либо задачи с построчным комментированием, рублей 30 за задачу... что скажете?

скажу, что за 30 рублей в Питере даже бутылки нормального пива не купить (любимый бичами и алкашами ёрш - балтика №9 стоит 33..37р).

Потому ваши задачки я буду решать от нечего делать, ради лулзов.
(лулзы лулзами, а на яд 41001666004238 переводить трицатники не забывайте bx )

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

6

Gard пишет:

Написать процедуру, которая в заданном первым параметром каталоге находит все простые файлы, число ссылок на которые максимально и удаляет их; удаляет все пустые каталоги; выдает на экран сообщения о каждом удаленном файле и каталоге.

какие ссылки? симлинки или хардлинки?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

7

Gard пишет:

2.
написать процедуру, которая вводит 2 символьных строки, в каждой введенной строке ищет подстроку, передаваемую в качестве параметра. Заменяет каждую найденную подстроку на пробел, образует из полученных строк третью строку так, чтобы в ней чередовались слова из первой и второй строк. выводит на экран введенные строки и нову. строку

 Консоль:
$ ./ff.sh
input line 1: first second
input line 2: zzzxyyyxwww
s1 = first second, s2 = zzzxyyyxwww, sub = x
---- s1:
first
second

---- s2:
zzz
yyy
www

first
zzz
second
yyy

www
first zzz second yyy  www

#!/bin/sh

function ff()
{
    read -p"input line 1: " s1
    read -p"input line 2: " s2
    echo "s1 = $s1, s2 = $s2, sub = $1"
    s1=`echo "$s1" | sed "s/$1/ /g"`
    s2=`echo "$s2" | sed "s/$1/ /g"`
    echo "$s1" | sed -r 's/\s*(\<\w+\>)/\1\n/g' >tmp.s1
    echo "---- s1:"
    cat tmp.s1
    echo "$s2" | sed -r 's/\s*(\<\w+\>)/\1\n/g' >tmp.s2
    echo "---- s2:"
    cat tmp.s2
    sed 'R tmp.s2' tmp.s1 | tee tmp.s3
    sed -rn 'H; ${ g; s/\n/ /gp; }' tmp.s3
}

ff "x"
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8 (22.01.2011 15:02:31 отредактировано drBatty)

Gard пишет:

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

 Консоль:
ksu@ksu:~$ ./fx.sh
input '123' 123
equivalent line '123'.
repit 12
second line - '12'
ksu@ksu:~$ ./fx.sh
input '123' 12345
len '12345' == len 'abcde'
54321

#!/bin/sh

function ff()
{
    read -p"input '$1' " s1
    if [ "$s1" = "$1" ]; then
        echo "equivalent line '$s1'."
        read -p"repit " s2
        echo "second line - '$s2'"
    else
        if [ ${#s1} = ${#2} ]; then
            echo "len '$s1' == len '$2'"
            echo $s1 | sed -rn '
                s/.*/\n&\n/
                :l
                s/\n(.)(.*)(.)\n/\3\n\2\n\1/
                t l            
                s/\n//g
                p'
        fi
    fi
}

ff "123" "abcde"

где там мои 60 руб? bx

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9

Спасибо за помощь=) перешлем все вовремя, без обмана Gard пошел на кошелек деньги класть)

10

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

11

Gard пишет:

Написать shell-процедуру, которая вводит символьную строку, проверяет строку на совпадение со строками содержащимися в файле, имя которого пеедается в качестве первого параметра, для всех найденных совпадений заменяет соответствующие строки в файле на строку, переданную в качестве 2-го параметра. выводит на экран старое и новое содержимое файла а также число найденных совпадений.

 Консоль:
$ ./fy.sh
input 'fx.sh'
---------- old file:
#!/bin/sh

function ff()
{
    read -p"input '$1' " s1
    if [ "$s1" = "$1" ]; then
        echo "equivalent line '$s1'."
        read -p"repit " s2
        echo "second line - '$s2'"
    else
        if [ ${#s1} = ${#2} ]; then
            echo "len '$s1' == len '$2'"
            echo $s1 | sed -rn '
                s/.*/\n&\n/
                :l
                s/\n(.)(.*)(.)\n/\3\n\2\n\1/
                t l           
                s/\n//g
                p'
        fi
    fi
}

ff "123" "abcde"
---------- new file:
#!/bin/sh
# sub
function ff()
{
    read -p"input '$1' " s1
    if [ "$s1" = "$1" ]; then
        echo "equivalent line '$s1'."
        read -p"repit " s2
        echo "second line - '$s2'"
    else
        if [ ${#s1} = ${#2} ]; then
            echo "len '$s1' == len '$2'"
            echo $s1 | sed -rn '
                s/.*/\n&\n/
                :l
                s/\n(.)(.*)(.)\n/\3\n\2\n\1/
                t l           
                s/\n//g
                p'
        fi
    fi
}
# sub
ff "123" "abcde"
---------- substitutions count:
2

#!/bin/sh

function ff()
{
    read -p"input '$1' " s1
    echo "---------- old file:"
    cat $1
    echo "---------- new file:"
    sed -r "
    /^$s1$/{
        s//$2/
        H
    }
    $ {
        x
        s/^\n//
        w tmp.x
        x
    }    
    " $1
    echo "---------- substitutions count:"
    sed -n '
    1{
        ${
            /^$/{
                s/.*/no sub/p
                q
            }
        }
    }
    $=' tmp.x
}

ff "fx.sh" "# sub"
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

12

Gard пишет:

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

не... комменты лениво писать. да и времени сейчас уже нет ac работать надо ab
спрашивайте, если что непонятно..

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

13

Gard пишет:

7.
написать shell-процедуру,которая вводит символьную строку,содержащую имя некоторого файла, проверяет наличие файла в домашнем каталоге или в одном из подкаталогов, если файл существует, то выдает на экран его содержимое, если файл не существует то создает его и записывает в него с консоли некоторый текст, устанавливает для файла права доступа передаваемые в качестве параметра

 Консоль:
ksu@ksu:~$ ./fz.sh
input file_name: fz.sh
/home/ksu/fz.sh
#!/bin/sh

function ff()
{
    read -p"input file_name: " file_name
    find $HOME -maxdepth 1 -name "$file_name" | tee tmp.z
    if [ -s tmp.z ]; then
        cat `cat tmp.z`
    else
        echo "input in file '$file_name':"
        cat >$file_name
        chmod -v $1 $file_name
    fi

}

ff "644"
ksu@ksu:~$ ./fz.sh
input file_name: zzzz
input in file 'zzzz':
x
y
z
mode of `zzzz' retained as 0644 (rw-r--r--)

*примечание1:
-maxdepth 1 нужно заменить на нужный уровень вложенности, или вообще убрать, если смотреть весь домашний каталог (у меня это очень долго - файлов много).
*примечание2:
этот файл ищет сам себя и сам себя выводит в первом примере. во втором создаёт файл zzzz

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

14

*примечание3: завершать ввод файла нужно комбинацией CTRL+D, что значит "конец файла" или EOF

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

15

*примечание4:
cat `cat $tmp.z`
интересная строчка; она выводит содержимое файла tmp.z, в который записала имя найденного файла команда find. это имя передаётся первой команде cat, которая и выводит найденный файл. Такое хитрое косвенное обращение.

про остальные команды см:
man команда
help команда
а про if [ ... ]; then
читайте man bash
и man test

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

16

Gard, вы какую почту изучали у себя?
что пишет

 Консоль:
$ ls -l `which mail`

?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

17

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

18

drBatty пишет:

Gard, вы какую почту изучали у себя?
что пишет

 Консоль:
$ ls -l `which mail`

?

не изучали почту...

19

Gard пишет:

с терминала на кошелёк деньги приходят с большой задержкой...

а я никогда не спешу bx

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

20

Gard пишет:

не изучали почту...

ну... будем делать для mailx  ab

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

21

Gard пишет:

Написать shell-процедуру, которая вводит символьную строку; во введённой строке ищет подстроку, передаваемую в качестве первого параметра; вставляет после каждой найденной подстроки символ, передаваемый в качестве второго параметра; удаляет из полученной строки символ, передаваемый в качестве третьего параметра; выводит на экран введённую и новую строку.

 Консоль:
$ ./fy1.sh
input line: --a---aca--c--aa--c-
line: '--a---aca--c--aa--c-', find: a, ins: b, del c
--ba---baba----baba---

#!/bin/sh

function ff()
{
    read -p"input line: " s
    echo "line: '$s', find: $1, ins: $2, del $3"
    echo "$s" | sed "
        s/$1/$2&/g
        s/$3//g
        "
}

ff "a" "b" "c"

тут всё просто, как в условии.
про sed

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

22

выслал первую порцию, если всё пришло - начну кидать дальше

23

Gard пишет:

6.
Написать shell-процедуру, которая вводит символьную строку, содержащую маршрутное имя некоторого файла, проверяет введенное маршрутное имя, если оно начинается с символа "/" на совпадение его первой части с маршрутным именем домашнего каталога пользователя.Если введенное маршрутное имя содержит маршрутное имя домашнего каталога или является относительным, то проверяет существование об ошибке, если файл существует то выводит на экран его содержимое,
Если файл не существует то создает и записывает в него строку передаваемую в качестве параметра.

не понял условия.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

24

Gard пишет:

если всё пришло - начну кидать дальше

всё надо сделать? не... мы так не договаривались. что успею, то сделаю. а оплата за сделанное. уже больше одного решения ab

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

25

Если всё сделаешь это будет восхитительно, а так  у меня нет права заставлять делать всё, что сделаешь - будет оплачено и спасибо за старания. денюшка за  1ю прогу пришла? если да - кину за всё, что уже сделано, и дальше по ходу выполнения - буду высылать)

26

Вообще 6 это вот... но не совсем понятна она =(

#!/bin/sh

filename=$1
paramstr=$2
flag=0

read path

echo $path | grep -v '^\/' >/dev/null &&
{
flag=1
} ||
{
expr $path : "^$HOME" >/dev/null  && flag=1
}

[ "$flag" -eq 1 ] && {
 if [ -f "$filename" ] ;then
  cat $filename | rev
 else
  echo $paramstr | rev > $filename
 fi
} ||
echo "error"

27

drBatty пишет:

Если введенное маршрутное имя содержит маршрутное имя домашнего каталога или является относительным, то проверяет существование об ошибке,

Пропустили кусочек, когда перепечатывали текст с фотографии.
Там вот так:

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

28

Remka, это что за код? что с ним делать? он явно не в моём стиле... откомментировать?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

29

Вдруг ты бы разобрался с условием задачи и написал бы свой?)))

30

Gard пишет:

12.
написать shell-процедуру,которая выводит на экран всех пользователей системы, включенных в заданную первым параметром группу пользователей, для каждого из заданных третьим и последующих параметрами имен пользователей выводит на экран права доступа к заданному вторым параметром файлу.

 Консоль:
ksu@ksu:~$ ./u0.sh
Users in group 'adm':
root
adm
daemon
FILE_NAME: /dev/audio
PERM: 660, OWNER: root, GROUP: audio
USER 'root'
user - owner. perm = 6
USER 'ksu'
user - in group. perm = 6
USER 'adm'
other user. perm = 0

#!/bin/sh

function ff()
{
    echo "Users in group '$1':"
    sed -rn "/^$1:/s/([^:]*:){3}//;T;s/,/\n/gp" /etc/group | tee users.tmp
    FILE_NAME="$2"
    echo "FILE_NAME: $FILE_NAME"
    PERM=`stat --format="%a" "$FILE_NAME" | sed -r 's/.*(...)$/\1/'`
    OWNER=`stat --format="%U" "$FILE_NAME"`
    GROUP=`stat --format="%G" "$FILE_NAME"`
    echo "PERM: $PERM, OWNER: $OWNER, GROUP: $GROUP"
    while [ -n "$3" ]
    do
        USER="$3"
        echo "USER '$USER'"
        if [ "$USER" = "$OWNER" ]; then
            echo "user - owner. perm = ${PERM:0:1}"
        else
            GR=`sed -rn "s/^$GROUP:.*$USER[^:]*$/&/p" /etc/group`
            if [ -n "$GR" ]; then
                echo "user - in group. perm = ${PERM:1:1}"
            else
                echo "other user. perm = ${PERM:2:1}"
            fi
        fi
        shift
    done
}

ff "adm" "/dev/audio" "root" "ksu" "adm"
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)