factor
將乙個正數分解為多個素數.
bash$ factor 2345
2345:5
767
bc
bc命令是一種支援任意精度的互動執行的計算器語言. bash內建了對整數四則運算的支援,但是並不支援浮點運算,而bc命令可以很方便的進行浮點運算,當然整數運算也不再話下.
bc比較類似於c語言的語法.
這裡有乙個簡單的使用bc命令的模版, 可以用來計算指令碼中的變數. 這個模版經常用於命令替換中.
variable=$(echo
"options; operations" | bc)
語法:
bc
(選項)
(引數)
選項:
-i:強制進入互動式模式;
-l:定義使用的標準數學庫;
-w:對posix bc的擴充套件給出警告資訊;
-q:不列印正常的gnu bc環境資訊;
-v:顯示指令版本資訊;
-h:顯示指令的幫助資訊.
引數:
檔案:指定包含計算任務的檔案.
例項:
算術操作高階運算bc命令它可以執行浮點運算和一些高階函式:
echo
"1.212*3" | bc
3.636
設定小數精度(數值範圍).
echo
"scale=2; 3/8" | bc # 引數"scale=2"是將bc輸出結果的小數字設定為2位.
.37
!「scale」制定了有效數字的個數.
進製轉換.
#!/bin/bash
abc=100
a=1100100
echo
"obase=2;$abc" | bc
# 執行結果為:1100100,這是用bc將十進位制轉換成二進位制.
echo
"obase=10;ibase=2;$a" | bc
# 執行結果為:100,這是bc將二進位制轉換為十進位制.
exit
0
計算平方和平方根.
echo
"10^10" | bc # 10000000000
echo
"sqrt(100)" | bc # 10
echo
"sqrt(10)" | bc # 3
echo
"scale=3;sqrt(10)" |bc # 3.162
呼叫bc的另一種方法就是here document, 並把它嵌入到命令替換塊中. 當乙個指令碼需要將乙個選項列表和多個命令傳遞到bc中時, 這種方法就顯得非常合適了.
variable
=`bc << limit_string
options
statements
operations
limit_string
`...
or...
variable
=$(bc << limit_string
options
statements
operations
limit_string
)
例:使用」here document」來呼叫bc.
#!/bin/bash
# 使用命令替換來呼叫'bc'
# 並與'here document'相結合.
var1=`bc << eof
18.33 * 19.78
eof`
echo
$var1
# 362.56
# 使用 $(...)這種標記法也可以.
v1=23.53
v2=17.881
v3=83.501
v4=171.63
var2=$(bc << eof
scale=4
a=( $v1 + $v2 )
b=( $v3 * $v4 )
a * b + 15.35
eof)
echo
$var2
var3=$(bc -l
<9
s ( 1.7 )
eof)
# 返回弧度為1.7的正弦.
# "-l"選項將會呼叫'bc'算術庫.
echo
$var3
# .991664810
hyp= # 宣告全域性變數.
#hypotenuse () # 計算直角三角形的斜邊.
#hypotenuse () # 計算直角三角形的斜邊.
hypotenuse 3.68
7.31
echo
"hypotenuse = $hyp"
# 8.184039344
exit
0
dc
dc(桌面計算器desk calculator)工具是面向棧的, 並且使用rpn(逆波蘭表示式」reverse polishnotation」又叫」字尾表示式」). 與bc命令很相似, 但是這個工具具備好多只有程式語言才具備的能力.
(
正常表示式 字尾表示式(逆波蘭表示式)
a+b a,b,+
a+(b-c) a,b,c,-,+
a+(b-c)
*d a,d,b,c,-,*,+
)
絕大多數人都避免使用這個工具, 因為它需要非直觀的rpn(逆波蘭)輸入, 但是, 它卻有特定的用途.
bash$ echo "16i[q]sa[ln0=aln100%pln100/snlbx]sba0d68736142snlbxq" | dc
bash
bash$
awk
在指令碼中使用浮點運算的另一種方法是使用awk內建的數**算函式, 可以用在shell包裝中.
例: 計算直角三角形的斜邊:
#!/bin/bash
# hypotenuse.sh: 返回直角三角形的斜邊.
args=2
# 需要將兩個直角邊作為引數傳遞進來.
e_badargs=65
# 錯誤的引數值.
if [ $#
-ne"$args" ] # 測試傳遞到指令碼中的引數值.
then
echo
"usage: `basename $0` side_1 side_2"
exit
$e_badargs
fiawkscript=' '
# 命令 / 傳遞給awk的引數.
# 將引數通過管道傳遞給awk.
echo -n "hypotenuse of $1 and $2 = "
echo
$1$2 | awk "$awkscript"
exit
0
執行;
bash$ ./hypotenuse.sh 3
4hypotenuse
3and
4 = 5.0000000
bash$
awk詳細用法點我
外部過濾器,程式和命令 複雜命令
find exec command 在每乙個find匹配到的檔案執行command命令.命令序列以 結束 是轉移以保證shell傳遞到find命令中的字元不會被解釋為其他的特殊字元 bash find name txt home liudezhi home liudezhi misc irmeyc....
wireshark捕獲過濾器和顯示過濾器
wireshark的捕獲過濾器是在裝置驅動級別提供抓包的過濾介面 表示式 目的埠 dst post 80 源埠 src port 80 協議 udp 設定網段 net 192.168.0.0 mask 255.255.255.0等價於net 192.168.0.0 24 埠範圍 portrange ...
自定義過濾器和全域性過濾器
過濾器中必須有返回值 一般使用花括號 插值,管道符前是要過濾的元素,管道符之後是過濾方法 p 過濾方法中有乙個引數,這個引數就是傳進來的要過濾的元素 過濾器 filters 使用過濾器時出現死迴圈 因為在將原陣列排序後賦值給原陣列,引用空間沒有變化,過濾一直在執行 解決辦法 使用擴充套件符將陣列賦值...