Регулярное выражение в скрипте bash не соответствует шаблону чисел - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь написать сценарий, который определяет, кто должен готовить в команде из 4 человек. Сценарий берет неделю в году и делит ее на 4. Если нет десятичного значения , теперь очередь Сандры. Если он содержит 0,25 , настала очередь Кристины. Если он содержит .5 , настала очередь Зака. Если он содержит .75 , очередь Петра.

#!/bin/bash
# Script to check whose turn it is to cook

let week=$(date +%W)
echo "Current week of the year is $week"

let teamsize=4
counter=`echo "$week/$teamsize"|bc -l`
echo "Current week's counter is $counter"

if [[ "$counter" = ^[0-9]*\.0*$ ]]
    then echo "Sandra's turn"
elif [[ "$counter" = ^[0-9]*\.250*$ ]]
    then echo "Christina's turn"
elif [[ "$counter" = ^[0-9]*\.50*$ ]]
    then echo "Zack's turn"
elif [[ "$counter" = ^[0-9]*\.750*$ ]]
    then echo "Peter's turn"
else echo "No cook matched!"
fi

Для текущей недели он не соответствует ни одной из записей. Неделя в году 18 , и это результат:

Current week of the year is 18
Current week's counter is 4.50000000000000000000
No cook matched!

Оцените любую помощь в выяснении того, как сопоставить счетчик переменных с шаблоном числа регулярного выражения. Спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

Это укороченная версия вашего скрипта с использованием awk.

awk  -v date=$(date +%W) -v teamsize=4 '
BEGIN{ 
    turn= sprintf("%.2f",date / teamsize);
    if( turn ~ /^[0-9]*\.0*$/ ) { print "Sandra'"'"'s turn" }
    else if( turn ~ /^[0-9]*\.250*$/ ) { print "Christina'"'"'s turn" }
    else if( turn ~ /^[0-9]*\.50*$/ ) { print "Zack'"'"'s turn" }
    else if( turn ~ /^[0-9]*\.750*$/ ) { print "Peter'"'"'s turn" }
    else { print "No cook matched!" }
}'

Надеюсь, это будет полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...