¿Qué es un lenguaje de comandos de shell? ¿Cuál es el papel del lenguaje de comandos del shell?
Aunque no forma parte del kernel del sistema Unix/Linux, llama a la mayoría de las funciones del kernel del sistema para ejecutar programas en paralelo, crear archivos y coordinar la ejecución de varios programas. Por lo tanto, para los usuarios, el shell es el programa de utilidad más importante. Un conocimiento profundo y el dominio de las características y el uso del shell son la clave para hacer un buen uso del sistema Unix/Linux.
Se puede decir que la competencia en el uso del shell refleja la competencia del usuario en el uso de Unix/Linux.
Nota: Aprender Shell por sí solo no tiene sentido. Consulte primero el curso introductorio de Unix/Linux para comprender los conocimientos básicos de Unix/Linux.
Shell tiene dos formas de ejecutar comandos:
Interactivo: interpreta y ejecuta los comandos del usuario. Cuando el usuario ingresa un comando, Shell interpreta y ejecuta el comando.
Procesamiento por lotes: el usuario escribe previamente un script de Shell que contiene muchos comandos para que el Shell pueda ejecutar estos comandos a la vez sin tener que escribirlos uno por uno.
Los scripts de Shell son muy similares a los lenguajes de programación, con variables y declaraciones de control de flujo, pero los scripts de Shell se interpretan y ejecutan y no requieren compilación. El programa Shell lee y ejecuta estos comandos línea por línea desde el script, lo que equivale a que el usuario escriba los comandos en el script línea por línea en el indicador de Shell para ejecutarlos.
Los principiantes en Shell deben tener en cuenta que no se recomienda utilizar la cuenta raíz para ejecutar Shell en aplicaciones normales. Como usuario normal, no puedes dañar el sistema, ya sea de forma intencionada o no, pero es diferente si eres root; Escribir sólo unas pocas letras puede tener consecuencias desastrosas.
Como se mencionó anteriormente, Shell es un lenguaje de scripting, por lo que debe haber un intérprete para ejecutar estos scripts.
Los intérpretes de scripts de Shell comunes en Unix/Linux incluyen bash, sh, csh, ksh, etc. Se les suele llamar conchas. A menudo hablamos de cuántos tipos de shells existen, pero en realidad estamos hablando de intérpretes de scripts de shell.
Pruebe
Bash es el shell predeterminado estándar de Linux y este tutorial también se basa en bash. Bash fue completado por Brian Fox y Chet Ramey ** y es la abreviatura de BourneAgain Shell. Hay 40 comandos internos.
Linux lo utiliza como shell predeterminado porque tiene las siguientes características:
Puede utilizar funciones similares a doskey en DOS para buscar, ingresar y modificar comandos rápidamente con las teclas de flecha.
Da automáticamente comandos que comiencen con una cadena buscando coincidencias.
Tiene una función de ayuda incorporada. Solo necesita escribir ayuda cuando se le solicite para obtener ayuda relevante.
Sh
Sh fue desarrollado por Steve Bourne y es la abreviatura de Bourne Shell. sh es el Shell predeterminado estándar de Unix.
Ash
El shell Ash fue escrito por Kenneth Almquist y es un shell pequeño que ocupa la menor cantidad de recursos del sistema en Linux. Solo contiene 24 comandos internos, por lo que no es cómodo de usar.
csh
Csh es un núcleo de Linux relativamente grande. Está compilado por 47 autores representados por Jin Zhengji Cang. Tiene 52 comandos internos. El shell en realidad apunta a un shell similar a /bin/tcsh, es decir, csh es en realidad tcsh.
ksh
Ksh es la abreviatura de Korn shell, escrita por Eric Gisin, * * * Hay 42 comandos internos. La mayor ventaja de este shell es que es casi completamente compatible con ksh lanzado comercialmente, lo que le permite probar el rendimiento de la versión comercial sin gastar dinero.
Nota: bash es la abreviatura de Bourne Again Shell y es el shell predeterminado estándar de Linux. Se basa en el shell Bourne y absorbe algunas características del shell C y el shell Korn. Bash es totalmente compatible con sh, es decir, los scripts escritos en sh se pueden ejecutar en bash sin modificaciones.
En términos generales, los lenguajes de programación se pueden dividir en dos categorías: lenguajes compilados y lenguajes interpretados.
Lenguajes compilados
Muchos lenguajes de programación tradicionales, como Fortran, Ada, Pascal, C, C++ y Java, son lenguajes compilados. Este lenguaje requiere convertir el código fuente que escribimos en código de destino por adelantado. Este proceso se llama "compilación".
Al ejecutar el programa, lea el código de destino directamente. Debido a que el código de destino compilado está muy cerca de la capa inferior de la computadora, la eficiencia de ejecución es muy alta, lo cual es la ventaja de los lenguajes compilados.
Sin embargo, dado que la mayoría de los lenguajes compilados se ejecutan en la parte inferior y tratan con bytes, enteros, números de punto flotante u otros objetos a nivel de máquina, implementar una función simple a menudo requiere una gran cantidad de código complejo. Por ejemplo, en C++, es difícil realizar una operación simple como "copiar todos los archivos de un directorio a otro directorio".
Lenguajes interpretados
Los lenguajes interpretados también se denominan “lenguajes de scripting”. Al ejecutar este tipo de programa, el intérprete necesita leer el código fuente que escribimos y convertirlo en código objeto, que luego es ejecutado por la computadora. Debido a que hay más procesos de compilación cada vez que se ejecuta el programa, se reduce la eficiencia.
La ventaja de utilizar lenguajes de scripting es que en su mayoría se ejecutan a un nivel más alto que los lenguajes compilados y pueden manejar fácilmente objetos como archivos y directorios; la desventaja es que generalmente no son tan eficientes; como lenguajes compilados. Pero, en general, normalmente vale la pena programar con scripts: un script simple tarda una hora en escribirse, la misma función en C o C++ puede tardar dos días y, en términos generales, los scripts se ejecutan lo suficientemente rápido, lo que permite a las personas ignorar su rendimiento. asuntos. Ejemplos de lenguajes de scripting son awk, Perl, Python, Ruby y Shell. Porque Shell parece ser una función comúnmente utilizada entre los sistemas UNIX y ha sido estandarizada por POSIX. Por lo tanto, siempre que el script de Shell esté "escrito con cuidado", se puede aplicar a muchos sistemas. Por lo tanto, las razones para utilizar scripts de Shell se basan en:
Simplicidad: Shell es un lenguaje de alto nivel, a través de él se pueden expresar operaciones complejas de manera concisa;
Portabilidad: Utilizando funciones definidas por POSIX, el script se puede ejecutar en diferentes sistemas sin modificaciones.
Fácil de desarrollar: Podrás completar un script potente y útil en poco tiempo.
Sin embargo, dadas las limitaciones de comando y la eficiencia de los scripts de Shell, el Shell generalmente no se usa en las siguientes situaciones:
Tareas que requieren un uso intensivo de recursos, especialmente cuando la eficiencia es una preocupación (por ejemplo, (por ejemplo, clasificación, hash, etc.)
Operaciones matemáticas que necesitan manejar tareas grandes, especialmente operaciones de punto flotante, operaciones precisas u operaciones aritméticas complejas (esta situación generalmente se maneja con C++ o FORTRAN).
Necesita portabilidad multiplataforma (sistema operativo) (generalmente usando C o Java).
Aplicaciones complejas, en las que se debe utilizar programación estructurada (comprobación de tipos de variables, prototipos de funciones, etc.). ).
Para aplicaciones de misión crítica que afectan al sistema en general.
Tareas que requieren alta seguridad, como por ejemplo necesita un sistema robusto para evitar intrusiones, crackeos, daños maliciosos, etc.
Un proyecto consta de una serie de partes relacionadas.
Requiere operaciones de archivos a gran escala.
Requiere soporte para matrices multidimensionales.
Requiere el soporte de estructuras de datos, como listas enlazadas o números.
Es necesario generar u operar una interfaz gráfica GUI.
Requiere hardware directo del sistema operativo.
Requiere E/S o interfaz de socket.
Es necesario utilizar la interfaz de la biblioteca o el código heredado.
Aplicaciones privadas de código cerrado (los scripts de shell colocan el código en archivos de texto para que todo el mundo lo vea).
Si su aplicación cumple alguno de los requisitos anteriores, considere un lenguaje más potente (tal vez Perl, Tcl, Python, Ruby) o un lenguaje compilado de nivel superior como C/C++ o Java. Aun así, puede resultarle útil utilizar el shell durante los pasos de desarrollo para crear un prototipo de su aplicación.