Script Programming           Linux Power User 的利器                       陳信屹 (Hychen)               HackingCamp 2011, 大溪國小本...
Hychen●   現為 Canonical 軟體工程師    ●   Canonical 為 Ubuntu GNU/Linux 的主要商業贊助商●   曾為 Lazyscripts Project 開發人員    ●   架構設計 , 程式開...
開始之前 ...
Script   很難 ?   Power User 才會 ???
我也不是一開始就是           Linux               Power                            User 的 !Picture:http://www.flickr.com/photos/5552...
Script何時用 ?處理任何可以自動化的事時
少做多玩
Script是什麼 ?將許多指令彙整寫在一起,處理複雜的動作。
指令 ???    cp ls mv grep awk mkdir      rm top ps cat wc echo who bzr git apt-get apt-cache            apt-filecut wget tee...
指令      去買中餐     去繳信用卡帳單     買 LV 包包送我 回家後洗衣服 , 丟垃圾
托人買 iPAD2怎麼下指令 ??
I dont  care
幫我買白色的 ipad2 ( 單一指令 )如果沒有白色的 32G, 就買白色 64G, 否則就買黑色 32G ( 條件式指令 ) 在買到以前 , 每天都幫我去商店看有沒有現貨( 重複指令 )
函數 ?拖人買 iPad2 { 幫我買白色的 ipad2 ( 單一指令 )如果沒有白色的 32G, 就買白色 64G, 否則就買黑色 32G ( 條件式指令 )   在買到以前 , 每天都幫我去商店看有沒有現貨} ( 重複指令 )
變數 ?拖人買 A___ {    幫我買 A___ ( 單一指令 )     如果沒有 A___, 就買白色 64G, 否則就買黑色 32G    ( 條件式指令 )     在買到以前 , 每天都幫我去商店看有沒有現貨    ( 重複指令 )}
Script?指令 變數  迴圈函數 條件式
君有令 電腦不敢不從
rm -rf / NEVER DO THIS!
Terminal 是power User 的好朋友 !!
指令不會 問男人user@host$ man cmd
你好世界 First Example
GNU Bash   Bash is the shell, or command  language interpreter, that willappear in the GNU operating system.    Shell 也是一種...
PerlPython
編輯器有差嗎 ? 當然有差
好的編輯器帶你上天堂爛的編輯器帶你住套房     By c9s
Gedit 編輯器
VIM編輯器之神
VIM Hacks – c9shttp://www.slideshare.net/c9s/vim-hacks
Emacs     神之編輯器a.k.a 偽裝成編輯器的作業系統
./script.sh bash script.shsource script.sh
變數
字串
name=hychen   直接賦值
name=`whoami` 賦值指令結果
一個空格的慘劇rm /usr /share/application/example
$name ${name} 取得變數的值
數字
X=1直接賦值
$((1+1))數字運算
$((X+1))數字運算
陣列
X=(1 2 3) 允許數字字串混用   以空白隔開  Index 由 0 開始
X[0]=4設定第 1 個元素
X[1]=4   設定第 2 個元素[1] 的 1 可被替換成任意數字
${X[0]}取得第 1 個元素
${X[1]}   取得第 2 個元素[1] 的 1 可被替換成任意數字
X=(1 2 3) ${X[3]}   Wrong注意邊界問題 !
${VAR/str1}    ${VAR#}   ${VAR##}    ${VAR%}   ${VAR%%}${VAR/str1/str2}
輸入
$0 檔名./script 1 2 3 4   #!/bin/sh                   echo $0 # script
$N 第 N 個參數./script 1 2 A 4   #!/bin/sh                   echo $1 # 1                   echo $3 # A
$# 參數個數./script 1 2 A 4   #!/bin/sh                   echo $# # 4
$@ 所有參數                      字串./script 1 2 A 4   #!/bin/sh                   Echo $@ # 1 2 3 4
< 標準輸入導向./script < input_file.txt
輸出
| PIPE / 管線dpkg -l | grep vimdpkg -l | grep vim | grep tiny
> 標準輸出導向 ( 覆蓋 ) echo   Hello > test.txt   Hello echo   World > test.txt   World
>> 標準輸出導向 ( 添加 ) echo   Hello > test.txt    Hello echo   World >> test.txt Hello                          World
2> 錯誤輸出導向 SKIP: 有興趣的人自己研究
環境變數
$PATH $PWD $HOME 可執行指令位置   現在位置   家目錄
判斷符號
[ -z $HOME ]; echo $?  $? 程式執行結果狀態
[ -z $HOME ] && echo empty  $?! == 1 則執行第二個指令
[ -z $HOME ] || echo exist   $? != 0 則執行第二個指令
在 [] 內 每個元素都需要有空白鍵來分隔; 變數,最好都以雙引號括號起來;常數,最好都以單或雙引號括號起來。
條件式
If 判斷符號 ;then     codefi
If [ -z $HOME ];then     echo emptyfi
If 判斷符號 ;then     codeelse     codefi
If 判斷符號 ;then     codeelse     codefi
&&If [ -z $HOME ] [ 1 == 1 ];                ||then     echo emptyelse     echo existfi                      && - AND     ...
case $VAR in      第一個內容 )         code      ;;      第二個內容 )         code     ;;     *)         code     ;;esac
for var in $i;do      echo $vardone
for(( 初始值 ; 限制值 ; 執行步階 ))do    codedone
while 判斷符號do      codedone
until 判斷符號do      codedone
function 函數名 { echo $1 $ 2 $3}
Bash 的變數沒有 Scope
正規表示式
^.*w+d+$
^ 行頭
. 任意字元
* 多次符合( 包含 0 次 )
+ 多次符合( 至少一次 )
w 字串
d 數字
$ 行尾
很多地方都會用到
Sed , awk
POSIX,PERL, CREGEX
Thanks
Upcoming SlideShare
Loading in …5
×

