Scripting

有沒有給出兩個數字的最小值/最大值的unix命令?

  • November 4, 2021

我正在尋找一個命令來限制從stdin.

我為此目的編寫了一個小腳本(歡迎批評),但我想知道是否沒有標準命令用於此,簡單且(我認為)常見案例。

我的腳本找到兩個數字的最小值

#!/bin/bash
# $1 limit

[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }

read number

if [ "$number" -gt "$1" ]; then
       echo "$1"
else
       echo "$number"
fi

如果您知道您正在處理兩個整數a和,那麼這些使用三元運算符b的簡單shell 算術擴展足以給出數值最大值:

$(( a > b ? a : b ))

和數字最小值:

$(( a < b ? a : b ))

例如

$ a=10
$ b=20
$ max=$(( a > b ? a : b ))
$ min=$(( a < b ? a : b ))
$ echo $max
20
$ echo $min
10
$ a=30
$ max=$(( a > b ? a : b ))
$ min=$(( a < b ? a : b ))
$ echo $max
30
$ echo $min
20
$ 

這是一個展示這一點的 shell 腳本:

#!/usr/bin/env bash
[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }
read number
echo Min: $(( $number  < $1 ? $number : $1 ))
echo Max: $(( $number  > $1 ? $number : $1 ))

sort並且head可以這樣做:

numbers=(1 4 3 5 7 1 10 21 8)
printf "%d\n" "${numbers[@]}" | sort -rn | head -1       # => 21

引用自:https://unix.stackexchange.com/questions/186663