shell运算符
2010-07-03 19:35
162 查看
shell 运算和进制转换 Shell 提供大量的基本运算操作,在脚本中非常有用。Shell 对您提供的算术表达式求值,执行运算展开式,此时使用得出的结果替换表达式。以下面的格式提供运算表达式:
您可以使用
清单 5. Bourne Shell 中的运算展开式
您还可以将展开式分配给变量。尝试清单 6 所显示的结果。
清单 6. 将运算展开式分配给 Shell 变量
表 2 列出了在大多数 Bourne 以及与 Bourne 兼容的 Shell中可以使用的运算符。正如上面第二个示例,使用圆括号括起来的语句有更高的优先级。实际上,Shell 算术优先级通常根据 C 语言的规则来确定。
表 2. Shell 条件表达式
使用 Shell 运算进行进制转换
假 定在您的脚本中有一些数字,您需要以另外的进制处理这些数字。使用 Shell 运算可以很容易地自动实现这类转换。一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:
您还可以使用以下格式指定 2 到 64 之间的任意进制:
通过在 Shell 提示符后键入清单 7 中所示的行,尝试将二进制、八进制、十六进制以及其他进制的数转换为十进制。
清单 7. 在 Shell 中将任意进制的数以十进制输出
使用 bc 进行进制转换
在 Shell 中进行进制转换的另一个诀窍是使用
清单 8. 使用 bc 执行进制转换
要快速执行进制转换,可以联合使用
清单 9. Shell 单命令行 bc 程序
警告:当您设置
清单 10. 设置输入和输出进制的先后顺序的重要性
运 算符类型
按位运算符
~, <<, >>, &, |, ^
$[]表示形式告诉 shell 对方括号中的表达式求值
表达式替换
$[ ] 和 $(())
两种格式功能一样,所有的 shell 的求值都是用整数完成
$[ ] 可以接受不同基数的数字
赋值运算符
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=本文出自 “openpy” 博客,请务必保留此出处http://openpy.blog.51cto.com/2798268/1572452
$(( expression )) |
echo在命令行显示运算展开式的结果,了解其工作情况。现在尝试清单 5 所显示的结果。
清单 5. Bourne Shell 中的运算展开式
$ echo $((10+40)) 50 $ echo $((5*(3+3))) 30 |
清单 6. 将运算展开式分配给 Shell 变量
$ myvar = 10 $ echo $myvar 10 $ echo $(($myvar-2)) 8 $ myvar = $(($myvar+5)) $ echo $myvar 15 $ result = $(($myvar-10)) $ echo $result 5 $ |
表 2. Shell 条件表达式
运算符 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 求余 |
< | 小于(1 代表真,0 代表假) |
<= | 小于等于(1 代表真,0 代表假) |
> | 大于(1 代表真,0 代表假) |
>= | 大于等于(1 代表真,0 代表假) |
<< | 按位向左移位:将给定的整数或第一个表达式向左移动第二个表达式表示的位数 |
>> | 按位向右移位:将给定的整数或第一个表达式向右移动第二个表达式表示的位数 |
|
假 定在您的脚本中有一些数字,您需要以另外的进制处理这些数字。使用 Shell 运算可以很容易地自动实现这类转换。一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:
$ echo $((013)) $ echo $((0xA4)) |
$((BASE#NUMBER)) |
清单 7. 在 Shell 中将任意进制的数以十进制输出
echo $((2#1101010)) echo $((8#377)) echo $((16#D8)) echo $((12#10)) echo $((36#ZZYY)) |
在 Shell 中进行进制转换的另一个诀窍是使用
bc, 它是一种任意精度运算语言,大多数 UNIX 安装程序都提供。因为它允许您指定输出进制,所以当您需要以十进制以外的进制输出时,这是一种很好的技术。
bc的特殊变量
ibase和
obase分别包含用于输入和输出的进制的值。缺省情况下,都被设置为 10。要执行进制转换,需要改变其中的一个或两个值,然后提供一个数字。立即尝试,如清单 8 中所示。
清单 8. 使用 bc 执行进制转换
$ bc -ql 10 10 obase=16 10 A ibase=2 10 2 Control-D $ |
bc和
echo形成快捷的单命令行程序,将给定的值通过管道传输给
bc。键入清单 9 中显示的内容。
清单 9. Shell 单命令行 bc 程序
$ echo 'obase=16; 47' | bc 2F $ echo 'obase=10; ibase=16; A03' | bc 2563 $ |
bc的输入进制以后,输入
bc的所有数字都使用该进制,包括您提供用于设置输出进制的数字。因此最好先设置输出进制,否则可能会产生意想不到的结果,如清单 10 中所示。
清单 10. 设置输入和输出进制的先后顺序的重要性
$ echo 'ibase=16; obase=10; A' | bc A $ echo 'ibase=16; obase=A; A' | bc 10 $ |
按位运算符
~, <<, >>, &, |, ^
$[]表示形式告诉 shell 对方括号中的表达式求值
表达式替换
$[ ] 和 $(())
两种格式功能一样,所有的 shell 的求值都是用整数完成
$[ ] 可以接受不同基数的数字
赋值运算符
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=本文出自 “openpy” 博客,请务必保留此出处http://openpy.blog.51cto.com/2798268/1572452
相关文章推荐
- 八、Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- shell编程之运算符
- shell基本运算符
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- shell脚本学习4——shell运算符
- Shell 基本运算符
- Shell 基本运算符
- Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等
- Linux shell脚本 (七)Shell运算符
- shell脚本之运算符(四)
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- shell--3.运算符
- Shell运算符
- shell中的一些运算符
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- Shell 替换+运算符
- Shell运算符
- shell运算符
- Shell 基本运算符