Bash Оператор If для сравнения переменных массива - PullRequest
0 голосов
/ 03 августа 2020

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

#!/bin/bash
#CHECKTIME


#GET TIME
IFS=- read -r DAY HOUR MINUTE < <(date +%u-%H-%M)
echo $DAY
echo $HOUR
echo $MINUTE

arr=()
while IFS= read -r line; do
  arr+=("$line")
done < myFile.txt

echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}

if [ $DAY =  $arr[0]]
then
    echo "do event"

else
        echo "don't do event"
fi

Спасибо

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Синтаксис для получения элемента массива следующий:

${arr[0]}

Хотя это не единственная проблема вашего скрипта. Вы можете использовать ShellCheck для отладки остального. Для начала [ $DAY = $arr[0]] недействителен.

0 голосов
/ 03 августа 2020

Здесь вы смешиваете синтаксис zsh и bash. Ваш оператор if будет действителен под zsh (хотя в zsh он должен быть $arr[1] вместо $arr[0]). В bash вы можете использовать

if [ "$DAY" = "${arr[0]}" ]

или (если вам не нравится цитирование)

if [[ $DAY == ${arr[0]} ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...