Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Merits of Bash Script v. Python Script for Shell-Command-Heavy Utility [closed]

I need to write a script to do the following:

  1. Monitor a queuing system, which is accessible by shell commands.
  2. Create directories from templates using a mix of inline text editing, cp/mv, command line scripts, and compiled c++ programs.
  3. Check for error conditions.
  4. Write files on error conditions.

Note: 2D arrays would be mildly useful to my program, but I'm currently making due with several 1D arrays (due to the limitations of Bash script's arrays).

Those tasks all seems somewhat "shell heavy" in so much as it can easily be implemented with a bunch of shell commands, so I thought Bash scripting would be a natural way to go. My results thus far have been good, but before I begin refactoring and finalizing my code, I was wondering whether it'd be better to port it to Python. I've read in numerous places that Python is "superior" to bash. I've done a bit of Python scripting and as far as I can tell, that's because it has more built in libraries and has support for object-oriented programming. However, all the scripts I've seen using shell commands, such as this one: http://magazine.redhat.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/

Implement obnoxious syntax, like having to define commands as variables, like so:

#You could add another bash command here
#HOLDING_SPOT="""fake_command"""

#Determines Home Directory Usage in Gigs
HOMEDIR_USAGE = """
du -sh $HOME | cut -f1
"""

#Determines IP Address
IPADDR = """
/sbin/ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1
"""

...and requiring wrapper functions and other fun.

Am I just being silly or does that seem less intuitive? Is there a speed advantage for use with Python that would outweigh the simplicity advantage of Bash when it comes to shell script commands? Or is the syntax of bash (no 2D arrays, brace/parentheses intricacies) reason to jump to Python?

like image 876
Jason R. Mick Avatar asked Aug 27 '10 15:08

Jason R. Mick


2 Answers

If you can't find a reason to switch it's probably because there's no reason.

I started to switch python because some of my scripts require some templating process that was easier to do in other than shell script.

There were also another scripts which required configuration file parsing or parameter parsing that make me learn a bit more of python, and finally another ones which deal with trac (coded in python) who made me switch to python.

But if you could outline your scripts in bash fast and cleanly without require another tool, remain in bash, it is a great tool.

like image 157
theist Avatar answered Oct 13 '22 01:10

theist


Bash is good right at the actual interface with the system, because it's so easy to run external programs, and for processing data that comes in streams. Python is good at work with less surface area, involving more looping, logic, data structures, and so on. Horses for courses.

It's hard to advise you which to use, or how to use both, without knowing details of your problem. But from the sound of it, this is something i'd do entirely in shell script. I'd find a way of doing it without arrays, though; the key is to stop thinking in C++ and start thinking in bash.

like image 21
Tom Anderson Avatar answered Oct 13 '22 01:10

Tom Anderson