1. 数值比较
-eq -> =
-ne -> !=
-lt -> <
-gt -> >
-le -> <=
-ge -> >=
if test 1 -eq 1; then
echo "yes"
fi
if [ 1 -eq 1 ]; then
echo "yes"
fi
================================================================================
2. 计算
2-1. expr
2-1-1. 计算符两边必须有空格
2-1-2. 只能计算整数
a=`expr 5 + 3`
b=`expr 5 - 3`
ab=`expr $a + $b`
c=`expr 5 \* 3`
d=`expr 5 / 3`
e=`expr 5 % 3`
2-2. let
2-2-1. 计算符两边不能有空格
2-2-2. 只能计算整数
$ n=1;let n+=1;echo $n
2
2-3. $(())
2-3-1. $((09-1)), 会把 09 当作八进制来计算, 此时应该使用 expr 或 let 等
$echo $((09-1))
bash: 09: value too great for base (error token is "09")
2-4. 小数计算
2-4-1. 使用 awk (四舍五入 5 位小数)
$ awk 'BEGIN{print 10/3}'
3.33333
$ awk 'BEGIN{print 1.222222/1.333333}'
2.55556
#!/bin/sh
x=1.222222
y=1.333333
r=`echo "${x} ${y}" | awk '{print ($1+$2)}'`
echo $r
2-4-2. 使用 bc
$ echo 10/3 | bc -l
3.33333333333333333333
#!/bin/sh
x=1.22222222222222222222222222222222222222222222
y=1.33333333333333333333333333333333333333333333
echo $x+$y | bc -l
================================================================================
3. 格式化
3-1. 千分位分隔符
$ printf "%'.2f\n" 123456.789
123,456.79
================================================================================
4. 判断是否为数字
4-1. 整数
#!/bin/bash
echo "Please input a number"
read num
expr $num "+" 10 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$num is a num"
else
echo "$num not a num"
fi
4-2. 小数
#!/bin/sh
x=7.0
y=6.3
r=`echo "${x}>${y}" | awk -F '>' '{ print ($1 > $2 ? "yes" : "no") }'`
echo "x=${x}, y=${y}; x>y ? ${r}"
x=5.5
y=6.3
r=`echo "${x}>${y}" | awk -F '>' '{ print ($1 > $2 ? "yes" : "no") }'`
echo "x=${x}, y=${y}; x>y ? ${r}"
x=6.3
y=6.3
r=`echo "${x}>${y}" | awk -F '>' '{ print ($1 > $2 ? "yes" : "no") }'`
echo "x=${x}, y=${y}; x>y ? ${r}"
================================================================================
0 件のコメント:
コメントを投稿