2009-04-28 10 views
76

yo tratamos de aprender shell (bash) scripting pocas veces, pero fue echado por la sintaxis. Luego encontré Python y pude hacer la mayoría de las cosas que un script de shell puede hacer en Python. Ahora no estoy seguro de si debería invertir mi tiempo en aprender scripts de shell. Por eso quiero preguntar:Fortalezas de Shell Scripting en comparación con Python

Cuáles son las fortalezas de secuencias de comandos shell que lo convierten en una herramienta indispensable en comparación con Python?

No soy un sistema de administración de profesión, pero estoy interesado en la creación de sistemas Linux para usuarios domésticos, por lo tanto, creo que el aprendizaje de secuencias de comandos shell puede llegar a ser necesario.

Respuesta

65
  • Shell scripting tiene notaciones simples para la redirección de E/S.
  • Es más simple crear tuberías de programas existentes en shell.
  • Las secuencias de comandos de shell reutilizan programas completos.
  • Shell está disponible universalmente (en algo como Unix): Python no está necesariamente instalado.

'Es cierto que se puede hacer todo en Python que se puede hacer con cáscara; También es cierto que hay cosas que son fáciles en Python que son difíciles en el shell (al igual que hay cosas que son fáciles en shell pero difíciles en Python). Conocer ambos será lo mejor a largo plazo.

+14

1 y 2, buenos puntos. # 3 es una debilidad, ya que conduce a una gran cantidad de gastos generales que Python puede evitar. # 4 podría ser en gran parte falso. Python es parte de la mayoría de las distribuciones Linux ahora. –

+0

No veo la sobrecarga. ¿Tienes algunos números? – Svante

+0

En cuanto a Python, sí, está prácticamente disponible universalmente en Linux; todo el mundo no es una caja de Linux, sin embargo. Habiendo dicho eso, está disponible para cada plataforma tipo Unix. Sin embargo, en mi cuadro de Solaris, se instala algo fuera del camino (/ usr/sfw/bin/python); Solo encontré el directorio en el último año más o menos. –

10

No hay nada que puede hacer con scripts de shell que no se puede hacer con Python. La gran ventaja de los scripts de shell es que utilice los mismos comandos que se hace cuando se utiliza la cáscara, así que si usted es un usuario de shell pesado, shell scripting en algún momento convertirse en una forma muy rápida y fácil de automatizar su cáscara trabajo.

También creo que es más fácil tratar con tuberías de datos de secuencias de comandos shell que en Python, aunque es absolutamente factible de pitón.

Y, por último, que no tiene que encender un interpeter adicional para ejecutar las secuencias de comandos shell, que le da una muy pequeña, pero a veces puede que notable velocidad y el uso de memoria ventaja.

Pero, de nuevo, los scripts de Python son mucho más fácil de mantener, que estoy tratando de migrar de grandes secuencias de comandos shell feos a los scripts de Python por esa misma razón. También es más fácil hacer control de excepciones y QA con Python.

5

La carcasa está disponible en todas partes. Si se atiene a un conjunto relativamente básico de funcionalidad portátil, sus scripts se pueden ejecutar en teléfonos celulares, enrutadores inalámbricos, DVR, netbooks, estaciones de trabajo, servidores grandes, y similares. Python no está necesariamente incluido de fábrica en muchos sistemas, y dependiendo del entorno, puede ser difícil instalarlo.

Aprender algunas secuencias de comandos shell también puede ayudar a aprender algunos trucos de línea de comandos, desde la línea de comandos es, así, la cáscara. También es bueno para tomar una línea de comandos bastante larga y complicada, y convertirla en una secuencia de comandos más general después de que te des cuenta de que la necesitarás un poco más.

La cubierta también tiene algunas características muy potentes; las tuberías son una construcción de control realmente interesante que es nativa solo del caparazón, hasta donde yo sé.

45

"¿Cuáles son las fortalezas de secuencias de comandos shell que lo convierten en una herramienta indispensable en comparación con Python?"

La cáscara no es indispensable. ¿Por qué cree que hay tantos? Bash, tcsh, CSH, sh, etc., etc.,

Python es una concha. No es la que uno 'utilización d para ejecutar todos comandos, pero las secuencias de comandos, es ideal.

Python es una parte más o menos estándar de todos los de distribución de Linux.

