Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Переменные в скриптах  (Прочитано 679 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Переменные в скриптах
« : 05 Ноября 2019, 22:52:52 »
#!/bin/bash

#Время таймаута между командами
time_sleep = 4

#Обновление системы Ubuntu
sudo apt update
sudo apt upgrade -y
echo "---------------"
echo "Выполнено: Обновление системы"
sleep $time_sleep
echo "---------------"

#Установка иннструмента командной строки, который помогает
# выполнить установку связанных пакетов, как единую коллекцию задач
sudo apt install -y  tasksel
echo "---------------"
echo "Выполнено: установка 'tasksel' "
sleep $time_sleep
echo "---------------"

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

Почему ?

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6733
  • 20% Cooler
    • Просмотр профиля
Re: Переменные в скриптах
« Ответ #1 : 05 Ноября 2019, 23:01:30 »
time_sleep = 4
Нет, вы не можете вставить пробелы вокруг =, когда присваиваете переменной значение. Это не С. Когда вы пишете foo = bar, оболочка разбивает это на три слова. Первое — foo — берётся в качестве имени команды. Второе и третье — в качестве аргументов команды.

foo= bar # Неправильно!
foo =bar # Неправильно!
$foo = bar; # СОВСЕМ НЕПРАВИЛЬНО!
foo=bar # Правильно.
foo="bar" # Ещё правильнее.
(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Переменные в скриптах
« Ответ #2 : 07 Ноября 2019, 10:42:29 »
!/bin/bash
#Время таймаута между командами
time_sleep=4
#Обновление системы Ubuntu
sudo apt update
sudo apt upgrade -y
echo "---------------"
echo "Выполнено: Обновление системы"
sleep $time_sleep
echo "---------------"

#Установка иннструмента командной строки, который помогает
# выполнить установку связанных пакетов, как единую коллекцию задач
sudo apt install -y  tasksel
echo "---------------"
echo "Выполнено: установка 'tasksel' "
sleep $time_sleep
echo "---------------"

так заработало, но я убрал расширение файла

Некоторые проблемы:
- если расширение файла .sh, появятся ошибки типа
Цитировать
$/r/ .....
я пробовал убирать пробелы между строками, где-то ошибки исчезали, где-то нет
 Как только убрал расширение файла, ошибки исчезли

файл запускаю так

bash имя_файла
- пакеты с именами в которых есть дефис : при выполнении из пакетного файла возникает ошибка

Цитировать
пакет xserver-xorg-   не найден

хотя отдельно вот такой код в консоли выполняется нормально

sudo apt install  xserver-xorg-core

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6902
    • Просмотр профиля
Re: Переменные в скриптах
« Ответ #3 : 07 Ноября 2019, 11:11:53 »
Краткий ответ на ваши вопросы: учите азбуку bash. Вот неплохая книжка.
Пару примеров. Хоть у вас и правильно, но более "безопасные" варианты.
time_sleep='4'
sleep ${time_sleep}
Цитировать
пакеты с именами в которых есть дефис : при выполнении из пакетного файла возникает ошибка
Посмотрите внимательней. Мне кажется виноват на дефис, а затесавшийся пробел.
« Последнее редактирование: 07 Ноября 2019, 11:29:41 от andytux »

Оффлайн olej.tsil

  • Участник
  • *
  • Сообщений: 108
    • Просмотр профиля
Re: Переменные в скриптах
« Ответ #4 : 07 Ноября 2019, 13:01:07 »
Цитировать
пакет xserver-xorg-   не найден

хотя отдельно вот такой код в консоли выполняется нормально

sudo apt install  xserver-xorg-core
Ну так xserver-xorg- и xserver-xorg-core отличаются по написанию, не правда ли?  ;)
Конечно же пакета с именем xserver-xorg- нет в репозиториях.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Переменные в скриптах
« Ответ #5 : 07 Ноября 2019, 20:33:26 »
Ну так xserver-xorg- и xserver-xorg-core отличаются по написанию, не правда ли?
ну так  в скрипте его то же нет,  такая проблема не только с этим пакетом.

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

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6733
  • 20% Cooler
    • Просмотр профиля
Re: Переменные в скриптах
« Ответ #6 : 07 Ноября 2019, 21:57:02 »
- если расширение файла .sh, появятся ошибки типа
$/r/ .....

Проверим одну вещь. Покажите вывод
grep -q $'\r' /полный/путь/к/скрипту.sh && echo 'DOS' || echo 'UNIX'
« Последнее редактирование: 07 Ноября 2019, 22:01:22 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.