How to write a bash script like the python?                Lloyd Huang       KaLUG - Kaohsiung Linux User Group           ...
Before the startBefore the start • About Bash Python and me. • The ipython and lpython.py. • A trick, but it touches my he...
Bash: Questions and answersBash: Questions and answers   Q: How to be more logic and reuse?   A: Function.   Q: How to do ...
Bash source VS Python importBash source VS Python importPython • A module allows you to logically organize your Python    ...
Bash source VS Python importHow Bash do it?                                  5
Bash source VS Python import#!/bin/bash              | #!/usr/bin/pythonfuntest() {              | def funtest():    echo ...
Bash source VS Python import#!/bin/bash                |   #!/usr/bin/pythonfuntest() {                |   def funtest(): ...
Bash source VS Python import#!/bin/bashfuntest() {    echo "func for test"}funfake() {    echo "func for fake"}if [ "$0" =...
From xkcd http://xkcd.com/353/
Python module and docstringPython module and docstring    • import, from    • import module as someone       – Import modu...
Python module and docstring#!/usr/bin/pythondef funtest():    """    Here is python docstring for funtest.    Here is pyth...
Python module and docstring$> python>>> import samp02>>> samp02.samp02.__doc__( samp02.funtest( samp02.funfake(>>> samp02....
Python module and docstring>>> samp02.funfake.__doc__Here is python docstring for funcfake.>>> print samp02.funfake.__doc_...
Bash import and docstring ?Bash import and docstring ?Usage: source import.sh    • import, from    • import module as some...
Bash import and docstring ?#!/bin/bashfuntest() {    __doc__="Here is bash import.sh docstring for funtestHere is bash imp...
Bash import and docstring ?$> source import.sh$> import samp02.sh$> samp02samp02.funfake samp02.funtest$> samp02.funtestfu...
uid, gid = split(``1000:100,``:) ?uid, gid = split(``1000:100,``:) ?Python : split    name, passwd, uid, gid, note, homedi...
阿宅圖片來源:公立怪咖國民小學 http://blog.xuite.net/protion/school/9142122
HookHook   #!/bin/bash   funtest() {       __doc__=Hook test - Part I   PreHook=echo This is PreHook   PostHook=echo This ...
Hook$ import hook00.sh$ hook00.funtestfunc for test$ help hook00.funtestHook test - Part IPreHook=echo This is PreHookPost...
Hook#!/bin/bashfuntestPreHook () {    return}funtestPostHook () {    return}funtest() {    __doc__=Hook test - Part IIfunt...
Hook$ import hook01.sh$ hook01.funtestfunc for test$ help hook01.funtestHook test - Part IIhook01.funtestPreHook () { echo...
DemoDemo         23
Advantages VS ProblemsAdvantages VS Problems    • Advantages      – Function reuse      – Unit testing      – Name space  ...
Upcoming SlideShare
Loading in …5
×

COSCUP2012: How to write a bash script like the python?

4,462 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,462
On SlideShare
0
From Embeds
0
Number of Embeds
2,768
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

COSCUP2012: How to write a bash script like the python?

  1. 1. How to write a bash script like the python? Lloyd Huang KaLUG - Kaohsiung Linux User Group COSCUP Aug 18 2012
  2. 2. Before the startBefore the start • About Bash Python and me. • The ipython and lpython.py. • A trick, but it touches my heart. Examples of lpython.py : cat /etc/passwd | lpython.py for i in stdin:n s=i.split(":"); print s[0],s[5],s[6], uname -a | lpython.py print stdin.read().split()[0:3] 2
  3. 3. Bash: Questions and answersBash: Questions and answers Q: How to be more logic and reuse? A: Function. Q: How to do unit testing? A: Function. Q: How different is between Bash function and Python module? A: .... 3
  4. 4. Bash source VS Python importBash source VS Python importPython • A module allows you to logically organize your Python code. Grouping related code into a module makes the code easier to understand and use. • Python modules are easy to create; theyre just files of Python program code. • if __name__ == __main__: 4
  5. 5. Bash source VS Python importHow Bash do it? 5
  6. 6. Bash source VS Python import#!/bin/bash | #!/usr/bin/pythonfuntest() { | def funtest(): echo "func for test" | print "func for test"} |funfake() { | def funfake(): echo "func for fake" | print "func for fake"} |# main | if __name__ == __main__:funtest | funtest()funfake | funfake()$> source samp00.sh $> pythonfunc for test >>> import samp00func for fake$> bash samp00.sh $> python samp00.pyfunc for test func for testfunc for fake func for fake 6
  7. 7. Bash source VS Python import#!/bin/bash | #!/usr/bin/pythonfuntest() { | def funtest(): echo "func for test" | print "func for test"} |funfake() { | def funfake(): echo "func for fake" | print "func for fake"} |return 2> /dev/null | if __name__ == __main__:funtest | funtest()funfake | funfake()$> source samp00.sh $> python >>> import samp00$> bash samp00.sh $> python samp00.pyfunc for test func for testfunc for fake func for fake 7
  8. 8. Bash source VS Python import#!/bin/bashfuntest() { echo "func for test"}funfake() { echo "func for fake"}if [ "$0" == "$BASH_SOURCE" ]; then funtest funfakefi 8
  9. 9. From xkcd http://xkcd.com/353/
  10. 10. Python module and docstringPython module and docstring • import, from • import module as someone – Import module • del – Delete object • docstring – Python Documentation Strings 10
  11. 11. Python module and docstring#!/usr/bin/pythondef funtest(): """ Here is python docstring for funtest. Here is python docstring for funtest. """ print "func for test"def funfake(): "Here is python docstring for funcfake." print "func for fake"if __name__ == __main__: funtest() funfake() 11
  12. 12. Python module and docstring$> python>>> import samp02>>> samp02.samp02.__doc__( samp02.funtest( samp02.funfake(>>> samp02.funtest()func for test>>> help (samp02.funtest)>>>Help on function funtest in module samp02:funtest() Here is python docstring for funtest. Here is python docstring for funtest. 12
  13. 13. Python module and docstring>>> samp02.funfake.__doc__Here is python docstring for funcfake.>>> print samp02.funfake.__doc__Here is python docstring for funcfake.>>> import samp02 as new_samp02>>> new_samp02.funtest()func for test>>> del new_samp02>>> new_samp02.funtest()Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name new_samp is not defined 13
  14. 14. Bash import and docstring ?Bash import and docstring ?Usage: source import.sh • import, from • import module as someone – Import module • del module – Delete module • help module.function – Documentation Strings 14
  15. 15. Bash import and docstring ?#!/bin/bashfuntest() { __doc__="Here is bash import.sh docstring for funtestHere is bash import.sh docstring for funtest" echo "func for test"}funfake() { __doc__="Here is bash import.sh docstring for funfake" echo "func for fake"}if [ "$0" == "$BASH_SOURCE" ]; then funtest funfakefi 15
  16. 16. Bash import and docstring ?$> source import.sh$> import samp02.sh$> samp02samp02.funfake samp02.funtest$> samp02.funtestfunc for test$> import samp02.sh as new_samp$> new_samp.funtestfunc for test$> help new_samp.funtestHere is bash import.sh docstring for funtestHere is bash import.sh docstring for funtest$> del new_samp$> new_samp.funtestbash: new_samp.funtest command not found 16
  17. 17. uid, gid = split(``1000:100,``:) ?uid, gid = split(``1000:100,``:) ?Python : split name, passwd, uid, gid, note, homedir, shell = string.split(www-data:x:33:33:www-data:/var/www:/bin/sh,:)Bash : read LDread () { __doc__=LDread . V01.01.05.28.KH0.10.28 c1 c2 c3 c4 c5 c6 c7 local ifs con ifs=$1; shift con=$1; shift IFS=$ifs read $@ (echo $con) } 17
  18. 18. 阿宅圖片來源:公立怪咖國民小學 http://blog.xuite.net/protion/school/9142122
  19. 19. HookHook #!/bin/bash funtest() { __doc__=Hook test - Part I PreHook=echo This is PreHook PostHook=echo This is PostHook test -n $PreHook $PreHook echo func for test test -n $PostHook $PostHook } 19
  20. 20. Hook$ import hook00.sh$ hook00.funtestfunc for test$ help hook00.funtestHook test - Part IPreHook=echo This is PreHookPostHook=echo This is PostHook$ PreHook=echo This is PreHook$ PostHook=echo This is PostHook$ hook00.funtestThis is PreHookfunc for testThis is PostHook 20
  21. 21. Hook#!/bin/bashfuntestPreHook () { return}funtestPostHook () { return}funtest() { __doc__=Hook test - Part IIfuntestPreHook () { echo This is funtestPreHook; }funtestPostHook () { echo This is funtestPostHook; } funtestPreHook echo func for test funtestPostHook} 21
  22. 22. Hook$ import hook01.sh$ hook01.funtestfunc for test$ help hook01.funtestHook test - Part IIhook01.funtestPreHook () { echo This is funtestPreHook; }hook01.funtestPostHook () { echo This is funtestPostHook; }$ hook01.funtestPreHook () { echo This is funtestPreHook; }$ hook01.funtestPostHook () { echo This is funtestPostHook; }$ hook01.funtestThis is funtestPreHookfunc for testThis is funtestPostHook 22
  23. 23. DemoDemo 23
  24. 24. Advantages VS ProblemsAdvantages VS Problems • Advantages – Function reuse – Unit testing – Name space – Documentation strings – Grouping up commands • Problems – To Conflict with ImageMagick – Cant work with busybox ash 24

×