1. 整数运算
方法一: expr
expr 1 + 2
expr $num1 + $num2 + - \* / %
方法二: $(())
echo $(($num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
echo $(((5-3)*2))
echo $((2**3))
sum=$((1+2)); echo $sum
方法三: $[]
echo $[5+2] + - * / %
echo $[5**2]
方法四: let
let sum=2+3; echo $sum
let i++; echo $i
#!/bin/bash
ip=localhost
i=1
while [ $i -le 5 ]
do
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is up ...."
fi
let i++
done
2. 小数运算
echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;6/4" |bc
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" |python
变量"内容"的删除和替换(扩展)
==="内容"的删除===
[root@tianyun ~]# url=www.sina.com.cn
[root@tianyun ~]# echo ${#url} 获取变量值的长度 15
[root@tianyun ~]# echo ${url} 标准查看 www.sina.com.cn
[root@tianyun ~]# echo ${url#*.} 从前往后,最短匹配 sina.com.cn
[root@tianyun ~]# echo ${url#www.si} 从前往后,最短匹配 na.com.cn
[root@tianyun ~]# echo ${url#*si} 从前往后,最短匹配 na.com.cn
[root@tianyun ~]# echo ${url##*.} 从前往后,最长匹配 贪婪匹配 cn
[root@tianyun ~]# url=www.sina.com.cn
[root@tianyun ~]# echo ${url}
www.sina.com.cn
[root@tianyun ~]# echo ${url%.*} 从后往前,最短匹配 www.sina.com
[root@tianyun ~]# echo ${url%%.*} 从后往前,最长匹配 贪婪匹配 www
[root@tianyun ~]# url=www.sina.com.cn
[root@tianyun ~]# echo ${url#a.} www.sina.com.cn
[root@tianyun ~]# echo ${url#*sina.} com.cn
[root@tianyun ~]# echo $HOSTNAME
tianyun.1000phone.com
[root@tianyun ~]# echo ${HOSTNAME%%.*} tianyun
索引及切片
[root@tianyun ~]# echo ${url:0:5}
[root@tianyun ~]# echo ${url:5:5}
[root@tianyun ~]# echo ${url:5}
==="内容"的替换===
[root@tianyun ~]# url=www.sina.com.cn
[root@tianyun ~]# echo ${url/sina/baidu}
www.baidu.com.cn
[root@tianyun ~]# url=www.sina.com.cn
[root@tianyun ~]# echo ${url/n/N}
www.siNa.com.cn
[root@tianyun ~]# echo ${url//n/N} 贪婪匹配
www.siNa.com.cN
===变量的替代===
[root@tianyun ~]# unset var1
[root@tianyun ~]#
[root@tianyun ~]# echo ${var1}
[root@tianyun ~]# echo ${var1-aaaaa}
aaaaa
[root@tianyun ~]# var2=111
[root@tianyun ~]# echo ${var2-bbbbb}
111
[root@tianyun ~]#
[root@tianyun ~]# var3=
[root@tianyun ~]# echo ${var3-cccc}
${变量名-新的变量值}
变量没有被赋值:会使用“新的变量值“ 替代
变量有被赋值(包括空值): 不会被替代
[root@tianyun ~]# unset var1
[root@tianyun ~]# unset var2
[root@tianyun ~]# unset var3
[root@tianyun ~]# var2=
[root@tianyun ~]# var3=111
[root@tianyun ~]# echo ${var1:-aaaa}
aaaa
[root@tianyun ~]# echo ${var2:-aaaa}
aaaa
[root@tianyun ~]# echo ${var3:-aaaa}
111
${变量名:-新的变量值}
变量没有被赋值(包括空值):都会使用“新的变量值“ 替代
变量有被赋值: 不会被替代
[root@tianyun ~]# echo ${var3+aaaa} 与-相反
[root@tianyun ~]# echo ${var3:+aaaa} 与:-相反
[root@tianyun ~]# echo ${var3=aaaa} 与-类似 并且会给未定义的赋值
[root@tianyun ~]# echo ${var3:=aaaa} 与:-类似 并且会给未定义和空值的赋值
[root@tianyun ~]# echo ${var3?aaaa} 未定义的会报错
[root@tianyun ~]# echo ${var3:?aaaa} 未定义的和空值的会报错
i++ 和 ++i
对变量的值无影响:
[root@tianyun ~]# i=1
[root@tianyun ~]# let i++
[root@tianyun ~]# echo $i
2
[root@tianyun ~]# j=1
[root@tianyun ~]# let ++j
[root@tianyun ~]# echo $j
2
对表达式的值有影响:
[root@tianyun ~]# i=1
[root@tianyun ~]# j=1
[root@tianyun ~]# let x=i++ 先赋值,在运算
[root@tianyun ~]# let x=++j 先运算,在赋值
[root@tianyun ~]# echo $i
2
[root@tianyun ~]# echo $j
2
[root@tianyun ~]# echo $x
1
[root@tianyun ~]# echo $y
2