Scripting
有沒有給出兩個數字的最小值/最大值的unix命令?
我正在尋找一個命令來限制從
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