singlepost

Помогите разобраться с загадочным языком Shell ! << На главную или назад  

Мне досталось задание написать на Shell:
Ввести список студентов с перечнем оценок каждого из низ по некоторой дисциплине. Вывести новый список, содержащий фамилию студента и его средний балл.

Однако на лекциях нам Shell не давали. Давали только Pascal и С.
Есть только методичка, из которой непонятно, как работать со строками, и пример программы:

#Enter input array and find first non-zero item
echo -n "Enter array length: "
read length
non_zero_item=0
i=1
while [ $i -le $length ]
do
echo -n "Enter Arr($[i]): "
read Arr$[i]
if [ $[Arr$[i]] != 0 -a $non_zero_item = 0 ]
then
non_zero_item=$[Arr$[i]]
fi
i=$[i+1]
done

#Print input data
echo "Input Array:"
i=1
while [ $i -le $length ]
do
echo -n " $[Arr$[i]]"
i=$[i+1]
done
echo

#First non-zero item
if [ $non_zero_item = 0 ]
then
echo "Non-zero item not found"
exit
else
echo "First non-zero item = $non_zero_item"
fi

#Processing
i=1
while [ $i -le $length ]
do
if [ $[Arr$[i]] = 0 ]
then
eval Arr$[i]=$non_zero_item
fi
i=$[i+1]
done

#Print output data
echo "Modified Array:"
i=1
while [ $i -le $length ]
do
echo -n " $[Arr$[i]]"
i=$[i+1]
done
echo
Этого для меня недостаточно, чтобы выполнить лабу. Со значительно более сложными заданиями на Си я всегда справляюсь. А тут, вроде бы, простая задача вызывает серьёзные проблемы. Тем более, у меня даже вышеприведённый пример почему-то не хочет работать. Если кому не сложно, помогите, пожалуйста!

48 ответов в теме “Помогите разобраться с загадочным языком Shell !”

  1. 13
    Sergey Bogromov ответил:

    Проблема решена. Всем большое спасибо!

  2. 12
    Александр Соколов ответил:

    может:

    echo "Input kol-vo students"
    read enter
    read n
    i=1
    while [ $i -lt $n ]
    do

    echo -n "Input name students $i="

    read enter
    read name$i
    i=$[i+1]
    done

    i=1

    while [ $i -lt $n ]
    do
    echo "Input kol-vo ocenok for name$i"
    read enter
    read nn
    j=1
    echo "Input ocenki"
    read enter
    while [ $j -lt $nn ]
    do
    read name$ia$j
    j=$[j+1]
    done
    i=$[i+1]
    done

    while [ $i -lt $n ]
    do j=1
    while [ $j -lt $nn ]
    do
    eval \temp=[ $temp + name$ia$j ]
    j=$[j+1]
    done
    eval \temp=[ $temp /$nn ]
    echo $name$i + "-" + $temp
    temp=0
    i=$[i+1]
    done

  3. 11
    Леонид Максимов ответил:

    из интерпретаторов sh проще всего в практическом использовании какой-нибудь bash (в силу его большой популярности на unix-like системах). так что //lmgtfy.com/?q=bash+for+windows

    ЗЫ:
    во-первых, для винды вам потребуется прописать, что .sh-файлы следует открывать с помощью вашего sh-исполнителя (открыть с помощью + всегда использовать эту программу). во-вторых, осмотрите переменную окружения PATHEXT – установка подходящего значения позволит исполнять .sh-файлы без указания расширения.

  4. 10
    Влад Лежнин ответил:

    можно установить uwin-base
    без геморроя

  5. 9
    Жека Кирпичев ответил:

    Вероятнее всего, тебе нужен MinGW/MSYS. Поищи в гугле, как их установить – это вполне реально, хотя и не без геморроя.

  6. 8
    Sergey Bogromov ответил:

    Спасибо за подсказки!
    Проблема ещё в том, что препод скинул нам какой-то свой компилятор Shell для Windows, чтоб мы в нём делали. У меня он почему-то не идёт. Пробовал создавать почти пустые файлы с расширением ".sh"- он их как бы не видит. Значит, не только его пример не работает.
    Что делать-не представляю. Устанавливать Unix, потом штудировать учебник, потерять на это неделю? Это из-за одной маленькой лабы!
    У нас все другие задания (лабы и курсач) идут на Си, какой смысл был в таком задании на Shell- непонятно, тем более нам и Unix не объясняли (впрочем, и Windows тоже). Это, что ли, преподу галочка – типа обучил студентов новому языку?

    ЛЮДИ, КТО SHELL ЗНАЕТ -МОЖЕТ, НАПИШЕТЕ ПРОГРАММКУ?
    "Ввести список студентов с перечнем оценок каждого из них по некоторой дисциплине. Вывести новый список, содержащий фамилию студента и его средний балл."

    Кому-то ведь это раз плюнуть, а мне потребуется прямо подвиг какой-то совершить!
    P.S. Время ещё очень поджимает! Обидно будет, если выгонят из-за такой ерунды!

  7. 7
    Леонид Максимов ответил:

    ностальгия :)

    я на этом языке писал сайтик :)

  8. 6
    Влад Лежнин ответил:

    а какую ошибку пишет?

  9. 5
    Влад Лежнин ответил:

    //cs.ifmo.ru/~ad/Documentation/ABS_Guide_ru.html вот тот же самый на русском
    у нас тоже лабы такие были, всё делал по этому учебнику

  10. 4
    Тоша Мартынов ответил:

    может пригодится: если выражение записать в ((вырадение)), то оно выполнится как на си (например ((i++)) – инкремент)

  11. 3
    Ирина (Avalon) ответил:

    "Однако на лекциях нам Shell не давали" – у нас такое было по системному программированию. Лекций как таковых вообще не было, а лабы на ассемблере требовали… :(

  12. 2
    Серега Губченко ответил:

    преподы ебанулились(это везде так)…дай ему по голове самоучителем по 3DS Max или Photoshop…..

  13. 1
    Жека Кирпичев ответил:

    Пиздееееец… Преподов гнать в шею.

    Вот, почитай лучше учебник
    //tldp.org/LDP/abs/html/

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.