Script Programming @HackingCamp 2011

1,375 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,375
On SlideShare
0
From Embeds
0
Number of Embeds
196
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Script Programming @HackingCamp 2011

  1. 1. Script Programming Linux Power User 的利器 陳信屹 (Hychen) HackingCamp 2011, 大溪國小本簡報採用 創用 CC 「姓名標示 - 非商業性」 3.0 台灣條款本簡報圖檔下載於網際網路者,特別聲明為自由軟體推廣演講中進行「合理使用」,請讀者不要任意移置他用。
  2. 2. Hychen● 現為 Canonical 軟體工程師 ● Canonical 為 Ubuntu GNU/Linux 的主要商業贊助商● 曾為 Lazyscripts Project 開發人員 ● 架構設計 , 程式開發● 大一開始接觸 Linux, Linux 使用經驗 9 年● http://about.me/hychen
  3. 3. 開始之前 ...
  4. 4. Script 很難 ? Power User 才會 ???
  5. 5. 我也不是一開始就是 Linux Power User 的 !Picture:http://www.flickr.com/photos/55524309@N05/5519745603/sizes/z/in/photostream/
  6. 6. Script何時用 ?處理任何可以自動化的事時
  7. 7. 少做多玩
  8. 8. Script是什麼 ?將許多指令彙整寫在一起,處理複雜的動作。
  9. 9. 指令 ??? cp ls mv grep awk mkdir rm top ps cat wc echo who bzr git apt-get apt-cache apt-filecut wget tee pstree dmesg lspci lsusb aticonfig reportbug gpg mount df du fdisk
  10. 10. 指令 去買中餐 去繳信用卡帳單 買 LV 包包送我 回家後洗衣服 , 丟垃圾
  11. 11. 托人買 iPAD2怎麼下指令 ??
  12. 12. I dont care
  13. 13. 幫我買白色的 ipad2 ( 單一指令 )如果沒有白色的 32G, 就買白色 64G, 否則就買黑色 32G ( 條件式指令 ) 在買到以前 , 每天都幫我去商店看有沒有現貨( 重複指令 )
  14. 14. 函數 ?拖人買 iPad2 { 幫我買白色的 ipad2 ( 單一指令 )如果沒有白色的 32G, 就買白色 64G, 否則就買黑色 32G ( 條件式指令 ) 在買到以前 , 每天都幫我去商店看有沒有現貨} ( 重複指令 )
  15. 15. 變數 ?拖人買 A___ { 幫我買 A___ ( 單一指令 ) 如果沒有 A___, 就買白色 64G, 否則就買黑色 32G ( 條件式指令 ) 在買到以前 , 每天都幫我去商店看有沒有現貨 ( 重複指令 )}
  16. 16. Script?指令 變數 迴圈函數 條件式
  17. 17. 君有令 電腦不敢不從
  18. 18. rm -rf / NEVER DO THIS!
  19. 19. Terminal 是power User 的好朋友 !!
  20. 20. 指令不會 問男人user@host$ man cmd
  21. 21. 你好世界 First Example
  22. 22. GNU Bash Bash is the shell, or command language interpreter, that willappear in the GNU operating system. Shell 也是一種使用者介面 , 只是沒圖形化介面那麼華麗罷了
  23. 23. PerlPython
  24. 24. 編輯器有差嗎 ? 當然有差
  25. 25. 好的編輯器帶你上天堂爛的編輯器帶你住套房 By c9s
  26. 26. Gedit 編輯器
  27. 27. VIM編輯器之神
  28. 28. VIM Hacks – c9shttp://www.slideshare.net/c9s/vim-hacks
  29. 29. Emacs 神之編輯器a.k.a 偽裝成編輯器的作業系統
  30. 30. ./script.sh bash script.shsource script.sh
  31. 31. 變數
  32. 32. 字串
  33. 33. name=hychen 直接賦值
  34. 34. name=`whoami` 賦值指令結果
  35. 35. 一個空格的慘劇rm /usr /share/application/example
  36. 36. $name ${name} 取得變數的值
  37. 37. 數字
  38. 38. X=1直接賦值
  39. 39. $((1+1))數字運算
  40. 40. $((X+1))數字運算
  41. 41. 陣列
  42. 42. X=(1 2 3) 允許數字字串混用 以空白隔開 Index 由 0 開始
  43. 43. X[0]=4設定第 1 個元素
  44. 44. X[1]=4 設定第 2 個元素[1] 的 1 可被替換成任意數字
  45. 45. ${X[0]}取得第 1 個元素
  46. 46. ${X[1]} 取得第 2 個元素[1] 的 1 可被替換成任意數字
  47. 47. X=(1 2 3) ${X[3]} Wrong注意邊界問題 !
  48. 48. ${VAR/str1} ${VAR#} ${VAR##} ${VAR%} ${VAR%%}${VAR/str1/str2}
  49. 49. 輸入
  50. 50. $0 檔名./script 1 2 3 4 #!/bin/sh echo $0 # script
  51. 51. $N 第 N 個參數./script 1 2 A 4 #!/bin/sh echo $1 # 1 echo $3 # A
  52. 52. $# 參數個數./script 1 2 A 4 #!/bin/sh echo $# # 4
  53. 53. $@ 所有參數 字串./script 1 2 A 4 #!/bin/sh Echo $@ # 1 2 3 4
  54. 54. < 標準輸入導向./script < input_file.txt
  55. 55. 輸出
  56. 56. | PIPE / 管線dpkg -l | grep vimdpkg -l | grep vim | grep tiny
  57. 57. > 標準輸出導向 ( 覆蓋 ) echo Hello > test.txt Hello echo World > test.txt World
  58. 58. >> 標準輸出導向 ( 添加 ) echo Hello > test.txt Hello echo World >> test.txt Hello World
  59. 59. 2> 錯誤輸出導向 SKIP: 有興趣的人自己研究
  60. 60. 環境變數
  61. 61. $PATH $PWD $HOME 可執行指令位置 現在位置 家目錄
  62. 62. 判斷符號
  63. 63. [ -z $HOME ]; echo $? $? 程式執行結果狀態
  64. 64. [ -z $HOME ] && echo empty $?! == 1 則執行第二個指令
  65. 65. [ -z $HOME ] || echo exist $? != 0 則執行第二個指令
  66. 66. 在 [] 內 每個元素都需要有空白鍵來分隔; 變數,最好都以雙引號括號起來;常數,最好都以單或雙引號括號起來。
  67. 67. 條件式
  68. 68. If 判斷符號 ;then codefi
  69. 69. If [ -z $HOME ];then echo emptyfi
  70. 70. If 判斷符號 ;then codeelse codefi
  71. 71. If 判斷符號 ;then codeelse codefi
  72. 72. &&If [ -z $HOME ] [ 1 == 1 ]; ||then echo emptyelse echo existfi && - AND || - OR
  73. 73. case $VAR in 第一個內容 ) code ;; 第二個內容 ) code ;; *) code ;;esac
  74. 74. for var in $i;do echo $vardone
  75. 75. for(( 初始值 ; 限制值 ; 執行步階 ))do codedone
  76. 76. while 判斷符號do codedone
  77. 77. until 判斷符號do codedone
  78. 78. function 函數名 { echo $1 $ 2 $3}
  79. 79. Bash 的變數沒有 Scope
  80. 80. 正規表示式
  81. 81. ^.*w+d+$
  82. 82. ^ 行頭
  83. 83. . 任意字元
  84. 84. * 多次符合( 包含 0 次 )
  85. 85. + 多次符合( 至少一次 )
  86. 86. w 字串
  87. 87. d 數字
  88. 88. $ 行尾
  89. 89. 很多地方都會用到
  90. 90. Sed , awk
  91. 91. POSIX,PERL, CREGEX
  92. 92. Thanks

×