Las conchas más tradicionales de hacer demasiadas cosas.

  1. Tienen una interfaz de usuario práctica para ejecutar comandos. Esto incluye comandos de una línea donde el shell busca su RUTA, bifurca y ejecuta el programa solicitado. También incluye canalizaciones, secuencias y programas concurrentes (usando ;, | y &) así como algunas redirecciones (usando > y <).

  2. Tienen una pequeña y horrible capacidad de lenguaje de programación para ejecutar scripts. Este lenguaje es bastante difícil de usar y extremadamente ineficiente. La mayoría de las declaraciones en este lenguaje requieren bifurcaciones de uno o más procesos adicionales, perdiendo tiempo y memoria.

Ejecutando programas desde el shell, redirigiendo stderr a un archivo de registro y ese tipo de cosas es bueno. Haz eso en el caparazón.

Casi todo lo demás se puede hacer de manera más eficiente y más clara como una secuencia de comandos de Python.

Necesita ambos. Sin embargo, nunca debe escribir un script con if-statements o loops en un lenguaje de shell tradicional.

+0

-1. A) la presencia de una proliferación de diferentes caparazones sirve para dar fe, en lugar de restarle valor, a la afirmación de que un caparazón de cierta variedad es esencial para el uso de un sistema UNIX. B) el OP especificó "shell UNIX", no solo "shell". El intérprete de Python no es un shell de UNIX, es un "shell" de Python. El lenguaje de programación de Python está orientado a la programación de procedimientos y manipulación de datos; Los lenguajes de shell están orientados a ejecutar programas y manipular su salida. C) Su punto n. ° 2 podría ser cierto si ninguna de las instrucciones del guión son instrucciones de control de flujo como 'if' o' while'. – intuited

+1

@intuited. A) La proliferación de diferentes caparazones atestigua el número de características que se acumulan en "caparazón"; no es un papel esencial, pero tiene todas las características. B) El intérprete de Python es un shell de Unix apropiado, ¡usa # !. C) Una instrucción 'simple 'shell' if' a menudo implica ejecutar el programa 'test'. El shell es un lenguaje de programación lamentable en todos los aspectos. –

+3

@S. Lott: Parece que hay algo de disonancia semántica en los circuitos aquí.Mi definición de shell UNIX sería un intérprete cuyo lenguaje está principalmente orientado a controlar, en un alto nivel, el funcionamiento de un sistema UNIX. Según esta definición, un shell de algún tipo es ciertamente esencial para el funcionamiento de un sistema UNIX, y Python no califica. ¿Cómo definirías ese término? – intuited

25

El shell hace que las acciones simples y simples sean realmente simples, a expensas de hacer que las cosas más complejas sean mucho más complejas.

Normalmente, un script de shell pequeño será más corto y simple que el programa python correspondiente, pero el programa de python tenderá a aceptar modificaciones, mientras que el script de shell tenderá a ser cada vez menos sostenible a medida que se agregue el código.

Esto tiene la consecuencia de que para una productividad diaria óptima necesita guiones de shell, pero debe usarlo principalmente para scripts desechables, y usar Python en cualquier otro lugar.

7

uno no tiene que aprender scripts de shell, como indican todas las respuestas anteriores; pero aprender nunca es malo. es realmente una cuestión de prioridades personales. es muy difícil para otra persona decirte lo que vale y no vale tu tiempo.

la mayoría de los programadores descubren que el aprendizaje de nuevos idiomas se vuelve incrementalmente más fácil cada vez. (Lo mismo ocurre en gran parte con los lenguajes naturales también) y cuanto antes comiences, mejor.

plus: haber aprendido un idioma le permite desvirtuar de manera extravagante sus limitaciones desde una posición de completo conocimiento y familiaridad. ¡esto probablemente no te hará sentir bien, pero podría ganarte una cerveza de tus compañeros!

6

Acepto la mayoría de las respuestas anteriores. Considero los comandos de shell más adecuados para hacer tareas orientadas al sistema de archivos (copiar y mover archivos, grep, etc.).Shell es mejor, en mi opinión, si usted tiene que leer y escribir en el archivo, ya que una sola >>file.txt redirección añade a presentar al instante, en lugar de tener, por ejemplo, file=open('file.txt','a'); file.write(), etc.

Actualmente, para mi uso personal, mezcle ambos, creando un script python y llamando a os.system ('command') u os.popen ('command') cada vez que alguna acción sea más fácil en shell que en python.

3

Otro aspecto a tener en cuenta al elegir los scripts de shell de Python es la versión de Python que se ejecutará en los equipos de destino. RHEL5 (por nombrar uno) va a estar presente por mucho tiempo. RHEL5 está atrapado con Python 2.4. Hay muchas bibliotecas bonitas que dependen de la funcionalidad añadida a Python post-2.4.

Cuestiones relacionadas