С Новым годом! Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51

Как в bash проверить значение переменной чтобы совпадало с одним из вариантов?

13.07.2016, 20:39. Показов 10123. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
например:
Bash
1
PARAMETER="true" # может быть enabled, on, yes
а дальше что-то типа:
Bash
1
2
3
4
if [[ echo $PARAMETER | grep -e "true|on|yes" ]]; then
echo "опция включена"
else echo "опция не включена"
fi
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2016, 20:39
Ответы с готовыми решениями:

Как присвоить переменной bash значение, считанное с диска
Попробую так: SIGN=$(dd if=/dev/hda skip 446 bs=1 count=1) Просмотр значения переменной с помощью echo "$SIGN" ...

Как сделать чтобы название переменной, было значение другой переменной?
Я хочу сделать следующее: пример: $test1 = "aver"; $test2 = "12345"; В конечном итоге, я хочу получить такой результат: $aver =...

Как подставить значение переменной var1 чтобы читалось его значение
Подскажите, не могу понять как подставить значение переменной var1 чтобы читалось его значение : dim T1$ Dim var1 As Integer Dim var2...

20
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
13.07.2016, 20:49
modman, case ... in
Bash
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
 
PARAMETER="true" # может быть enabled, on, yes
# а дальше что-то типа:
case $PARAMETER in
    'true'|'on'|'yes')
        echo "опция включена"
    ;;
    *)
        echo "опция не включена"
    ;;
esac
1
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
13.07.2016, 22:11  [ТС]
Спасибо!
А как записать этот параметр в файл? Не нашел информации, где-то пишут про файлы конфигурации, где-то про добавление свого пути в PATH. Как правильно сохранять свои параметры настройки bash, которые могут изменятся из терминала?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
13.07.2016, 22:56
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

modman, можно использовать конфиг как часть скрипта
Bash
1
2
#config.sh
PARAMETER="true"
основной скрипт
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
# читаем конфиг
source config.sh
 
case $PARAMETER in
    'true'|'on'|'yes')
        echo "опция включена"
    ;;
    *)
        echo "опция не включена"
    ;;
esac
 
# записываем конфиг
echo '# config.sh' > config.sh
echo "PARAMETER="${PARAMETER}"" >> config.sh
1
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
13.07.2016, 23:02  [ТС]
Таким образом нужно все строки файла перезаписывать, или можно как то выборочно записывать только измененные переменные?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
13.07.2016, 23:08
Цитата Сообщение от modman Посмотреть сообщение
или можно как то выборочно записывать только измененные переменные?
можно.
но тут в дело вступают awk и sed.
А я с ними, к сожалению, не дружу.
1
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
13.07.2016, 23:09  [ТС]
И еще вопрос, если я в терминале напишу PARAMETER="false", как дать понять интерпретатору что параметр изменился и нужно запустить нужную функцию а также записать этот параметр в файл?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
13.07.2016, 23:28
modman, хм...
единственный вариант который я вижу - это написание функции, которая будет устанавливать значения и запускать нужное действие
Bash
1
2
3
4
5
6
7
8
9
function setcfg(){
    # задаем значение
    export "$1=$2"
    # запускаем обновление(update_cfg - это ваш скрипт)
    update_cfg
}
 
# пример использования
setcfg PARAMETER "false"
те через ввод PARAMETER="false" запустить изменения не выйдет
Хотя я могу ошибаться на этот счет.
1
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
13.07.2016, 23:35  [ТС]
То есть нужно будет вызывать функцию setcfg с нужным параметром?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
13.07.2016, 23:39
modman, да
1
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
13.07.2016, 23:43  [ТС]
Понял, спасибо огромное!
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.07.2016, 00:12
Цитата Сообщение от modman Посмотреть сообщение
если я в терминале напишу PARAMETER="false", как дать понять интерпретатору что параметр изменился и нужно запустить нужную функцию а также записать этот параметр в файл?
Было бы проще если бы Вы пояснили что именно Вы пытаетесь сделать (какая цель)
0
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
14.07.2016, 13:21  [ТС]
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
color_prompt() {
 
    case "$1" in # проверяем аргумент с которым она вызвана
        "true"|"on"|"enabled")
            set_color_prompt # устанавливаем цветное приглашение
        ;;
        "false"|"off"|"disabled")
            set_default_prompt # устанавливаем обычное приглашение
        ;;
        *)
            echo "ошибка, используете true, on, enabled, false, off, disabled"
        ;;
    esac
}
 
set_color_prompt() {
 
    local RESET="\[\e[m\]" # по умолчанию
    local K="\[\e[0;30m\]" # черный
    local R="\[\e[0;31m\]" # красный
    local G="\[\e[0;32m\]" # зеленый
    local Y="\[\e[0;33m\]" # желтый
    local B="\[\e[0;34m\]" # синий
    local M="\[\e[0;35m\]" # пурпурный
    local C="\[\e[0;36m\]" # глубой
    local W="\[\e[0;37m\]" # белый
 
    # Устанавливаем цветное приглашение 'host@user workdir $'
    # Если выполнен вход root, подсвечиваем в приглашении 'root' и '$(#)' красным цветом
    if [[ $UID == 0 ]]; then
    export PS1='\h@${R}\u ${G}\w ${R}\$${K} '
 
    else
    export PS1='\h@\u ${G}\w${K} \$ '
    fi
}
 
