( rubasov | 2009. 12. 12., szo – 16:04 )

A konkret problemara a lenti egy megoldas bash-ben, de mindenkepp javaslom tanulmanyozasra az Advanced Bash Scripting Guide-ot, illetve az adott shell man oldalat


#! /bin/bash

# a regexet azert erdemes valtozoban tarolni, mert igy nem kell szivni azzal,
# hogy nemely bash verzio idezojelekkel varja a regexet, a tobbi meg anelkul
# megjegyzes: ez esetleg meglepo inputokat is elfogadhat: 0000, 00012 stb.
regex='^[0-9][0-9]*$'

# amig nem jo az input, olvass ujra
while true
do

  # az 'echo -n'-nel hordozhatobb a printf
  printf 'input: '

  # ez egy sort olvas az 'ora' valtozoba
  read ora

  # ha minden jo, hagyd abba
  if [[ $ora =~ $regex && $ora -ge 0 && $ora -le 23 ]]
  then
    break
  else
    printf 'invalid input, try again\n'
  fi

done

printf "ora=$ora\n"