顯示具有 08.Linux程式設計 標籤的文章。 顯示所有文章
顯示具有 08.Linux程式設計 標籤的文章。 顯示所有文章

2008年5月28日 星期三

Linux Programming (2) Wrapper

上課的內容:如何在上班時偷看股票~~~

1.先去找你要的網頁資料,並透過lynx 去抓股票:2475 下來存到aaa.txt

[root@SI502U30 Class]# lynx -dump http://tw.stock.yahoo.com/q/q?s=2475 > aaa.txt

2.人工搜尋你要的資料。例如我想要的股票資料為 [19] 和 [20] 那兩行中間(請自行打開aaa.txt文件檔)

[18]2475M
[19][X
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
[20]N@[21]sD
@[22]wX
xU (_) R (_) _____ i [BUTTON] [23]s

3.所以利用grep和cut去搜尋[19] 和 [20] 在檔案的那一行?
如例子上所列為 aaa.txt的 20行 和 22行

cut -d: -f1 表示 以 ":" 作分隔 ,並取 f1 (第一欄)
所以得到的 19\] 位於檔案的20行 ; 20\] 位於檔案的22行 ;

[root@SI502U30 Class]# grep -n 19\] aaa.txt |cut -d: -f1
20
[root@SI502U30 Class]# grep -n 20\] aaa.txt |cut -d: -f1
22

4.利用head 和 tail 將資料擷取出來 所以得到的資料
head -21 表示將檔案的第一行到第21行保留,第22行以下刪除
tail -1 表示將檔案的最底下數來第1行以下保留,倒數第2行以上刪除

[root@SI502U30 Class]# head -21 aaa.txt > temp.txt
[root@SI502U30 Class]# tail -1 temp.txt > temp2.txt
[root@SI502U30 Class]# cat temp2.txt
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55

5.在利用cut把剩下精簡的資料作分欄
# cut -d" " -f9 temp2.txt 以空格當分隔 所以9.55為第九個分隔 14:30 為第6個分隔

[root@SI502U30 Class]# cat temp2.txt
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
[root@SI502U30 Class]# cut -d" " -f9 temp2.txt
9.55

6. 將上述所學的指令串成一個shell script (stock.sh)

如此就可以將每日的股票資料和你所想要觀察的資料當漏下來寄給自己。
如果公司有擋網頁的話就可以在上班的時候利用電子郵件看股票。


#(stock.sh)

i=2601
lynx -dump http://tw.stock.yahoo.com/s/s/kimo_day${i}.html >${i}.txt

begin_line=`grep -n 19\] ${i}.txt|cut -d: -f1`
echo "begin_line= $begin_line"

end_line=`grep -n 21\] ${i}.txt|cut -d: -f1`
echo "end_line= $end_line"

cut_line=$(( (end_line + begin_line)/2 ))
echo "cut_line= $cut_line"

head -${cut_line} ${i}.txt > tmp.txt
tail -1 tmp.txt > tmp2.txt

echo
echo time:`cut -d' ' -f4 tmp2.txt`
echo price:`cut -d' ' -f5 tmp2.txt`

exit
rm tmp.txt
rm tmp2.txt
rm ${i}.txt

2008年5月27日 星期二

