bash: case и регулярные выражения

#! /bin/bash


function check_week_day {
    case "$1" in
        \^\[Ss\]u\(n\|nday\)\?\$ ) echo ok;;
        \^\[Mm\]o\(n\|nday\)\?\$ ) echo ok;;
        \^\[Tt\]u\(e\|es\|esday\)\?\$ ) echo ok;;
        \^\[Ww\]e\(d\|ds\|dnesday\)\?\$ ) echo ok;;
        \^\[Tt\]h\(ur\|urs\|ursday\)\?\$ ) echo ok;;
        \^\[Ff\]r\(i\|iday\)\?\$ ) echo ok;;
        \^\[Ss\]a\(t\|turday\)\?\$ ) echo ok;;
        * )
            echo "Wrong day of the week"
            exit 1;;
    esac
}

function check_year_number {
    if [[ "$1" =~ ^[1-9]+[0-9]{,8}$ ]]; then
        year=00$1
    else
        echo "The second argument must be a number between 1 and 999999999 (inclusive)"
    fi
}


if [ "$#" -eq "1" ]; then
    check_week_day $1
    year=`date +%Y`

elif [ "$#" -eq "2" ]; then
    check_week_day $1
    check_year_number $2

else
    echo "Usage: ./`basename $0` day_of_the_week [year]"
fi
}

function check_year_number {
    if [[ "$1" =~ ^[1-9]+[0-9]{,8}$ ]]; then
        year=00$1
    else
        echo "The second argument must be a number between 1 and 999999999 (inclusive)"
    fi
}


if [ "$#" -eq "1" ]; then
    check_week_day $1
    year=`date +%Y`

elif [ "$#" -eq "2" ]; then
    check_week_day $1
    check_year_number $2

else
    echo "Usage: ./`basename $0` day_of_the_week [year]"
fi

Имеется такая программа, которой передаются на вход 1-2 аргумента. Но 1-й аргумент которым должен быть день недели не проходит проверку что бы я не ввел:

user@user:~$ ./script.sh su
Wrong day of the week

Ответы (2 шт):

Автор решения: Vadik

Чтобы использовать расширенные регулярные выражения, включите опцию extglob в начале скрипта:

#!/usr/bin/env bash

shopt -s extglob

И перепишите case следующим образом:

case "$1" in
  [Ss]u?(n|nday)) echo ok ;;
  [Mm]o?(n|nday)) echo ok ;;
  [Tt]u?(e|es|esday)) echo ok ;;
  [Ww]e?(d|ds|dnesday)) echo ok ;;
  [Tt]h?(ur|urs|ursday)) echo ok ;;
  [Ff]r?(i|iday)) echo ok ;;
  [Ss]a?(t|turday)) echo ok ;;
  *) echo fail ;;
esac
→ Ссылка
Автор решения: Ivan

Регулярные выражения в case несколько ограничены, но есть bash regex:

$ [[ $1 =~ ^[Ss]u(n|nday)?$ ]] && echo ok
ok
→ Ссылка