LinuxForum.Fans
Тема

Помогите разобраться с заданием

Автор: Student_novi4ok 50 сообщений 8632 просмотров
#206906

Согласен, писать за меня не просил и по сути не прошу писать все, прошу только помочь в том, чего сам никак не пойму. Если расставлю отступы, сможете помочь?

#206907
Student_novi4ok написал:
Если расставлю отступы, сможете помочь?

.. а я бы ещё гранату бросил , .. для пущей надёжности :lol: , ...

#206939

если это поможет, готов кинуть =)

#206942

gramozeka, вот так вот слова доводят до гранатометания. :lol:, ты это,... осторожней.

#206955
newzenon написал:
gramozeka, вот так вот слова доводят до гранатометания. :lol:, ты это,... осторожней.

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

#206956

Student_novi4ok, тут вот что есть - перевод на русский - http://linuxforum.ru/viewtopic.php?id=181
http://www.bash-scripting.ru/abs/chunks/index.html

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

#206958
text

#!/bin/bash
echo
#------------------------------------#
#Переход в нужный каталог#
#-----------------------------------#
 echo "Enter the name of the directory:"; 
 echo
 read NAMECAT;
    F=$(find -type d -name "$NAMECAT")  #поиск каталога по введенному имени, результат заносится в переменную f
 echo
 еcho "Enter a search word:"
 echo
 read STR;
 echo
 echo "Enter the number of files for input"
 read q;
#---------------------------------------#
#Ввод файлов для нахождения#
#---------------------------------------#
    while true; do    #цикл ввода файлов, пока пользователь не введет Y
        for i in q; do
           echo "Enter the file name:";
           echo
           read NAMEFILE;
           D=`find "$F"  -type f -name "$NAMEFILE"`;   #d-переменная, в которую заносится найденный файл
           echo
             if [ ! -e "$D" ]  #если файл не найден, то выводится соответствующее сообщение
             then
                   echo "File $namefile not found!";echo;continue
             fi;
        ARR=$( "${ARR[*]}" "$NAMEFILE" );\
    done
    for index in q; do
       echo "======= ${ARR[index]} ======="
       echo
       ls -l $D | awk 'BEGIN { print"    Name file     Size of file\n-----------------------------"}  {print $8 "      " $5}';\
       echo
       echo "The string don't contain the word $STR:"
       echo 
       grep -n -v "$STR" "${A[index]}" || echo "   Нет строк    "
    done;
    echo "Do you want to finish ?    Y/N";
    echo
    read Q;
    case $Q in
        "Y"*) break; echo ;;
        "y"*) break;echo  ;;
             *) ;;
    esac;  

Так лучше?

#206959

а как там присоединиться

#206962

Стоп, я кажется понял суть этого проекта, но к сожалению переводить я не умею, да и если уж на то пошло, как говорится зачем изобретать велосипед, когда есть машина?!, я уже говорил выше, так вот повторюсь, что решил быть программистом PHP/HTML-верстальщик, что по сути с башем ничего общего не имеет, но в отличие от других, я не прошу все мне написать я все сам написал ищя в мануал что и как пишется, но в массивах никак не пойму ничего, и прошу хотя бы объяснить

#206964

gramozeka, вы можете просто проверить мой код выше там уже с массивами, только пишет ошибку:
42: Bad substitution
42: Bad substitution
не пойму что это значит

#206969
Student_novi4ok написал:
а как там присоединиться

Там задай вопрос.

#206971

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

#206983

Это я уже все читал на этом же сайте, только что-то не пойму как вводить в массив свое, там уже готовые массивы, заполненные.

#206991
Student_novi4ok написал:
Это я уже все читал на этом же сайте, только что-то не пойму как вводить в массив свое, там уже готовые массивы, заполненные.

как ты читаешь интересно , инновационно , а это интересно как тогда понимать :

text
Пример 25-3. Некоторые специфичные особенности массивов

#!/bin/bash

declare -a colors # Допускается объявление массива без указания его размера.

echo "Введите ваши любимые цвета (разделяя их пробелами)."

read -a colors # Введите хотя бы 3 цвета для демонстрации некоторых свойств массивов. # Специфический ключ команды 'read', #+ позволяющий вводить несколько элементов массива.

echo

