我有一个bash脚本检查平台上的CPU数量,以便有效地使用make,repo等-j
选项。我用这个:
JOBS=$(cat /proc/cpuinfo | grep processor | tail -1 | sed "s,^.*:.*\([0-9].*\)$,\1,")
echo -e "4\n$JOBS" | sort -r | tail -1
工作正常。但是,我想知道是否有任何内置函数做同样的事情(即计算最小值或最大值)?
答案 0 :(得分:92)
如果您想获得MAX(4,$JOBS)
,请使用:
echo $(($JOBS>4?$JOBS:4))
答案 1 :(得分:23)
在类似的情况下,我必须找到几个变量的最小值,而我发现有用的一个不同的解决方案是sort
#!/bin/bash
min_number() {
printf "%s\n" "$@" | sort -g | head -n1
}
v1=3
v2=2
v3=5
v4=1
min="$(min_number $v1 $v2 $v3 $v4)"
我猜这不是最有效的技巧,但是对于一小部分常数变量,它应该没那么重要 - 它比嵌套三元运算符更具可读性。
编辑:引用尼克的好评 - 此方法可以扩展为任何类型的排序用法:
#!/bin/bash
min() {
printf "%s\n" "${@:2}" | sort "$1" | head -n1
}
max() {
# using sort's -r (reverse) option - using tail instead of head is also possible
min ${1}r ${@:2}
}
min -g 3 2 5 1
max -g 1.5 5.2 2.5 1.2 5.7
min -h 25M 13G 99K 1098M
max -d "Lorem" "ipsum" "dolor" "sit" "amet"
min -M "OCT" "APR" "SEP" "FEB" "JUL"