Bash скрипты в Linux
Скрипт запускается с 4-мя параметрами. Параметры числовые. От 1 до 6, например:
script03.sh 1 3 4 5
Обозначения цветов: 1 - white, 2 - red, 3 - green, 4 - blue, 5 – purple, 6 - black.
Параметр 1 - это фон названий значений (HOSTNAME)
Параметр 2 - это цвет шрифта названий значений (HOSTNAME)
Параметр 3 - это фон значений (после знака '=')
Параметр 4 - это цвет шрифта значений (после знака '=')
Я написал так:
#!bin/bash
back1="\033[107m" #white
back2="\033[41m" #red
back3="\033[42m" #green
back4="\033[44m" #blue
back5="\033[45m" #purple
back6="\033[40m" #black
font1="\033[97m" #white
font2="\033[31m" #red
font3="\033[32m" #green
font4="\033[34m" #blue
font5="\033[35m" #purple
font6="\033[30m" #black
end='\033[0m'
echo $((back$1)) #для проверки, выводится ли значение цвета
echo -e "$((back$1))$((front$2)) HOSTNAME = $((back$3))$((front$4))${HOSTNAME} $end"
Я запускаю, к примеру, bash ./main/sh 1 2 3 4
Выходит ошибка:
line 21: \033[107m: syntax error: operand expected (error token is "\033[107m")
На строчку для проверки.
То есть $((back$1)) инициализируется правильно, но почему не работает тогда не пойму, какого операнда не хватает.
Ответы (1 шт):
Так это не работает, переменные не задаются динамически, на самом деле способы есть но есть и более правильный способ - массив:
back=(
'' # т.к. нумерация в массиве начинается с 0 а у вас с 1
"\033[107m" #white
"\033[41m" #red
"\033[42m" #green
"\033[44m" #blue
"\033[45m" #purple
"\033[40m" #black
)
font=(
''
"\033[97m" #white
"\033[31m" #red
"\033[32m" #green
"\033[34m" #blue
"\033[35m" #purple
"\033[30m" #black
)
echo -e "${back[$1]}${front[$2]} HOSTNAME = ${back[$3]}${front[$4]}$HOSTNAME $end"