The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"написать shell процедуру"
Отправлено LSTemp, 26-Ноя-11 13:40 
> Написать shell-процедуру, которая:
> • Читает содержимое  двух файлов, передаваемых в качестве первых параметров  
> (в файлах в каждой строке представлено по одному целому числу);
> • Проверяет правильность формата содержимого файлов,  при ошибках выводит соответствующие
> сообщения и завершает работу;
> • Суммирует числа из первого и второго файлов, расположенные в строках с
> одинаковым номером;
> • Сортирует полученные суммы по возрастанию и выводит их на экран
> с shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как
> делать,если не пойму shell в течении месяца к экзамену не допустят((

не ходите девки в армию!

СКРИПТ:

[root@local 222]# cat ./calc2file
#!/bin/bash

if [ ${#*} -ne 2 ]
then
   echo "Usage: $0 file1 file2"
   exit
else
   f1="$1"
   f2="$2"
fi

#f1="1.good"
#f2="2.good"
n1=""
n2=""
r=""
f=""

echo "file '$f1'"
echo "====================="
i=0
while read n
do
  c="${n//[[:digit:]]/}"
  echo -ne "\t$(($i+1)): "
  if [[ "${#c}" -eq 0 && "${#n}" -gt 0 ]]
  then
     echo -e "\t$n"
     n1[i]="$n"
  else
     echo -e "\terror: '$n' is not number"
     n1[i]='-'
     f=1
  fi
  i=$(($i+1))
done < $f1
echo "---------------------"
echo "${#n1[*]}: ${n1[*]}"
echo "====================="

echo

echo "file '$f2'"
echo "====================="
i=0
while read n
do
  c="${n//[[:digit:]]/}"
  echo -ne "\t$(($i+1)): "
  if [[ "${#c}" -eq 0 && "${#n}" -gt 0 ]]
  then
     echo -e "\t$n"
     n2[i]="$n"
  else
     echo -e "\terror: '$n' is not number"
     n2[i]='-'
     f=1
  fi
  i=$(($i+1))
done < $f2
echo "---------------------"
echo "${#n2[*]}: ${n2[*]}"
echo "====================="

echo

echo "'$f1' + '$f2'"
echo "====================="
if [[ -n "${f}" || "${#n1[*]}" -ne "${#n2[*]}" ]]
then
   echo -e "\terror: wrong source data"
else
   n="${#n1[*]}"
   for ((i=0; $i<$n ; i=$(($i+1))))
   do
     s[$i]=$((${n1[$i]}+${n2[$i]}))
     echo "${n1[$i]}+${n2[$i]}=${s[$i]}"
   done
fi
echo "====================="

echo

echo "sort"
echo "====================="
for n in ${s[*]}
do
  echo "$n"
done | /bin/sort
echo "====================="

ТЕСТОВЫЕ ФАЙЛЫ:

[root@local 222]# cat ./1.good
50
40
30
20
10

[root@local 222]# cat ./2.good
1
2
3
4
5

[root@local 222]# cat ./1.bad
10
20
30z

40
  50  1
60
70


[root@local 222]# cat ./2.bad
1
2
3
4z
5


ПРИМЕР РАБОТЫ:

[root@local 222]# ./calc2file
Usage: ./calc2file file1 file2

[root@local 222]# ./calc2file 1.bad 2.bad
file '1.bad'
=====================
        1:      10
        2:      20
        3:      error: '30z' is not number
        4:      error: '' is not number
        5:      error: '' is not number
        6:      error: '' is not number
        7:      40
        8:      error: '50  1' is not number
        9:      60
        10:     70
        11:     error: '' is not number
        12:     error: '' is not number
        13:     error: '' is not number
---------------------
13: 10 20 - - - - 40 - 60 70 - - -
=====================

file '2.bad'
=====================
        1:      1
        2:      2
        3:      3
        4:      error: '4z' is not number
        5:      5
        6:      error: '' is not number
        7:      error: '' is not number
---------------------
7: 1 2 3 - 5 - -
=====================

'1.bad' + '2.bad'
=====================
        error: wrong source data
=====================

sort
=====================
=====================

[root@local 222]# ./calc2file 1.good 2.good  
file '1.good'
=====================
        1:      50
        2:      40
        3:      30
        4:      20
        5:      10
---------------------
5: 50 40 30 20 10
=====================

file '2.good'
=====================
        1:      1
        2:      2
        3:      3
        4:      4
        5:      5
---------------------
5: 1 2 3 4 5
=====================

'1.good' + '2.good'
=====================
50+1=51
40+2=42
30+3=33
20+4=24
10+5=15
=====================

sort
=====================
15
24
33
42
51
=====================

PS
brut force


 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру