Согласен, писать за меня не просил и по сути не прошу писать все, прошу только помочь в том, чего сам никак не пойму. Если расставлю отступы, сможете помочь?
gramozeka, вот так вот слова доводят до гранатометания. :lol:, ты это,... осторожней.
Можете помочь с массивом, ну пж, завтра уже сдавать надо, просто приболел, в пятницу не был на занятиях, а преподаватель сказал запросы записывать в массив, вчера весь денб изучал массивы, но не совсем понял как записывать в массив, в моем коде, выше все работает только, как я понял, синтаксическая ошибка связанная с массивами. буду очень благодарен, сейчас выложу отредактированный код
имхо подключайся к проекту, потом там и помогут, а то вечно все просят помоги, а взамен никаких действий, сообществу никогда помощь не помешает, ну это мое имхо.
#!/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;
Стоп, я кажется понял суть этого проекта, но к сожалению переводить я не умею, да и если уж на то пошло, как говорится зачем изобретать велосипед, когда есть машина?!, я уже говорил выше, так вот повторюсь, что решил быть программистом PHP/HTML-верстальщик, что по сути с башем ничего общего не имеет, но в отличие от других, я не прошу все мне написать я все сам написал ищя в мануал что и как пишется, но в массивах никак не пойму ничего, и прошу хотя бы объяснить
gramozeka, вы можете просто проверить мой код выше там уже с массивами, только пишет ошибку:
42: Bad substitution
42: Bad substitution
не пойму что это значит
Блин ну пожалуйста, помогите с массивом, объясните тогда уж, как они вообще пишется общий синтаксис, все что я читал про массивы, там были массивы с заранее введенными в них словами, а как вводить слова в массив и выводить из него??????????????
Это я уже все читал на этом же сайте, только что-то не пойму как вводить в массив свое, там уже готовые массивы, заполненные.
как ты читаешь интересно , инновационно , а это интересно как тогда понимать :
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
}
# Добавление новых элементов в массивы.
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 поддерживает векторные операции
# Если в результате операции получается пустая строка, то
#+ элемент массива "исчезает".
# Вопрос: это относится к строкам в "строгих" или "мягких" кавычках?