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