31

Student_novi4ok пишет:

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

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

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

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

33

http://www.opennet.ru/docs/RUS/bash_scr … 12790.html

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

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

35 (20.11.2011 16:31:36 отредактировано gramozeka)

Student_novi4ok пишет:

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

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

Пример 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

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

" si contuderis stultum in pila quasi tisanas feriente desuper pilo non auferetur ab eo stultitia eius " © Proverbs 27:22

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

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

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

38 (20.11.2011 16:51:35 отредактировано zenon)

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

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

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

а надо bash lo.sh?

41

Student_novi4ok пишет:

а надо bash lo.sh?

Да, я же сказал, bash и sh разные.

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

42

Также если делаешь исполняемым файло, то

 Консоль:
chmod a+x файло.sh

запускать потом из текущего каталога допустим:
 Консоль:
./файло.sh

То важен загаловок:

#!/bin/bash или #!/bin/sh
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

#!/bin/bash или #!/bin/sh

всегда пишу первое
а на счет прав доступа знаю, без них не запустится)
все получилось, огромное всем спасибо за помощь, не мытьем, так катаньем, но главное результат, зато я понял, что это не мое, верстать сайт на php и html намного проще)
на вкус и цвет товарища нет)
еще раз выражаю всем благодарность!

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

45

 Консоль:
echo -n "Запрос:"

Да и комбинации

 Консоль:
echo "Текст"
echo

можно свернуть до

 Консоль:
echo -e "Текст\n"

еще раз спасибо

47

припозднился я немного... так понял, уже решено/не актуально?

95% процентов проблем находятся между клавиатурой и стулом.

48

Ребят, помогите, пожалуйста

Напишите на C программу, которая выдает в формате ls информацию о содержимом всех директорий, содержащихся в пути от корневого каталога до текущего местоположения программы, либо в пути, указанном в командной строке (если он задан).

спс

49 (27.01.2012 00:45:10 отредактировано voral)

Это даже не смешно..... ac
Если в гугле вести "си список файлов". Выдаст кучу решений этого вопроса.
В помощь могу дать цитату (из статьи доступной в первых ссылках с гугла и в которой есть годный исходник), которая даст пищу к размышлению:

dirent.h is the header in the C POSIX library for the C programming language that contains constructs that facilitate directory traversing. The function is not part of the C standard, but is considered "pseudo-standard" and is usually portable between platforms.

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

50

Belovusova пишет:

Напишите на C программу, которая выдает в формате ls информацию о содержимом всех директорий, содержащихся в пути от корневого каталога до текущего местоположения программы, либо в пути, указанном в командной строке (если он задан).

500 руб.

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