青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

興海北路

---男兒仗劍自橫行
<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

統(tǒng)計

  • 隨筆 - 85
  • 文章 - 0
  • 評論 - 17
  • 引用 - 0

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

收藏夾

全是知識啊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

shell編程范例之數(shù)值運算

by falcon<zhangjinw@gmail.com>
2007-10-30

前言:
   
    從這個帖子開始,打算結合自己平時的積累和進一步的實踐,通過一些范例來介紹shell編程。因為范例往往能夠給人以學有所用的感覺,而且給人以動手實踐 的機會,從而激發(fā)人的學習熱情。考慮到易讀性,這里的范例將非常簡單,但是實用,希望它們能夠成為你解決常規(guī)問題的參照物或者是“茶余飯后”的小點心,當 然這些“點心”肯定還有值得探討、優(yōu)化的地方。更復雜有趣的例子請參考《高級Bash腳本編程指南》(一本深入學習shell腳本藝術的書籍)。

    該計劃是上一篇帖子《在Linux下更高效的工作》的續(xù)。

    寫這些東西的

Quote:

    目的:1)享受用shell解決問題的樂趣 2)和朋友們一起交流和探討
    初步計劃:先零散地寫些東西,之后再不斷補充,最后整理成冊。
    適合讀者:已經熟悉linux基本知識,比如文件系統(tǒng)結構、常用命令行工具、shell編程基礎等。
    建議:大家在看這些范例的時候,參考網(wǎng)絡中流傳的《shell基礎十二篇》和《shell十三問》,見ChinaUnix Shell討論區(qū)
    環(huán)境:如果沒有特別說明,以后"shell編程范例"系列使用的shell將特指bash,版本在3.1.17以上。
    說明:本序列的組織不是依據(jù)Shell語法,而是面向某些潛在的操作對象和操作本身,它們反應了現(xiàn)實應用。當然,在這個過程當中肯定會涉及到Shell的語法。另外,歡迎您對帖子里頭存在的問題進行批評指正,也歡迎您對一些范例進行改進。


shell編程范例之數(shù)值運算

    這一篇打算討論一下shell編程中的基本數(shù)值運算,這類運算包括數(shù)值(包括整數(shù)和浮點數(shù))間的加減乘除冪求模等,產生指定范圍的隨機數(shù),產生指定范圍的數(shù)列等。
    貌似shell本身(shell本身是一個解釋程序,你可以在命令行打印SHELL變量找到當前的shell程序)只可以完成整數(shù)運算,一些復雜的運算可 以通過外部命令實現(xiàn),比如expr,bc,awk等。至于隨機數(shù),shell可以通過RANDOM環(huán)境變量產生一個從0到32767的隨機數(shù),一些外部工 具,比如awk可以通過rand()函數(shù)產生隨機數(shù)。而seq命令可以用來產生一個數(shù)列。
    下面分別進行介紹:

1、整數(shù)運算

1.1 概要示例:對某個數(shù)加一

Quote:

$ i=0;
$ ((i++))
$ echo $i
1
$ let i++
$ echo $i
2
$ expr $i + 1
3
$ echo $i
2
$ echo $i 1 | awk '{printf $1+$2}'
3



    說明:expr之后的$i,+,1之間有空格分開;awk后面的$1和$2分別指$i和1,即從左往右的第1個和第二個數(shù)。

用shell的內置命令查看各個命令的類型如下:
Quote:

$ type type
type is a shell builtin
$ type let
let is a shell builtin
$ type expr
expr is hashed (/usr/bin/expr)
$ type bc
bc is hashed (/usr/bin/bc)
$ type awk
awk is /usr/bin/awk



    從上面的演示可以看出:let是shell內置命令,其他幾個是外部命令,都在/usr/bin目錄下。而expr和bc因為我剛用過,已經加載在內存的hash表中。這個結果將有助于我們理解下面范例的結果。

補充:如果查看不同命令的幫助
    對于let和type等shell內置命令,可以通過shell的一個內置命令help來查看相關幫助,而一些外部命令可以通過shell的一個外部命令man來查看幫助,用法諸如help let,man expr等。

