我尝试运行此代码,来自aerospike' start script:
mem=`/sbin/sysctl -n kernel.shmall`
min=4294967296
if [ $mem -lt $min ]
then
info "kernel.shmall too low, setting to 4G pages"
/sbin/sysctl -w kernel.shmall=$min
fi
mem=`/sbin/sysctl -n kernel.shmmax`
min=1073741824
if [ "$mem" -lt $min ]
then
info "kernel.shmmax too low, setting to 1GB"
/sbin/sysctl -w kernel.shmmax=$min
fi
但它显示:
bash: [: 18446744073692774399: integer expression expected
bash: [: 18446744073692774399: integer expression expected
是因为它大于9223372036854775807
吗?有没有解决方法呢?
编辑是的,因为它大于该数字:
if [ 18446744073692774399 -lt 9223372036854775807 ]; then echo 1; fi
bash: [: 18446744073692774399: integer expression expected
if [ 1844674407369277439 -lt 9223372036854775807 ]; then echo 1; fi
1
答案 0 :(得分:2)
/sbin/sysctl -n kernel.shmall
报告的数字接近无符号64位整数的最大值。但是Bash使用了有符号整数。所以它不会起作用。
由于数字的唯一用途是检查它是否太小,您应该更改代码以首先检查数字的长度。如果数字长于基数10位数的阈值,则表示它更大。
答案 1 :(得分:0)
没关系,先通过检查长度找到一个临时的solution:
set_shmall() {
mem=`/sbin/sysctl -n kernel.shmall`
min=4294967296
if [ ${#mem} -le ${#min} ]
then
if [ $mem -lt $min ]
then
info "kernel.shmall too low, setting to 4G pages"
/sbin/sysctl -w kernel.shmall=$min
fi
fi
}
set_shmmax() {
mem=`/sbin/sysctl -n kernel.shmmax`
min=1073741824
if [ ${#mem} -le ${#min} ]
then
if [ $mem -lt $min ]
then
info "kernel.shmmax too low, setting to 1GB"
/sbin/sysctl -w kernel.shmmax=$min
fi
fi
}