element_count=${#colors[@]}

# Получение количества элементов в массиве. # element_count=${#colors[*]} -- дает тот же результат. # # Переменная "@" позволяет "разбивать" строку в кавычках на отдельные слова #+ (выделяются слова, разделенные пробелами).

index=0

while [ "$index" -lt "$element_count" ] do # Список всех элементов в массиве. echo ${colors[$index]} let "index = $index + 1" done # Каждый элемент массива выводится в отдельной строке. # Если этого не требуется, то используйте echo -n "${colors[$index]} " # # Эквивалентный цикл "for": # for i in "${colors[@]}" # do # echo "$i" # done # (Спасибо S.C.)

echo

# Еще один, более элегантный, способ вывода списка всех элементов массива. echo ${colors[@]} # ${colors[*]} дает тот же результат.

echo

# Команда "unset" удаляет элементы из массива, или даже массив целиком. unset colors[1] # Удаление 2-го элемента массива. # Тот же эффект дает команда colors[1]= echo ${colors[@]} # Список всех элементов массива -- 2-й элемент отсутствует.

unset colors # Удаление всего массива. # Тот же эффект имеют команды unset colors[*] #+ и unset colors[@]. echo; echo -n "Массив цветов опустошен." echo ${colors[@]} # Список элементов массива пуст.

exit 0

Как видно из предыдущего примера, обращение к ${array_name[@]} или ${array_name[*]} относится ко всем элементам массива. Чтобы получить количество элементов массива, можно обратиться к ${#array_name[@]} или к ${#array_name[*]}. ${#array_name} -- это длина (количество символов) первого элемента массива, т.е. ${array_name[0]}.

Пример 25-4. Пустые массивы и пустые элементы

#!/bin/bash # empty-array.sh

# Выражаю свою благодарность Stephane Chazelas за этот пример, #+ и Michael Zick за его доработку.

# Пустой массив -- это не то же самое, что массив с пустыми элементами.

array0=( первый второй третий ) array1=( '' ) # "array1" имеет один пустой элемент. array2=( ) # Массив "array2" не имеет ни одного элемента, т.е. пуст.

echo ListArray() { echo echo "Элементы массива array0: ${array0[@]}" echo "Элементы массива array1: ${array1[@]}" echo "Элементы массива array2: ${array2[@]}" echo echo "Длина первого элемента массива array0 = ${#array0}" echo "Длина первого элемента массива array1 = ${#array1}" echo "Длина первого элемента массива array2 = ${#array2}" echo echo "Число элементов в массиве array0 = ${#array0[*]}" # 3 echo "Число элементов в массиве array1 = ${#array1[*]}" # 1 (сюрприз!) echo "Число элементов в массиве array2 = ${#array2[*]}" # 0 }

# ===================================================================

ListArray

# Попробуем добавить новые элементы в массивы

# Добавление новых элементов в массивы. array0=( "${array0[@]}" "новый1" ) array1=( "${array1[@]}" "новый1" ) array2=( "${array2[@]}" "новый1" )

ListArray

# или array0[${#array0[*]}]="новый2" array1[${#array1[*]}]="новый2" array2[${#array2[*]}]="новый2"

ListArray

# Теперь представим каждый массив как 'стек' ('stack') # Команды выше, можно считать командами 'push' -- добавление нового значения на вершину стека # 'Глубина' стека: height=${#array2[@]} echo echo "Глубина стека array2 = $height"

# Команда 'pop' -- выталкивание элемента стека, находящегося на вершине: unset array2[${#array2[@]}-1] # Индексация массивов начинается с нуля height=${#array2[@]} echo echo "POP" echo "Глубина стека array2, после выталкивания = $height"

ListArray

# Вывести только 2-й и 3-й элементы массива array0 from=1 # Индексация массивов начинается с нуля to=2 # declare -a array3=( ${array0[@]:1:2} ) echo echo "Элементы массива array3: ${array3[@]}"

# Замена элементов по шаблону declare -a array4=( ${array0[@]/второй/2-й} ) echo echo "Элементы массива array4: ${array4[@]}"

# Замена строк по шаблону declare -a array5=( ${array0[@]//новый?/старый} ) echo echo "Элементы массива array5: ${array5[@]}"

# Надо лишь привыкнуть к такой записи... declare -a array6=( ${array0[@]#*новый} ) echo # Это может вас несколько удивить echo "Элементы массива array6: ${array6[@]}"

declare -a array7=( ${array0[@]#новый1} ) echo # Теперь это вас уже не должно удивлять echo "Элементы массива array7: ${array7[@]}"

# Выглядить очень похоже на предыдущий вариант... declare -a array8=( ${array0[@]/новый1/} ) echo echo "Элементы массива array8: ${array8[@]}"

# Итак, что вы можете сказать обо всем этом?

# Строковые операции выполняются последовательно, над каждым элементом #+ в массиве var[@]. # Таким образом, BASH поддерживает векторные операции # Если в результате операции получается пустая строка, то #+ элемент массива "исчезает".

# Вопрос: это относится к строкам в "строгих" или "мягких" кавычках?

zap='новый*' declare -a array9=( ${array0[@]/$zap/} ) echo echo "Элементы массива array9: ${array9[@]}"

# "...А с платформы говорят: "Это город Ленинград!"..." declare -a array10=( ${array0[@]#$zap} ) echo echo "Элементы массива array10: ${array10[@]}"

# Сравните массивы array7 и array10 # Сравните массивы array8 и array9

# Ответ: в "мягких" кавычках.

exit 0

для талантливых объясни своими словами .

#206993

спасибо вам огромнейшее, буду разбираться...

#206995

read -a colors
на эту строку ругается и дальше не идет,

3: declare: not found
Введите ваши любимые цвета (разделяя их пробелами).
read: 8: Illegal option -a

#207002

Student_novi4ok, а запускаешь точно башем?
bash <файло>
а то иногда
sh <файло>
а это разные вещи

#207006

ну как я пишу, допустим sh lol.sh

Войдите или зарегистрируйтесь, чтобы ответить.