位操作符.
位操作符在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