位操作符.
位操作符在shell脚本中极少使用。它们最主要的用途看起来就是操作和test从sockets中
读出的变量."Bit flipping"与编译语言的联系很紧密,比如c/c++,在这种语言中它可以
运行得足够快.(原文有处on the fly,我查了一下,好像是没事干的意思,没理解)
<< 左移1位(每次左移都将乘2)
<<= 左移几位,=号后边将给出左移几位
let "var <<= 2"就是左移2位(就是乘4)
>> 右移1位(每次右移都将除2)
>>= 右移几位
& 按位与
&= 按位与赋值
| 按位或
|= 按位或赋值
~ 按位非
! 按位否?(没理解和上边的~有什么区别?),感觉是应该放到下边的逻辑操作中
^ 按位异或XOR
^= 异或赋值
逻辑操作:
&& 逻辑与
1 if [ $condition1 ] && [ $condition2 ]
2 # 与: if [ $condition1 -a $condition2 ] 相同
3 # 如果condition1和condition2都为true,那结果就为true.
4
5 if [[ $condition1 && $condition2 ]] # 也可以.
6 # 注意&&不允许出现在[ ... ]中.
注意:&&也可以用在and list中(见25章),但是使用的时候需要依赖上下文.
|| 逻辑或
1 if [ $condition1 ] || [ $condition2 ]
2 # 与: if [ $condition1 -o $condition2 ] 相同
3 # 如果condition1或condition2为true,那结果就为true.
4
5 if [[ $condition1 || $condition2 ]] # 也可以
6 # 注意||不允许出现在[ ... ]中.
注意:Bash将test每个连接到逻辑操作的状态的退出状态.
例:
if [ "$a" -eq 24 ] && [ "$b" -eq 47 ] 与if [ "$a" -eq 24 -a "$b" -eq 47 ]得到同一结果。
a=1
let "a=a|0x4"
echo $a
if [ $((a|0x4)) -eq 5 ];then
echo "ada"
fi
原文:
http://blog.csdn.net/zhrmghl/article/details/1346409