Você está tendo problemas para declarar sua matriz:
days=('Sunday''Monday') # this means days[0]="SundayMonday"
days=('Tuesday''Wednesday') # this means days[0]="TuesdayWednesday"
days=('Thursday''Friday') # this means days[0]="ThursdayFriday"
days=('Saturday') # this means days[0]="Saturday"
Você quer isso:
days=(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
Você pode citar os nomes dos dias, se quiser, pois o shell não se importa, já que não há expansões de shell que possam ocorrer neles.
Próximo
for numbers in "S@";
Isso é uma letra maiúscula S , e não o sinal de dólar necessário $ . então, a primeira e única vez através do loop, o valor de $numbers
será a string de 2 caracteres S@
Além disso, parece OK.
Pequenas coisas delicadas:
- você não precisa terminar as linhas com ponto e vírgula
- "números" é um nome de variável inválido para conter apenas um número
-
o bash expande variáveis sem o sigilo em expressões aritméticas:
result=$((numbers % 7)) echo "${days[result]}"
-
se você está interagindo com os parâmetros posicionais, não precisa se referir a eles:
for number do echo "${days[number % 7]}"; done
Eu escreveria isso como uma função de shell:
day_of_week() {
local dow=$1
if [[ $dow -lt 0 ]]; then
echo "error: pass a positive number"
return 1
fi
local days=(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
echo "${days[dow]}"
}