Linux Programming (1) Shell

  1. Shell is a piece of software that provides an interface for users.
  2. Executable File VS. Built-in Commands
  3. #echo $SHELL //顯示目前使用中的SHELL
  4. #chsh -s /bin/tcsh //改變SHELL
  5. A shell script will be writen by a text editor.
  6. Begin with " #!/bin/bash ".
  7. " # " 註解!! 只能寫在每一行的 head
  8. echo -n " my name is " // " -n "means that don't the newline
    whoami
  9. 執行 shell script 可以增加權限以後就不需加 sh 去執行
    #chmod +x hello.sh 或是 #chmod hello.sh 777
    #hello.sh (就可以直接執行)
  10. 若是不行,需要增加執行目錄=>編輯 .bash_pprofile 加入 PATH= . : $PATH
  11. Shell變數 (1) 預定變數(Predefined variables) local variable (2) 環境變數(Environment variables) Global variable , ex: PATH、HOME
  12. 設定變數,a=3,等號前後不能有空格。
  13. #longpath=/usr/home/ee/99/kph
    #cd $longpath (使用$符號取得設定的變數)
  14. set 可以查看所有已設定的變數
    #set grep longpath
  15. unset varName 移除設定的變數
  16. 變數輸出 echo 相當於printf() ; 變數輸入 read 相當於 scanf() ;
    #echo test (直接顯示"test")
    #echo $test (顯示 test變數內容)
    #read test (讀進來的取名test)
  17. 宣告環境變數:
    export變數名稱=內容 =>Global變數
    變數名稱=內容=>Local變數
    查看 set (宣告local) #set test=abc (宣告global) #export test=abc
    移除 unset (宣告local) #unset test (宣告global) #export -n test
  18. 引號:單引號:(" ' " ,所夾的所有內容保持不變)
    #echo 'pig cat $dog'
    #pig cat $dog (裡面所有符號皆無效)
  19. 引號:雙引號:(" " " ,所夾的內容保持不變)
    有三種例外(1)變數 $var ($ 跳脫字元) (2)反斜線 \ (3)反單引號:`
    (1)變數 $var ($ 跳脫字元)
    #color=blue
    #echo $color ==>#blue
    #echo '$color' ==>#$color
    #echo "$color" ==>#blue
    (2)反斜線 \ (其後的字元的特殊意義會被取消)
    #num=10
    #echo "#num" ===>#10
    #echo "\$num" ===>#$num
    #echo "\"$num\"" ===>#"10"
    (3)反單引號:` (不同於單引號 ' ,所夾內容會先執行)
    #echo "Your....is `pwd`"
    #Your....is /home/jhhsu
  20. ..
  21. .待續.......

2008年5月14日 星期三

兩本中文書

老師介紹兩本書中文書 比歐萊禮的書簡單一點。
因為寫到Linux程式設計的工程師,基本上要看得懂英文書籍,所以很少中文書。


嵌入式Linux程式設計/王進德編著
http://www.opentech.com.tw/search/bookinfo.asp?isbn=9572154974



linux 系統程式 實例設計

http://www.flag.com.tw/book/bookinfo.asp?bokno=F8720


2008年5月10日 星期六

歐萊里 Linux系統程式設計

上課用書:

Linux System Programming
書名:Linux 系統程式設計
作者:Robert Love
編譯:蔣大偉
書號:A229
ISBN:978-986-6840-18-0
頁數:416頁
出版日期:2008年03月
售價:780

幾乎所有的程式設計者都不得不面對,執行程式之作業系統的系統呼叫以及程式庫。本書將探討如何為 Linux 撰寫系統軟體--位於低層級的程式碼,可以直接跟核心及基礎系統程式庫互動。本書會告訴你,使用標準介面(包括進階的 Linux 介面)時,如何權衡功能與性能。

本書還會告訴你,如何寫出更聰明、更快的程式碼。本書的作者是著名的核心駭客 Robert Love,他不僅會告訴你,系統介面應該如何運作,而且還會說明其實際的運作狀況,以及如何安全並有效地使用它們。本書所提到的訣竅,可協助你在任何層級 之上,都能撰寫出較佳的程式碼。

本書的內容包括:

  • 檔案的讀寫操作,以及檔案的其他 I/O 操作,包括 Linux 核心如何實作和管理檔案 I/O 、記憶體對映以及優化技術
  • 行程管理(包括即時行程)的系統呼叫
  • 檔案和目錄--建立、移動、複製、刪除以及管理
  • 記憶體管理--配置記憶體、管理記憶體以及優化記憶體存取的介面
  • 信號以及其在 Unix 系統上所扮演的角色,在加上基本和進階的信號介面
  • 時間、休眠以及時鐘管理,從基本的知識談起,涵蓋 POSIX 時鐘以及高解析度計時器

本書將從理論和應用的角度出發,帶著你深入探討 Linux,讓你能夠以最有效的方式來使用自己的系統。

Robert Love 是一位資深的 Linux 使用者和駭客。他積極--並且熱心--參與 Linux 核心以及 GNOME desktop 社群的各項計畫。他近來對 Linux 核心的貢獻包括 kernel event layer 與 inotify 子系統。GNOME 方面的貢獻包括 Beagle、GNOME Volume Manager、NetworkManager 以及 Project Utopia。目前,Robert 在 Google 的 Open Source Program Office 工作。

Linux 系統程式設計
勘誤表

更正日期:2008年03月06日

第一段,倒數第2行:

原為:不管系統程式設計是否為程式設計者的生活目標,...
改為:不管系統程式設計是否為程式設計者的生活目標,...

小標《1.3.1 POSIX 和 SUS的沿革》中,第二段,第3行:

原為:可選用的即時和執行支援被分別定義在...
改為:可選用的即時和執行支援被分別定義在...

資料來源:O'REILLY TAIWAN