1.2 范例演示:從1加到某個數(shù)值。

代碼:


Code:

[Ctrl+A Select All]



說明:這里通過while [ 條件表達式 ]; do .... done循環(huán)來實現(xiàn)。-lt是小于號(<),具體見test命令的用法:man test。

如何執(zhí)行該腳本?

第一種辦法直接把腳本文件當成子shell(bash)的一個參數(shù)傳入。
Quote:

$ bash calc.sh
$ type bash
bash is hashed (/bin/bash)



第二種辦法是通過bash的內置命令.或source執(zhí)行。
Quote:

$ . ./calc.sh

$ source ./calc.sh
$ type .
. is a shell builtin
$ type source
source is a shell builtin



第三種辦法是修改文件為可執(zhí)行,直接在當前shell下執(zhí)行。
Quote:

$ chmod ./calc.sh
$ ./calc.sh



下面,逐一演示用其他方法計算變量加一,即把((i++))行替換成下面的某一個:
let i++;
i=$(expr $i + 1)
i=$(echo $i+1|bc)
i=$(echo "$i 1" | awk '{printf $1+$2;}')

比較計算時間如下:
Quote:

$ time calc.sh
10000

real    0m1.319s
user    0m1.056s
sys     0m0.036s
$ time calc_let.sh
10000

real    0m1.426s
user    0m1.176s
sys     0m0.032s
$  time calc_expr.sh
1000

real    0m27.425s
user    0m5.060s
sys     0m14.177s
$ time calc_bc.sh
1000

real    0m56.576s
user    0m9.353s
sys     0m24.618s
$ time ./calc_awk.sh
100

real    0m11.672s
user    0m2.604s
sys     0m2.660s



說明:time命令可以用來統(tǒng)計命令執(zhí)行時間,這部分時間包括總的運行時間,用戶空間執(zhí)行時間,內核空間執(zhí)行時間,它通過ptrace系統(tǒng)調用實現(xiàn)。

總 結:通過上面的比較,我們發(fā)現(xiàn)(())的運算效率最高。而let作為shell內置命令,效率也很高,但是expr,bc,awk的計算效率就比較低。所 以,在shell本身能夠完成相關工作的情況下,建議優(yōu)先使用shell本身提供的功能。但是shell本身好像無法完成浮點運算,所以就需要外部命令的 幫助。

補充:let,expr,bc都可以用來求模,運算符都是%,而let和bc可以用來求冪,運算符不一樣,前者是**,后者是^。例如:

Quote:

//求模
$ expr 5 % 2
1
$ let i=5%2
$ echo $i
1
$ echo 5 % 2 | bc
1
$ ((i=5%2))
$ echo $i
1
//求冪
$ let i=5**2
$ echo $i
25
$ ((i=5**2))
$ echo $i
25
$ echo "5^2" | bc
25



2. 浮點運算

let和expr都無法進行浮點運算,但是bc和awk可以。

2.1 概要示例:求1除以13,保留3位有效數(shù)字。

Quote:

$ echo "scale=3; 1/13"  | bc
.076
$ echo "1 13" | awk '{printf("%0.3f\n",$1/$2)}'
0.077



說明:bc在進行浮點運算的時候需要指定小數(shù)點位數(shù),否則默認為0,即進行浮點運算的時候,默認求出的結果只保留整數(shù)。而awk在控制小數(shù)位數(shù)的時候非常靈活,僅僅通過printf的格式控制就可以實現(xiàn)。

補充:在用bc進行運算的時候,如果不指定scale,而在bc后加上-l選項,也可以進行浮點運算,只不過這時的浮點運算的小數(shù)點默認是20位。例如:

Quote:

$ echo 1/13100 | bc -l
.00007633587786259541



2.2 范例演示:假如有這樣一組數(shù)據(jù),存放有某個村莊所有家庭的人數(shù)和月總收入,要求找出人均月收入最高的家庭。

在這里我隨機產生了一組數(shù)據(jù),文件名為income。
Quote:

1 3 4490
2 5 3896
3 4 3112
4 4 4716
5 4 4578
6 6 5399
7 3 5089
8 6 3029
9 4 6195
10 5 5145