set_default_prompt() {
 
    # Устанавливаем приглашение 'host@user workdir $'
    export PS1='\h@\u \w \$ '
}

Уважаемые знатоки, доброго дня!
Вот что пока получилось, эта функция включает или выключает цветное приглашение в терминале,
например, color_prompt enabled, или color_prompt disabled.
В идеале хотелось иметь возможность использовать не вызов функции а переменную типа как CLICOLOR или тот же PS1.
То есть задал ей значение, сразу изменения вступили в силу, типа вот так: COLOR_PROMPT=true, и приглашение стало цветным, COLOR_PROMPT=false, и приглашение стало одноцветным. Плюс эта переменная где-то должна сохранять свое последнее значение, чтобы после перезагрузки восстанавливалось состояние. Возможно ли реализовать такое решение? И если нет, то не подскажете как записывать и считывать переменные для моего кода, с учетом того что там может быть их несколько, и перезаписываться они могут выборочно.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.07.2016, 16:06
Цитата Сообщение от ~/.bashrc
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
 
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi
 
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
Все что нужно — закоментировать/раскоментировать строку
Code
1
force_color_prompt=yes
Bash
1
sed -i '/^\s*force_color_prompt=yes/s/^/#/' ~/.bashrc
и перечитать ~/.bashrc
Bash
1
source ~/.bashrc
(ну и создать свои профили PS1)
0
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
14.07.2016, 17:03  [ТС]
Спасибо за ответ, но вопрос как бы в другом. Вопрос в реализации именно того скрипта что есть. У меня mac и там нет $force_color_prompt. Повторю что меня больше всего интересует:
Кликните здесь для просмотра всего текста
Можно ли создать свои переменные чтобы при их изменении интерпретатор "реагировал". Может это через PROMPT_COMMAND делается? И второй вопрос, как самым простым способом делать запись значений переменных в файл, что бы потом после перезагрузки считывать их? Изменил я из консоли $WELCOME_MSG, оно записалось в файл, а при следующем логине прочиталось... Например:
Bash
1
2
3
4
# Файл моих настроек bash
SET_VAR1="true"
SET_VAR2="50"
WELCOME_MSG="welcome back, \u"
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.07.2016, 17:55
При логине исполняется ~/.profile
При запуске консоли ~/.bashrc
Приглашение консоли определяется переменной PS1
Можете использовать вместо force_color_prompt другую переменную, кто Вас заставляет? Сам алгоритм расписан в предыдущем сообщении.
Если Вы хотите построить свой «велосипед» то кто запретит?
0
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
14.07.2016, 19:05  [ТС]
Я знаю что такое .profile и .bashrc. Вопрос не в этом, еще раз повторю. Вопрос в способе записи переменных в файле.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.07.2016, 19:37
Чем не устроило?
Цитата Сообщение от Marinero Посмотреть сообщение
Bash
1
sed -i '/^\s*force_color_prompt=yes/s/^/#/' ~/.bashrc
и перечитать ~/.bashrc
Bash
1
source ~/.bashrc
0
0 / 0 / 0
Регистрация: 13.07.2016
Сообщений: 51
14.07.2016, 22:09  [ТС]
Да пожалуй устраивает, только мне нужно не комментить\раскомментить строку а найти нужную строку и поменять ее значение, например есть файл vars.cfg, хранящий список переменных и значений
Bash
1
2
3
# ~/vars.cfg
VAR1="true"
NAME="petya"
Bash
1
2
3
# а в скрипте меняем значения
sed -i '1s/true/false/' ~/vars.cfg
sed -i '2s/petya/vasya/' ~/vars.cfg
Только этот способ ищет по номерам строк, а это не очень удобно в моем случае. Нужен поиск по имени.
Не подскажете как адаптировать ваш пример с sed чтобы допустим найти строку содержащую VAR1 И заменить в ней true на false?
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.07.2016, 22:18
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

Bash
1
2
3
4
sed -i '
    /^VAR1=/s/[^=]*$/"false"/
    /^NAME=/s/[^=]*$/"vasya"/
    ' ~/vars.cfg
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2016, 22:18
Помогаю со студенческими работами здесь

Как задать значение сессию, чтобы значение было переменной из js?
Добрый день.как задать значение сессию,чтобы значение было переменной из js. Есть код success: function(html){ ...

Как проверить значение переменной
Привет народ. Раз уж это раздел для начинающих значит можно глупые вопросы задавать :) Как прверить значение i на момент завершения...

Как проверить значение переменной в test?
создала переменную окружения NEWDIR так: export NEWDIR=/export/students/402/ проверила с помощью утилиты env, переменная создалась но...

Как проверить значение переменной на содержание только двух цифр подряд?
Добрый день! Есть нЕкая строка URL, которая содежит переменную ii, значение которой может быть только одна или только две цифры. ...

Как я могу проверить равно ли значение переменной char одному из указанных значений?
Как я могу проверить равно ли значение переменной char одному из указанных значений? На примере псевдокода это выглядит так : char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru