您的位置:首页 > 运维架构 > Shell

Shell脚本学习笔记(三)--算术运算

2011-03-12 15:07 716 查看
算术运算



在求值时,如果算术式中变量不存在或空值,则该变量的值为0

不同进制的数字使用"基底#数字"的表示法,其中基底范围为2~64

算术扩展:

如果表达式中有变量,该变量名称之前最好不要加上$,以免该变量不存在造成语法的错误

如果除法的运算结果有余数,则无条件舍去

示例:

#!/bin/bash
declare -i a i q s=0
a=${1:-255}
mask="128   64   32   16    8    4    2    1"
Bmap=
echo "1的二进位128   64   32   16    8    4    2    1"
for i in $mask
do
	q=$((a/i))
	s=$((s+q))
	[ $q -gt 0 ] && Bmap=$Bmap"__1__" || Bmap=$Bmap"__0__"
	a=$((a-q*i))
done
echo "   $s :   $Bmap"



使用外部程序expr:

好处:expr的本来作用是在“标准输出”显示表达式的值。利用这一特性,可以当做一个算术运算的工具。而且,由于它是外部程序,和shell的版本没有关系,几乎在各种os平台上都可以执行。跨平台。

使用expr时,要特别注意“表达式”中是否含有bash shell的特殊字符,如*,|,<,>,!,&,(,)等,如果有要用/予以转义,否则出错。其次,在“表达式”中,运算符和操作数直接至少要有一个以上的空格符隔开。

支持的运算种类:加减...,对比样式,找出子字符串的位置,取子字符串,计算字符串长度,视关键词为一般字符串等

$[]和$(())类似

declare:

事先改变变量的属性

算式中,运算符和操作数之间不可以有空格符,要紧密连接

特殊符合不必使用/转义

算是中,可以包含其他变量,变量之前不必加$

let与之类似
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: