staging.inyokaproject.org

Min/Max begrenzer

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

fireworker72

Anmeldungsdatum:
11. März 2017

Beiträge: 64

Hallo Leute

gibt es in Bash so eine Art Min/Max Begrenzer für Zahlen?

1
2
3
4
5
6
7
8
a=66
echo $a min0/max100    =66

a=-10
echo $a min0/max100    =0

a=155
echo $a min0/max100    =100

Danke und LG

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Sowas kann man sich einfach selber basteln:

1
2
3
4
5
6
7
8
function limiter () {
    # usage: limiter VALUE MIN MAX
    local -i value="$1"
    local -i min="$2"
    local -i max="$3"
    [ $value -lt $min ] && value=$min || { [ $value -gt $max ] && value=$max; }
    echo $value
}
$ limiter 66 0 100
66
$ limiter -10 0 100
0
$ limiter 155 0 100
100 

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Für arithmetische Operationen empfehlen sich aber doppelte runde Klammern:

1
2
3
4
5
6
7
limiter () { 
  local -i val=$1 
  local -i min=$2 
  local -i max=$3
  ((val < min)) && val=$min || (((val > max)) && val=$max)
  echo $val
}

die die vertraute Schreibweise <, > erlauben.

Anführungsstriche um $1, $2 und $3 zu setzen ist sinnlos.

fireworker72

(Themenstarter)

Anmeldungsdatum:
11. März 2017

Beiträge: 64

Super Danke funktioniert

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Bin ja eher so old school für die sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# args
# 1: min
# 2: max
# 3: value
limiter() {
  if [ $3 -lt $1 ]; then
    echo $1
  elif [ $3 -gt $2 ]; then
    echo $2
  else
    echo $3
  fi
}
Antworten |