SlideShare une entreprise Scribd logo
1  sur  40
Bash Script 介紹
Franklin
2014/06/24
何謂 Shell?
Shell
Core
User
Shell :程式核心與使用者溝通的介面
Shell 的例子
● PC-DOS, MS-DOS
●
Windows 下的 Cmd.exe
● Sh / csh / bash / zsh / …...
●
Shell 一定是指文字介面 ?嗎
– Gnome shell
/bin/sh : bash vs dash
●
Ubuntu /bin/sh 預設指向 dash
●
dash 比較輕量,比較有效率,但有些功能與參
數未實作
●
今天的討論以 bash 為主
Shell script 的 Shebang: #!
●
指示系統要呼叫 一個哪 shell interpreter
– #!/bin/sh
– #!/bin/bash
– #!/bin/python
– #!/usr/bin/env python
●
不是必要,但沒有的話 ...
– POSIX: the results are unspecified.
– 預設是找 /bin/sh 但不同系統不見得一樣
Hello World
#!/bin/bash
echo "Hello World!"
echo "Today is `date +%x`"
echo 'Another example is date +%x'
重點: echo, 雙引號 ", 單引號 ', 反單引號 `
雙引號:裡面的變數、應用程式等會被展開
單引號:忠實呈現原本內容
反單引號:執行裡面的程式並將結果帶入
變數定義與使用
#!/bin/bash
MONTH=`date +%m`
DATE=`date +%d`
echo " 今天是 $MONTH 月 $DATE 日。 "
echo " 今天是 ${MONTH} 月 ${DATE} 日。 "
重點:變數的使用
$MONTH 與 ${MONTH} 其實是一樣的,
但是後者可以避免誤判變數名稱。
字串變數
#!/bin/bash
STR="A B C D"
echo $STR
echo "$STR"
重點:引號的加入還有一個保護空白字元的作用。
Exercise 1
●
利用變數取得現在的時刻(時、分)並印出「現
在是 xx 點 xx 分」的訊息。
– 提示: man date 看看怎麼取得現在的時、分
– 運用字串變數
參考答案 1
#!/bin/bash
HOUR=`date +%H`
MIN=`date +%M`
echo " 現在是 ${HOUR} 點 ${MIN} 分。 "
測試條件: test
#!/bin/bash
DAY=`date +%d`
if [ ${DAY} -eq 5 ]; then
echo " 發薪水囉! "
elif [ ${DAY} -ge 28 ]; then
echo " 沒錢了 ..."
else
echo " 過日子。 "
fi
重點: test , 中括號 [ ], if,
elif, then, -eq, -ge
●
test 搭配 if, while 等使用
●
條件判斷式
●
注意 if 的語法,分號的位
置
●
字串變數判斷方式要留意,
容易造成錯誤
測試條件: test
●
常用的測試子
– ( ) : true, ! : not
– -a : and, -o : or
– 數 比較:值 -eq, -gt, -lt, -ge, -le, -ne
– 字串比較: =, !=
– 注意 = 與 -eq 的不同
– 字串判斷: -z, -n
– 常用 案判斷:檔 -b, -c, -d, -e, -f, -r, -w, -x
●
看一下男人吧! man test
迴圈: while, until
#!/bin/bash
i=0
while [ $i -lt 10 ]; do
echo "i=$i"
let i+=1
done
#!/bin/bash
i=0
until [ $i -eq 10 ]; do
echo "i=$i"
let i+=1
done
重點: while, until 語法
迴圈: for
#!/bin/bash
for FILENAME in /usr; do
echo "$FILENAME"
done
#!/bin/bash
for FILENAME in /usr/*; do
echo "$FILENAME"
done
重點: for 語法,還有元素內容
Exercise 2
●
找出 /usr/lib 中有幾個目錄、幾個執行 、幾個符號連結,還有檔
幾個其他的 案。檔
●
提示:
– man test
– 使用 for 迴圈
– 使用變數
– 使用 let 來增加變數值
參考答案 2
#!/bin/bash
DIR=0
SYMLINK=0
EXEC=0
OTHER=0
for FILE in /usr/lib/*; do
if [ -d $FILE ]; then
let DIR+=1
elif [ -x $FILE ]; then
let EXEC+=1
elif [ -L $FILE ]; then
let SYMLINK+=1
else
let OTHER+=1
fi
done
echo "Dir:$DIR, Exec:
$EXEC, SYMLINK:
$SYMLINK, OTHER:$OTHER"
Bash Script 參數處理
#!/bin/bash
echo "0=$0, 1=$1, 2=$2"
if [ $1 = "Good" ]; then
echo "Thanks."
else
echo "Oops..."
fi
重點: $0, $1, $2
$0: 程式名稱
$1: 第一個參數
執行: ./test.sh Good ya
如果只輸入 ./test.sh ?呢
Bash Script 參數處理(修正)
#!/bin/bash
echo "0=$0, 1=$1, 2=$2"
if [ "$1" = "Good" ]; then
echo "Thanks."
else
echo "Oops..."
fi
重點:字串判斷時需要
留意空字串的問題。 Bash
沒有聰明到瞭解你的 $1
可能是空字串,會直接給你
一個 parsing error
Bash Script 參數處理(修正 2 )
#!/bin/bash
echo "0=$0, 1=$1, 2=$2"
if [ -z "$1" ]; then
echo "No parameters."
elif [ "$1" = "Good" ]; then
echo "Thanks."
else
echo "Oops..."
fi
重點:判斷空字串的方式
Bash Script 的輸出入處理
#!/bin/bash
ls -lR /usr > /tmp/usr.list 2>&1
RET=$?
if [ $RET -ne 0 ]; then
echo "ls failed."
fi
重點: >, >&, $?
$?: 前一次執行
的傳回值
導向符號
●
> : 將標準輸出 (stdout) 導到 案去(覆寫)檔
– ls -lR /usr > /tmp/file.list
●
>> : 將標準輸出導到 案去(附加)檔
– ls -lR /var >> /tmp/file.list
●
>& : 一樣是導向,但導向目的是另一個 fd
– ls -lR /home >> /tmp/file.list 2>&1
– fd: 0 – stdin, 1 – stdout, 2 – stderr
●
| : pipe,將前面程式執行結果的輸出導入另一個程式的輸入
– ls -l / | grep home
– 很常跟其他工具合用,如 sed, awk, grep
Exercise 3
●
用 wget 抓取以下 案,並判斷是否成功。檔
– ftp://goodhorse.idv.tw/tetris.sh
●
提示:
– wget, $?
– man wget
參考答案 3
#!/bin/bash
wget ftp://goodhorse.idv.tw/tetris.sh
RET=$?
if [ $RET -ne 0 ]; then
echo "wget failed."
fi
Bash Script 的函式
#!/bin/bash
printValue()
{
if [ -z "$1" ]; then
echo "Empty value"
else
echo "parameter=$1"
fi
}
printValue
i=0
until [ $i -eq 10 ]; do
printValue $i
let i+=1
done
重點:函式宣告與應用
●
直接定義
●
參數不必寫在定義,在函式內
直接使用 $1, $2 來存取
載入其他 案內容:檔 Source
●
可以將設定單獨拉出來,較容易維護。
●
source 的 alias: .
– . /etc/default/locale
再談談變數
#!/bin/bash
declare -i NUM
NUM=4*2
echo $NUM
重點: declare
雖然 bash 中的變數,根據官方說法
是沒有型態的,但還是可以透過
declare 將變數宣告成特定的型態。
-i: 整數, -a | -A : 陣列, -f : 函
式, … 等等。
用 +i 則將變數的整數型態取消(恢
復成字串)。
與使用者互動
#!/bin/bash
echo -n " 請輸入姓名: "
read NAME
echo "Hello, $NAME."
重點:用 read 讀取鍵盤輸入,並傳遞到變數。
注意 read 後面放的是變數名稱( NAME )而非參考( $NAME )
與 Shell Script 搭配的常用工具
● grep
● sed
● awk
● zenity / kdialog
grep
●
從輸出中找出符合正規表示式的行
– ps axw | grep ba.h
– dmesg | grep eth0
●
搭配 -r 可以遞迴搜尋 案中的文字檔
– grep -r bash *
●
-v: 反向(濾掉文字)
awk
●
字串處理工具,可以將輸入的行分欄位印出。
– ps axw | awk ' { print $1 " " $5 }; '
●
也可以加入一些簡單的判斷式。
– ps axw | awk ' { if ($1 >= 4000 && $1 <=
5000) {print $1 " " $5} } '
sed
●
Stream editor ,可以透過正規表示式過濾並轉換
字串。
– uname -a | sed 's/Linux/ezgo/g'
●
它也可以直接替換 案的內容。檔
– sed -ri 
's/tw.archive.ubuntu.com/free.nchc.org.tw/' 
/etc/apt/sources.list
zenity / kdialog
●
產生一個簡單的視窗,提供資訊 / 詢問動作 / 進度條 / 顯示警告、
錯誤 ...
● zenity : based on GTK+, kdialog: based on QT
#!/bin/bash
zenity --info --text "Bash script 課程即將完成。 "
kdialog --yesno " 請問還滿意 ?嗎 "
zenity --question 與 kdialog --yesno 等,對不同答案的傳回 會不同。值
可以使用 $? 來取得答案。
Exercise 4
●
取出主機上目前所有的 IP address
●
提示:
– ip addr
– grep inet
– awk
參考答案 4
#!/bin/sh
ip addr | grep inet | awk ' { print $2; }'
其他應用
● switch case
● alias
● array
● …...
總結
●
Bash script 本身的語法不多,但跟工具組合起來
之後就變化多端。
●
一些進階的語法、用法不用強記,需要用的時候
可以去 。查
●
瞭解更多工具的用法,讓 script 更強大。
實用範例 1: 每日備份
●
使用變數紀錄日期、時間,並決定 名檔
●
執行壓縮
#!/bin/bash
FILENAME=/opt/backup/ezgo_`date +%m%d`.tar.gz
tar cfpvz ${FILENAME} /home/ezgo
實用範例 2: 檢 硬 空間查 碟
●
結合 df, grep, tr, awk 等工具
– df | grep -v ' 案系統檔 ' | tr -d '%' |
awk ' { if ( $5 >= 80) { print $1 " "
$5 " " $6 }} '
實用範例 3: 檢查 ppp0 是否存在
#!/bin/bash
CHECK=`/sbin/ifconfig ppp0 | grep "inet
addr"`
if [ -z "${CHECK}" ]; then
/etc/init.d/network-manager restart
fi
另一個檢 空字串的做法:查
if [ "${CHECK}z" = "z" ]; then
點歌時間
●
大家一起來做做看!

Contenu connexe

Tendances

Shell奇技淫巧
Shell奇技淫巧Shell奇技淫巧
Shell奇技淫巧David Xie
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)wang hongjiang
 
2, bash synax simplified
2, bash synax simplified2, bash synax simplified
2, bash synax simplifiedted-xu
 
OpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part IOpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part IHung-yu Lin
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)wang hongjiang
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniterBo-Yi Wu
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用琛琳 饶
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practicelitaocheng
 
Python xmlrpc-odoo
Python xmlrpc-odooPython xmlrpc-odoo
Python xmlrpc-odoorobin yang
 
Linux command tutorial
Linux command tutorialLinux command tutorial
Linux command tutorial朋 陈
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1imacat .
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
BASH 漏洞深入探討
BASH 漏洞深入探討BASH 漏洞深入探討
BASH 漏洞深入探討Tim Hsu
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出wang hongjiang
 
Python 入门
Python 入门Python 入门
Python 入门kuco945
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Marc Huang
 
GNU Autoconf / Automake #4
GNU Autoconf / Automake #4GNU Autoconf / Automake #4
GNU Autoconf / Automake #4imacat .
 
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)OpenFoundry
 

Tendances (20)

Shell奇技淫巧
Shell奇技淫巧Shell奇技淫巧
Shell奇技淫巧
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)
 
2, bash synax simplified
2, bash synax simplified2, bash synax simplified
2, bash synax simplified
 
OpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part IOpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part I
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniter
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
Python xmlrpc-odoo
Python xmlrpc-odooPython xmlrpc-odoo
Python xmlrpc-odoo
 
Linux command tutorial
Linux command tutorialLinux command tutorial
Linux command tutorial
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
BASH 漏洞深入探討
BASH 漏洞深入探討BASH 漏洞深入探討
BASH 漏洞深入探討
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 
Python 入门
Python 入门Python 入门
Python 入门
 
Gnu
GnuGnu
Gnu
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)
 
GNU Autoconf / Automake #4
GNU Autoconf / Automake #4GNU Autoconf / Automake #4
GNU Autoconf / Automake #4
 
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
 

En vedette

COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?Lloyd Huang
 
intro unix/linux 02
intro unix/linux 02intro unix/linux 02
intro unix/linux 02duquoi
 
Quick start bash script
Quick start   bash scriptQuick start   bash script
Quick start bash scriptSimon Su
 
BASH Guide Summary
BASH Guide SummaryBASH Guide Summary
BASH Guide SummaryOhgyun Ahn
 

En vedette (7)

Informix health check - Brochure
Informix health check - BrochureInformix health check - Brochure
Informix health check - Brochure
 
COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?COSCUP2012: How to write a bash script like the python?
COSCUP2012: How to write a bash script like the python?
 
Bash script
Bash script Bash script
Bash script
 
intro unix/linux 02
intro unix/linux 02intro unix/linux 02
intro unix/linux 02
 
Quick start bash script
Quick start   bash scriptQuick start   bash script
Quick start bash script
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
BASH Guide Summary
BASH Guide SummaryBASH Guide Summary
BASH Guide Summary
 

Similaire à 新北市教師工作坊 -- Bash script programming 介紹

Shell(bash) Scripting
Shell(bash) ScriptingShell(bash) Scripting
Shell(bash) ScriptingRobby Lee
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhouWill Zhou
 
1, shell intro
1, shell intro1, shell intro
1, shell introted-xu
 
Vim hacks
Vim hacksVim hacks
Vim hacksXuYj
 
makefile20141121
makefile20141121makefile20141121
makefile20141121Kevin Wu
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
Linux常用命令
Linux常用命令Linux常用命令
Linux常用命令Tony Deng
 
網路組-Ubuntu介紹
網路組-Ubuntu介紹網路組-Ubuntu介紹
網路組-Ubuntu介紹maryqute520
 
sed -- A programmer's perspective
sed -- A programmer's perspectivesed -- A programmer's perspective
sed -- A programmer's perspectiveLi Ding
 
linux 從無到有
linux 從無到有linux 從無到有
linux 從無到有alex867
 
Diff and Patch command Manual
Diff and Patch command ManualDiff and Patch command Manual
Diff and Patch command Manualtag taglife
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程kidmany2001
 
Php More
Php MorePhp More
Php Morehenbo
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacMarsZ Chen
 
Linux常用命令与工具简介
Linux常用命令与工具简介Linux常用命令与工具简介
Linux常用命令与工具简介weihe
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 

Similaire à 新北市教師工作坊 -- Bash script programming 介紹 (20)

Golang
GolangGolang
Golang
 
Shell(bash) Scripting
Shell(bash) ScriptingShell(bash) Scripting
Shell(bash) Scripting
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
 
Vim hacks
Vim hacksVim hacks
Vim hacks
 
makefile20141121
makefile20141121makefile20141121
makefile20141121
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
Linux常用命令
Linux常用命令Linux常用命令
Linux常用命令
 
網路組-Ubuntu介紹
網路組-Ubuntu介紹網路組-Ubuntu介紹
網路組-Ubuntu介紹
 
sed -- A programmer's perspective
sed -- A programmer's perspectivesed -- A programmer's perspective
sed -- A programmer's perspective
 
linux 從無到有
linux 從無到有linux 從無到有
linux 從無到有
 
Diff and Patch command Manual
Diff and Patch command ManualDiff and Patch command Manual
Diff and Patch command Manual
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程
 
Php More
Php MorePhp More
Php More
 
Php
PhpPhp
Php
 
gnutool
gnutoolgnutool
gnutool
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
Linux常用命令与工具简介
Linux常用命令与工具简介Linux常用命令与工具简介
Linux常用命令与工具简介
 
Make talk-cn
Make talk-cnMake talk-cn
Make talk-cn
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 

Plus de fweng322

LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in TaiwanLibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwanfweng322
 
LibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About MacrosLibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About Macrosfweng322
 
Migrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in TaiwanMigrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in Taiwanfweng322
 
自由軟體的國際化與在地化
自由軟體的國際化與在地化自由軟體的國際化與在地化
自由軟體的國際化與在地化fweng322
 
台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學fweng322
 
台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式fweng322
 
文件自由日
文件自由日文件自由日
文件自由日fweng322
 
自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享fweng322
 
那些年,我學到的程式設計教育
那些年,我學到的程式設計教育那些年,我學到的程式設計教育
那些年,我學到的程式設計教育fweng322
 
成大資工自由軟體開發與社群發展課程
成大資工自由軟體開發與社群發展課程成大資工自由軟體開發與社群發展課程
成大資工自由軟體開發與社群發展課程fweng322
 
世界,程式教育的現在進行式
世界,程式教育的現在進行式世界,程式教育的現在進行式
世界,程式教育的現在進行式fweng322
 
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in TaiwanLibreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwanfweng322
 
軟體自由*自由軟體
軟體自由*自由軟體軟體自由*自由軟體
軟體自由*自由軟體fweng322
 
數位路平
數位路平數位路平
數位路平fweng322
 
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015fweng322
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815fweng322
 
TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發fweng322
 

Plus de fweng322 (17)

LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in TaiwanLibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
 
LibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About MacrosLibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About Macros
 
Migrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in TaiwanMigrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in Taiwan
 
自由軟體的國際化與在地化
自由軟體的國際化與在地化自由軟體的國際化與在地化
自由軟體的國際化與在地化
 
台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學
 
台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式
 
文件自由日
文件自由日文件自由日
文件自由日
 
自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享
 
那些年,我學到的程式設計教育
那些年,我學到的程式設計教育那些年,我學到的程式設計教育
那些年,我學到的程式設計教育
 
成大資工自由軟體開發與社群發展課程
成大資工自由軟體開發與社群發展課程成大資工自由軟體開發與社群發展課程
成大資工自由軟體開發與社群發展課程
 
世界,程式教育的現在進行式
世界,程式教育的現在進行式世界,程式教育的現在進行式
世界,程式教育的現在進行式
 
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in TaiwanLibreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
 
軟體自由*自由軟體
軟體自由*自由軟體軟體自由*自由軟體
軟體自由*自由軟體
 
數位路平
數位路平數位路平
數位路平
 
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815
 
TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發
 

新北市教師工作坊 -- Bash script programming 介紹