說明:上面的三列數(shù)據(jù)分別是家庭編號、家庭人數(shù)、家庭月總收入。
分析:為了求出月均收入最高的家庭,我們需要對后面兩列數(shù)進行除法運算,即求出每個家庭的月均收入,然后按照月均收入排序,找出收入最高的家庭。
實現(xiàn):



Code:

[Ctrl+A Select All]



說明:
[ $# -lt 1 ]: 要求用戶至少收入一個參數(shù),$#是shell中傳入?yún)?shù)的個數(shù)
[ ! -f $1 ] : 要求用戶傳入的參數(shù)是一個文件,-f的用法見test命令,man test
income=$1:把用戶傳入的參數(shù)賦值給income變量,并在后面作為awk的參數(shù),即需要處理的文件
awk....:用文件中的第三列除以第二列,求出月均收入,考慮到精確性,保留了兩位有效數(shù)字。
sort -k 2 -n -r: 這里對結果的awk結果的第二列(-k 2),即月均收入進行排序,按照數(shù)字排序(-n),并按照遞減的順序排序(-r)。

演示:
Quote:

$ ./gettopfamily.sh income
7 1696.33
9 1548.75
1 1496.67
4 1179.00
5 1144.50
10 1029.00
6 899.83
2 779.20
3 778.00
8 504.83



補充:之前的income數(shù)據(jù)是隨機產生的。在做一些實驗時,往往需要隨機產生一些數(shù)據(jù),在下一小節(jié),我們將詳細介紹它。這里是產生income數(shù)據(jù)的腳本:



Code:

[Ctrl+A Select All]



說明:上述腳本中還用到seq命令產生從1到10的一列數(shù),這個命令的詳細用法在該篇最后一節(jié)也會進一步介紹。

3. 隨機數(shù)

環(huán)境變量RANDOM產生0到32767的隨機數(shù),而awk的rand函數(shù)可以產生0到1之間的隨機數(shù)。

3.1 概要示例:打印一個隨機數(shù)

Quote:

$ echo $RANDOM
81
$ echo "" | awk '{srand(); printf("%f", rand());}'
0.237788



說明:srand在無參數(shù)時,采用當前時間作為rand隨機數(shù)產生器的一個seed。

3.2 范例演示:隨機產生一個從0到255之間的數(shù)字

3.2.1 可以通過RANDOM變量的縮放和awk中rand的放大來實現(xiàn)。

Quote:

$ expr $RANDOM / 128
$ echo "" | awk '{srand(); printf("%d\n", rand()*255);}'



思考:如果要隨機產生某個IP段的IP地址,該如何做呢?

3.2.2 友善地獲取一個可用的IP地址

這個腳本我在蘭大開源社區(qū)的討論區(qū)發(fā)過,具體的分析過程見《貌似IP地址老被搶,寫個腳本自動換個可用的(非破壞性)

代碼:


Code:

[Ctrl+A Select All]



說明:如果網(wǎng)關地址不是1,那么用ifconfig配置地址時不能配置為網(wǎng)關地址,否則你的IP地址將和網(wǎng)關一樣,導致整個網(wǎng)絡出現(xiàn)問題。

4. 產生一序列數(shù)

其實我們通過一個循環(huán)就可以產生一序列數(shù),但是有相關的小工具為什么不用呢!seq就是這么一個小工具,它可以產生一序列數(shù),你可以指定數(shù)的遞增間隔,也可以指定相鄰兩個數(shù)之間的分割符。

4.1 概要示例:演示seq,打印一序列數(shù)

Quote:

$ seq 5
1
2
3
4
5
$ seq 1 5
1
2
3
4
5
$ seq 1 2 5
1
3
5
$ seq -s: 1 2 5
1:3:5
$ seq 1 2 14
1
3
5
7
9
11
13
$ seq -w 1 2 14
01
03
05
07
09
11
13
$ $ seq -s: -w 1 2 14
01:03:05:07:09:11:13



補充:在bash版本3中,在for循環(huán)的in后面,可以直接通過{1..5}更簡潔地產生自1到5的數(shù)字(注意,1和5之間只有兩個點),例如:
Quote:

$ for i in {1..5}; do echo -n "$i "; done
1 2 3 4 5

4.2 統(tǒng)計指定字符串(這里以單詞為例)的個數(shù)

這個靈感來自《高級Bash腳本編程指南》“混雜命令”seq的實例之“字母統(tǒng)計”和CU上一篇統(tǒng)計字母和數(shù)字個數(shù)的帖子。

4.2.1 首先,我們統(tǒng)計某個文件中所有單詞的個數(shù)。這里的單詞我定義為:由字母組成的單個或者多個字符序列。所以,可以這樣實現(xiàn)。

說明:為了方便演示,這里采用我的上一篇轉載的日志happiness quotations里頭的內容,請把內容復制下來保存為text文件。

Quote:

//統(tǒng)計每個單詞出現(xiàn)的次數(shù)
$ cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | uniq -c
//統(tǒng)計出出現(xiàn)頻率最高的前10個單詞
$ cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | uniq -c | sort -n -k 1 -r | head -10
     45 is
     40 to
     32 of
     31 a
     28 and
     27 the
     25 happiness
     19 happy
     18 it
     18 in



說明:
cat text: 顯示text文件里的內容
sed -e "s/[^a-zA-Z]/\n/g": 把非字母的字符全部替換成空格,這樣整個文本只剩下字母字符
grep -v ^$:去掉空行
sort: 排序
uniq -c:統(tǒng)計相同行的個數(shù),即每個單詞的個數(shù)
sort -n -k 1 -r:按照第一列(-k 1)的數(shù)字(-n)逆序(-r)排序
head -10:取出前十行

4.2.2 接著我們統(tǒng)計指定單詞的個數(shù),即輸入需要統(tǒng)計的單詞,并返回每個單詞的個數(shù)。

可以考慮采取兩種辦法:
第一種:只統(tǒng)計那些需要統(tǒng)計的單詞
第二種:用上面的算法把所有單詞的個數(shù)都統(tǒng)計出來,然后再返回那些需要統(tǒng)計的單詞給用戶

不過,這兩種辦法都可以通過下面的結構來實現(xiàn)。



Code:

[Ctrl+A Select All]



說明:
if 條件部分:要求用戶輸入至少兩個參數(shù),第一個是需要統(tǒng)計單詞的文件名,第二之后的所有參數(shù)是需要統(tǒng)計的單詞。
FILE=$1: 獲取文件名,即腳本之后的第一個字符串。
((WORDS_NUM=$#-1)):獲取單詞個數(shù),即總的參數(shù)個數(shù)($#)減去那個文件名參數(shù)(1個)
for 循環(huán)部分:首先通過seq產生需要統(tǒng)計的單詞個數(shù)序列,shift是shell內置變量(請通過help shift獲取幫助),它把用戶從命令行中傳入的參數(shù)依次往后移動位置,并把當前參數(shù)作為第一個參數(shù)即$1,這樣通過$1就可以遍歷用戶所有輸入的單詞 (仔細一想,這里貌似有數(shù)組下標的味道)。你可以考慮把shift之后的那句替換成echo $1測試shift的用法。

演示:
Quote:

$ chmod +x statistic_words.sh
$ ./statistic_words.sh text is Action happy
     45 is
      1 Action
     19 happy



采用第二種辦法,我們只需要修改shift之后的那句即可。


Code:

[Ctrl+A Select All]



演示:
Quote:

$ ./statistic_words.sh text is Action happy
     45 is
      1 Action
     19 happy



說明:很明顯,采用第一種辦法效率要高很多,因為第一種辦法提前找出了需要統(tǒng)計的單詞,然后再統(tǒng)計,而后者則不然。實際上,如果使用grep的-E選項,我們無須引入循環(huán),而用一條命令就可以搞定:

Quote:

$ cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | grep -E "^Action$|^is$" | uniq
-c
或者
$ cat text | sed -e "s/[^a-zA-Z]/\n/g" | grep -v ^$ | sort | egrep  "^Action$|^is$" | uniq
-c
[/code]
所以,可見這些命令sed,grep,uniq,sort是多么有用,它們本身雖然只完成簡單的功能,但是通過一定的組合,就可以實現(xiàn)你想要實現(xiàn)的功能啦。對了,統(tǒng)計單詞還有個非常有用的命令wc -w,需要用到的時候也可以用它。

補充:在《高級Bash腳本編程指南》一書中還提到jot命令和factor命令,由于我機器上沒有,所以沒有測試,factor命令可以產生某個數(shù)的所有素數(shù)。如:
[quote]
$ factor 100
100: 2 2 5 5



5. 總結

到這里,shell編程范例之數(shù)值計算就結束啦。該篇主要介紹了:

* shell編程中的整數(shù)運算、浮點運算、隨機數(shù)的產生、數(shù)列的產生
* shell的內置命令、外部命令的區(qū)別,以及如何查看他們的類型和幫助,關于內置命令和外部命令的比較,請參考:http://www.linuxpk.com/doc/abs/internal.html#READPIPEREF
* shell腳本的幾種執(zhí)行辦法
* 幾個常用的shell外部命令:sed,awk,grep,uniq,sort等
* 范例:數(shù)字遞增;求月均收入;自動獲取IP地址;統(tǒng)計單詞個數(shù)
* 其他:相關的用法,比如命令列表,條件測試等,在上述范例中都已經涉及,請認真閱讀之

如果您有時間,請溫習之。

6. 參考資料和推薦資料

[1] 高級Bash腳本編程指南
http://www.linuxpk.com/doc/abs/
[2] shell十三問
http://bbs.chinaunix.net/thread-218853-1-1.html
[3] shell基礎十二篇
http://bbs.chinaunix.net/thread-452942-1-1.html
[4] 在linux下學習和工作
http://oss.lzu.edu.cn/modules/newbb/viewtopic.php?topic_id=775&forum=6
[5] 在linux下更高效的工作
http://oss.lzu.edu.cn/modules/newbb/viewtopic.php?topic_id=1074&forum=6
[6] SED手冊
http://phi.sinica.edu.tw/aspac/reports/96/96005/
[7] AWK使用手冊
http://www.chinaunix.net/jh/7/16985.html
http://phi.sinica.edu.tw/aspac/reports/94/94011/
[8] 幾個shell討論區(qū)
蘭大開源社區(qū): http://oss.lzu.edu.cn/modules/newbb/viewforum.php?forum=26
LinuxSir.org: http://www.linuxsir.org/bbs/forumdisplay.php?f=60
ChinaUnix.net: http://bbs.chinaunix.net/forum-24-1.html

如果合適,建議直接找對應的英文原版閱讀!

后記:

[1] 大概花了3個多小時才寫完,目前是23:33,該回宿舍睡覺啦,明天起來修改錯別字和補充一些內容,朋友們晚安!
[2] 10月31號,修改部分措辭,增加一篇統(tǒng)計家庭月均收入的范例,添加總結和參考資料,并用附錄所有代碼。
[3] SHELL編程是一件非常有趣的事情,如果您想一想:上面計算家庭月均收入的例子,然后和用M$ Excel來做這個工作比較,你會發(fā)現(xiàn)前者是那么簡單和省事,而且給您以運用自如的感覺。



描述:shell_examples_calculate
附件: shell_examples_calculate.tar.gz (5 K)

再附一個簡單范例(問題見XBW linux&unix版)

問題:有這么兩個文件,第一列是坐標點,第二列是對應的值,要求把兩文件中相同坐標處的值求和,結果格式和原文件一致。

分析:這個問題如果用shell做,用awk最合適不過,當然,還用到sort進行排序預處理。

$ cat A
0.000000 -393.339844
1.000000 -403.556091
2.000000 -408.335876
3.000000 -391.387726
4.000000 -406.563660
5.000000 -413.982544
$ cat B
0.000000 -20.100649
1.000000   -9.304893
2.000000   -7.830594
3.000000 -29.411428
4.000000   -9.393303
5.000000 -23.742157
$ sort A B | awk 'BEGIN{oldpoint=-1;}{ if(oldpoint==$1){ printf("%f %f\n", $1, $2+oldvalue); } oldpoint=$1; oldvalue=$2; }'
0.000000 -413.440493
1.000000 -412.860984
2.000000 -416.166470
3.000000 -420.799154
4.000000 -415.956963
5.000000 -437.724701
關于余弦值轉角度

Quote:

//用bc -l計算,可以獲得高精度
$ export cos=0.996293; echo "scale=100; a(sqrt(1-$cos^2)/$cos)*180/(a(1)*4)" |bc -l
4.934954755411383632719834036931840605159706398655243875372764917732\
5495504159766011527078286004072131
//用awk
$ echo 0.996293 | awk '{ printf("%-10s %-10s", $1, atan2(sqrt(1-$1^2),$1)*180/3.1415926535);}'



把一個文件中第2列的所有余弦值轉換為角度

Quote:

$ cat data
2000     1         0
2005     0.996293     4.93515
2010     0.999609     1.60303
2015     0.98501     9.9332
2020     0.999488     1.83398
2025     0.999409     1.9702
2030     0.99943     1.93381
2035     0.999267     2.19348
2040     0.99679     4.59235
$ awk '{ printf("%-10s%-10s%-10s", $1, $2, $3); system("echo \"scale=10; a(sqrt(1-"$2"^2)/"$2")*180/3.1415926535\" | bc -l ");}' data
2000     1       0       0
2005     0.996293 4.93515   4.9349547602
2010     0.999609 1.60303   1.6022865295
2015     0.98501   9.9332   9.9330460660
2020     0.999488 1.83398   1.8335432105
2025     0.999409 1.9702   1.9699389820
2030     0.99943   1.93381   1.9346200645
2035     0.999267 2.19348   2.1938966333
2040     0.99679   4.59235   4.5920476729
$ awk '{ printf("%-10s%-10s%-10s %f\n", $1, $2, $3, atan2(sqrt(1-$2^2), $2)*180/3.1415926535)}' data
2000     1       0       0.000000
2005     0.996293 4.93515   4.934955
2010     0.999609 1.60303   1.602286
2015     0.98501   9.9332   9.933046
2020     0.999488 1.83398   1.833543
2025     0.999409 1.9702   1.969939
2030     0.99943   1.93381   1.934620
2035     0.999267 2.19348   2.193897
2040     0.99679   4.59235   4.592048



詳細解答過程請參考:

http://bbs.lzu.edu.cn/wForum/disparticle.php?boardName=LinuxUnix&ID=28597&pos=2

感興趣的朋友看看這些范例:
1. 《Shell 編程實例集錦》
http://www.lupaworld.com/35714/viewspace_21170.html

另外,通過這篇可以深入學習一下AWK的實際應用價值:
2. 巧用AWK處理二進制數(shù)據(jù)文件
http://www.ibm.com/developerworks/cn/linux/shell/awk/binary/

關于不同類型的數(shù)值常量(如八進制、16進制的表示等)的表示,請參考 《高級Bash腳本編程指南》http://www.linuxpk.com/doc/abs/numerical-constants.html#NUMBERS

東西總是學不完,大伙繼續(xù),這里是幾個好去處,一天看上幾篇,保證受益不少:

[1] linuxsir.org Shell版精華
http://www.linuxsir.org/bbs/forum60--1-desc-goodnees.html
[2] chinaunix.net Shell版綜合水平測試
http://bbs.chinaunix.net/thread-476260-27-1.html
[3] linuxsir.org Shell技巧交流區(qū)
http://www.linuxsir.org/bbs/thread173263.html
[4] linuxsir.org Shell腳本欣賞區(qū)
http://www.linuxsir.org/bbs/showthread.php?threadid=29701

用bc計算器計算“Unix高級編程”第一章課后系統(tǒng)最后兩個題目的計算過程:

Quote:

// 1.5 若日歷存放在帶符號的32位整數(shù)中,那么到哪一年它將溢出?
$ echo "(2^31)/(360*24*60*60)+1970-1" | bc
2038
// 1.6 若進程時間存放在帶符號的32位整數(shù)中,而且每秒為100滴答,那么經過多少天后,該時間值將會溢出。
$ echo "2^31/(100*24*60*60)" | bc
248



以上兩道題需要明白兩個概念:
第一就是Unix時間存放的是從1970年1月1日到現(xiàn)在的秒數(shù),第二格式進程時間存放的是進程運行到現(xiàn)在的滴答數(shù)。

如果有時間,這里頭的一些資料還是值得您仔細閱讀的:

"developerWorks 中國 | Shell、Shell 腳本編寫、命令行、相關工具及技巧"
http://www.ibm.com/developerworks/cn/linux/shell/index.html
需要補充的是,日期和時間是一個很好的隨機數(shù),它是一個在永恒變化的東西,所以,你無須擔心存在重復,它很適合用于生成一些臨時文件。具體用法見man date,常用的有date +%s

剛從http://www.linuxpk.com/doc/abs/special-chars.html看到有趣的一點,用(())加#還可以轉換進制。
例如:

Quote:

# echo "$(( 8#11 ))"
9



即1*8^0 + 1*8^1 = 9

關于間接變量的引用問題:

例如:

Quote:

$ a=b
$ b=c
$ echo $a
b
$ echo $b
c
$ eval echo \$$a
c
$ echo ${!a}
c



${!a}提供了一種非常方便的間接變量引用辦法,參考:
http://www.linuxpk.com/doc/abs/othertypesv.html

posted on 2008-03-14 15:48 隨意門 閱讀(5365) 評論(2)  編輯 收藏 引用

評論

# re: shell編程范例之數(shù)值運算 2008-03-19 15:03 隨意門

  回復  更多評論    

# re: shell編程范例之數(shù)值運算[未登錄] 2009-01-09 10:05 Chris

樓主寫得真的很好,像一份很好的教程。
  回復  更多評論    

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区四区五区精品视频| 亚洲美女网站| 欧美二区不卡| 国产精品99久久久久久有的能看 | 美女91精品| 美女国产一区| 夜夜嗨av一区二区三区四区| 一本色道婷婷久久欧美| 国产精品日韩欧美综合| 久久久久久高潮国产精品视| 久久亚洲综合| 99伊人成综合| 精品成人一区| 亚洲第一黄色网| 欧美成人亚洲| 午夜精品久久久| 久久激情综合网| 99国产一区| 亚洲欧美一区二区激情| 亚洲第一免费播放区| 亚洲人午夜精品免费| 国产精品你懂的在线| 麻豆精品在线播放| 欧美日韩一级片在线观看| 欧美一区三区二区在线观看| 久久成人精品视频| 亚洲精品一品区二品区三品区| 亚洲精品字幕| 国内精品久久久| 亚洲美女性视频| 好吊视频一区二区三区四区| 亚洲精品国产精品乱码不99按摩 | 欧美与欧洲交xxxx免费观看| 久久免费少妇高潮久久精品99| 一区二区三区四区国产精品| 欧美中文字幕第一页| 洋洋av久久久久久久一区| 欧美亚洲一区| 欧美福利在线| 国产精品视频你懂的| 欧美黄色aaaa| 国产日韩欧美在线播放不卡| 亚洲高清视频的网址| 国产精品一区二区三区免费观看| 欧美激情一区二区三级高清视频| 国产精品久久久亚洲一区| 欧美成人中文字幕在线| 国产精品免费网站在线观看| 欧美韩国在线| 国产亚洲欧美日韩一区二区| 日韩视频在线观看| 亚洲大胆美女视频| 亚洲欧美精品一区| 一区二区三区|亚洲午夜| 久久久久国产精品人| 亚洲欧美伊人| 欧美精品一区二区三| 久久久久五月天| 国产精品99免费看 | 狠狠入ady亚洲精品经典电影| 日韩视频永久免费观看| 亚洲高清不卡| 欧美一区二区成人| 亚洲一区三区电影在线观看| 欧美成人国产一区二区| 久久午夜电影| 国产精品一区久久久久| 亚洲久色影视| 亚洲人成在线观看| 久久久久久欧美| 久久精品国产亚洲a| 国产精品成人一区二区三区夜夜夜 | 欧美大片第1页| 国产在线播放一区二区三区| 一区二区三区欧美日韩| 最新日韩在线视频| 久久久之久亚州精品露出| 久久高清国产| 国产精品激情| 99精品久久免费看蜜臀剧情介绍| 91久久精品国产91性色| 久久久久高清| 久久久噜噜噜久久| 国产欧美亚洲视频| 亚洲一区二区免费视频| 亚洲一区在线播放| 久久偷看各类wc女厕嘘嘘偷窃| 久久久久网址| 久久综合激情| 激情小说亚洲一区| 久久精品99| 久久夜色精品| 精品动漫3d一区二区三区| 亚洲欧美一区二区三区久久| 午夜视频在线观看一区| 国产精品久久久久毛片大屁完整版 | 欧美激情视频免费观看| 欧美国产高潮xxxx1819| 亚洲高清在线精品| 开元免费观看欧美电视剧网站| 久久午夜视频| 今天的高清视频免费播放成人| 欧美在线免费播放| 久久视频在线看| 伊人色综合久久天天五月婷| 久久久久久九九九九| 开心色5月久久精品| 精品动漫av| 久久综合亚州| 亚洲福利免费| 日韩视频在线一区二区三区| 欧美激情成人在线| 亚洲美女视频在线观看| 亚洲在线一区二区三区| 国产精品美女久久久久久2018 | 在线视频亚洲一区| 欧美午夜免费电影| 亚洲午夜久久久久久久久电影院 | 久久综合九色综合欧美就去吻| 久久综合伊人77777麻豆| 伊人精品视频| 欧美电影电视剧在线观看| 亚洲精品一区二区三区四区高清 | 翔田千里一区二区| 国产欧美视频一区二区三区| 久久精品99久久香蕉国产色戒| 牛牛精品成人免费视频| 亚洲欧洲在线一区| 欧美日韩一区二区在线| 亚洲男同1069视频| 久久久久一区| 亚洲三级影片| 欧美亚洲不卡| 久久久久国内| 亚洲黄色高清| 亚洲欧美精品中文字幕在线| 国产一区二区高清| 美日韩精品免费观看视频| 亚洲精品视频一区| 欧美一区二区三区四区夜夜大片 | 亚洲一级特黄| 国产精品亚洲片夜色在线| 香蕉乱码成人久久天堂爱免费 | 欧美午夜宅男影院| 欧美怡红院视频| 欧美黄污视频| 亚洲视频播放| 国产一区二三区| 欧美成人午夜视频| 亚洲视频一区在线| 鲁大师成人一区二区三区| 亚洲乱码日产精品bd| 国产精品一区免费观看| 你懂的亚洲视频| 亚洲香蕉成视频在线观看 | 黄色成人免费观看| 欧美精品一区二区视频| 欧美一区二区三区日韩视频| 亚洲第一精品久久忘忧草社区| 99re亚洲国产精品| 国产日韩欧美中文| 欧美精品高清视频| 欧美一区二区性| 亚洲精品资源| 美女日韩欧美| 亚洲综合国产精品| 亚洲国产精品一区| 国产精品系列在线播放| 美乳少妇欧美精品| 亚洲欧美一区二区原创| 亚洲黄色视屏| 久久久久久久久久久成人| 99这里只有精品| 一区二区视频免费在线观看| 欧美视频在线一区二区三区| 久久久综合精品| 亚洲一区二区少妇| 亚洲第一主播视频| 久久精品免费电影| 中文国产亚洲喷潮| 亚洲电影免费在线 | 午夜久久黄色| 亚洲美女精品一区| 欧美成人精品三级在线观看| 午夜亚洲精品| 在线视频免费在线观看一区二区| 激情自拍一区| 国产精品亚洲综合色区韩国| 欧美国产精品v| 久久精品国产免费观看| 亚洲性色视频| 亚洲国产综合91精品麻豆| 久久夜色精品一区| 欧美一区二区大片| 国产精品99久久久久久白浆小说 | 国产精品久久久91| 欧美激情精品久久久久久黑人 | 国产精品国产自产拍高清av| 欧美精品www在线观看| 久久亚洲私人国产精品va|