NOMBRE
sh - intérprete de comandos (shell)
SINOPSIS
sh -/ + aCefnuvxIimqsVEbc -o nombre largo -palabras objetivo …
DESCRIPCIÓN
Sh es el intérprete de comandos estándar para el sistema. La versión actual desh está en el proceso de ser cambiado para cumplir con laPOSIX 1003.2 y 1003.2a especificaciones para el shell. Esta versión tiene muchas características que la hacen parecer similar en algunos aspectos al shell Korn, pero no es un clon de shell Korn (consulte ksh (1)). Sólo las características designadas porPOSIX más unas pocas extensiones de Berkeley, están siendo incorporadas en este shell. EsperamosPOSIX Conforme a la hora 4.4 BSD es liberado. Esta página de manual no pretende ser un tutorial o una especificación completa del shell.
Visión general
El shell es un comando que lee líneas de un archivo o del terminal, las interpreta y generalmente ejecuta otros comandos. Es el programa que se ejecuta cuando un usuario inicia sesión en el sistema (aunque un usuario puede seleccionar un shell diferente con el comando chsh (1)). El shell implementa un lenguaje que tiene construcciones de control de flujo, una instalación de macros que proporciona una variedad de características además del almacenamiento de datos, junto con capacidades de edición de líneas e historial incorporadas. Incorpora muchas características para ayudar al uso interactivo y tiene la ventaja de que el lenguaje interpretativo es común tanto para el uso interactivo como para el no interactivo (shell scripts). Es decir, los comandos se pueden escribir directamente en el shell en ejecución o se pueden colocar en un archivo y el shell puede ejecutar el archivo directamente.
Invocación
Si no hay argumentos presentes y si la entrada estándar del shell está conectada a un terminal (o si el -yose establece la bandera), y el -do La opción no está presente, el shell se considera un shell interactivo. Un shell interactivo generalmente solicita antes de cada comando y maneja los errores de programación y comando de manera diferente (como se describe a continuación). Cuando se inicia por primera vez, el shell inspecciona el argumento 0 y, si comienza con un guión `-, el shell también se considera un shell de inicio de sesión. Normalmente, el sistema lo hace automáticamente cuando el usuario inicia sesión. Un shell de inicio de sesión lee primero los comandos de los archivos / etc / profile y .profile, si existen. Si la variable de entornoENV se establece al ingresar a un shell, o se configura en el perfil .profile de un shell de inicio de sesión, el shell siguiente lee los comandos del archivo nombrado enENVPor lo tanto, un usuario debe colocar los comandos que se ejecutarán solo en el momento del inicio de sesión en el archivo .profile, y los comandos que se ejecutan para cada shell dentro delENV expediente. Para configurar elENV variable a algún archivo, coloque la siguiente línea en su perfil de su directorio de inicio
ENV = $ HOME / .shinit; export ENV
sustituyendo por `` .shinit '' cualquier nombre de archivo que desee. Desde elENV el archivo se lee para cada invocación del shell, incluidos los scripts de shell y los shells no interactivos, el siguiente paradigma es útil para restringir comandos en elENV Archivo a invocaciones interactivas. Coloque los comandos dentro de `` case '' y `` esac '' a continuación (estos comandos se describen más adelante):
caso $ - en * i *)
# comandos solo para uso interactivo
…
esac
Si se han especificado argumentos en la línea de comandos además de las opciones, entonces el shell trata el primer argumento como el nombre de un archivo desde el cual leer los comandos (un script de shell), y los argumentos restantes se establecen como los parámetros posicionales del shell ($ 1 , $ 2, etc). De lo contrario, el shell lee los comandos de su entrada estándar.
Procesamiento de lista de argumentos
Todas las opciones de una sola letra tienen un nombre correspondiente que se puede usar como argumento para:o opción. El conjunto -o el nombre se proporciona junto a la opción de una sola letra en la descripción a continuación. Especificar un guión `` - '' activa la opción, mientras que usar un signo más `` + '' desactiva la opción. Las siguientes opciones se pueden configurar desde la línea de comando o con el set (1) incorporado (descrito más adelante).
-una allexport
Exportar todas las variables asignadas a. (NO IMPLEMENTADO para 4.4alpha)
-do
Lee los comandos desde la línea de comandos. No se leerá ningún comando desde la entrada estándar.
-DO noclobber
No sobrescriba los archivos existentes con ``> '' (UNIMPLEMENTED para 4.4alpha)
-mi errexit
Si no es interactivo, salga inmediatamente si falla algún comando no probado. Se considera que el estado de salida de un comando se prueba explícitamente si el comando se usa para controlar unaSi elifwhile ohasta o si el comando es el operando de la izquierda de un operador `` && '' o `` || ''.
-F noglob
Deshabilitar la expansión del nombre de ruta
-norte noexec
Si no es interactivo, lea los comandos pero no los ejecute. Esto es útil para comprobar la sintaxis de los scripts de shell.
-u nounset
Escriba un mensaje de error estándar cuando intente expandir una variable que no esté establecida, y si el shell no es interactivo, salga de inmediato. (NO IMPLEMENTADO para 4.4alpha)
-v verboso
El shell escribe su entrada al error estándar a medida que se lee. Útil para la depuración.
-X traza
Escriba cada comando en el error estándar (precedido por un '+' antes de que se ejecute. Útil para la depuración.
-q perfil tranquilo
Si el -v o -X se han establecido opciones, no las aplique cuando lea archivos de inicialización, que son / etc / profile .profile y el archivo especificado porENV Variable ambiental.
-YO ignorar
Ignorar EOF de entrada cuando interactiva.
-yo interactivo
Obliga a la cáscara a comportarse interactivamente.
-metro monitor
Activar control de trabajos (establecer automáticamente cuando es interactivo).
-s stdin
Lea los comandos de la entrada estándar (establezca automáticamente si no hay argumentos de archivo presentes). Esta opción no tiene efecto cuando se establece después de que el shell ya haya comenzado a ejecutarse (es decir, con set (1)).
-V vi
Habilitar el editor de línea de comandos vi (1) incorporado (deshabilita -mi si se ha configurado).
-MI emacs
Habilitar el editor de línea de comandos emacs (1) incorporado (deshabilita -V si se ha configurado).
-segundo notificar
Habilitar la notificación asíncrona de la finalización del trabajo de fondo. (NO IMPLEMENTADO para 4.4alpha)
Estructura léxica
El shell lee la entrada en términos de líneas de un archivo y lo divide en palabras en espacios en blanco (espacios en blanco y tabulaciones), y en ciertas secuencias de caracteres que son especiales para el shell llamados "operadores". Hay dos tipos de operadores: Operadores de control y operadores de redireccionamiento (su significado se discute más adelante). A continuación hay una lista de operadores:
"Operadores de control:"
& && ( ) ; ;; | || "Operador de redireccionamiento:" < > >| << >> <& >& <<- <>
Las citas se utilizan para eliminar el significado especial de ciertos caracteres o palabras en el shell, como operadores, espacios en blanco o palabras clave. Hay tres tipos de citas: comillas simples emparejadas, comillas dobles emparejadas y barra diagonal inversa. Una barra invertida conserva el significado literal del siguiente carácter, a excepción de la nueva línea Aq. Una barra invertida que precede a una nueva línea Aq se trata como una continuación de línea. La inclusión de caracteres entre comillas simples conserva el significado literal de todos los caracteres (excepto las comillas simples, lo que hace imposible colocar comillas simples en una cadena de comillas simples). Incluir caracteres entre comillas dobles conserva el significado literal de todos los caracteres excepto dollarsign ($) backquote (`) y backslash () La barra invertida dentro de comillas dobles es históricamente extraño, y sirve para citar solo los siguientes caracteres: $ ` De lo contrario sigue siendo literal. Las palabras reservadas son palabras que tienen un significado especial para el shell y se reconocen al principio de una línea y después de un operador de control. Las siguientes son palabras reservadas: ! Ejército de reservaelif ta fi ta mientras ta estuche de lo contrario tapara Ta entonces Ta {Ta} hacer Tahecho Ta hasta Ta si Ta esac Su significado se discute más adelante. Un alias es un nombre y un conjunto de valores correspondientes que utilizan el comando incorporado alias (1). Siempre que pueda aparecer una palabra reservada (ver arriba), y después de verificar las palabras reservadas, el shell comprueba la palabra para ver si coincide con un alias. Si lo hace, lo reemplaza en el flujo de entrada con su valor. Por ejemplo, si hay un alias llamado `` lf '' con el valor `` ls -F '' entonces la entrada: si foobar se convertiría ls -F foobar Los alias proporcionan una forma conveniente para que los usuarios ingenuos creen atajos de comandos sin tener que aprender a crear funciones con argumentos. También se pueden usar para crear código léxicamente oscuro. Se desaconseja este uso. El shell interpreta las palabras que lee según un idioma, cuya especificación está fuera del alcance de esta página de manual (consulte el BNF en laPOSIX Documento 1003.2). Esencialmente, sin embargo, se lee una línea y si la primera palabra de la línea (o después de un operador de control) no es una palabra reservada, entonces el shell ha reconocido un comando simple. De lo contrario, un comando complejo o alguna otra construcción especial puede haber sido reconocido. Si se ha reconocido un comando simple, el shell realiza las siguientes acciones: Las palabras iniciales de la forma `` nombre = valor '' se eliminan y se asignan al entorno del comando simple. Los operadores de redirección y sus argumentos (como se describe a continuación) se eliminan y se guardan para su procesamiento. Las palabras restantes se expanden como se describe en la sección llamada "Expansiones" y la primera palabra restante se considera el nombre del comando y se ubica el comando. Las palabras restantes se consideran los argumentos del comando. Si no se obtuvo un nombre de comando, las asignaciones de variables `` nombre = valor '' reconocidas en el elemento 1 afectan al shell actual. Las redirecciones se realizan como se describe en la siguiente sección. Redirecciones Las redirecciones se utilizan para cambiar cuando un comando lee su entrada o envía su salida. En general, las redirecciones abren, cierran o duplican una referencia existente a un archivo. El formato general utilizado para la redirección es: n redirigir archivo dónde redir-op Es uno de los operadores de redireccionamiento mencionados anteriormente. A continuación se muestra una lista de las posibles redirecciones. Bq n es un número opcional, como en `3 '(no` Bq 3' que se refiere a un descriptor de archivo. n> archivo Redirigir la salida estándar (o n) al archivo. n> | expediente Igual, pero anular el -do opción. n >> archivo Agregue la salida estándar (o n) al archivo. n <archivo Redirigir la entrada estándar (o n) del archivo. n1 <& n2 Duplique la entrada estándar (o n1) del descriptor de archivo n2. n <& - Cierre la entrada estándar (o n). n1> & n2 Salida estándar duplicada (o n1) de n2. n> & - Cierre la salida estándar (o n). n <> archivo Abra el archivo para leer y escribir en la entrada estándar (o n). La siguiente redirección a menudo se denomina "documento aquí" n << delimitador aquí-doc-texto … delimitador Todo el texto en líneas sucesivas hasta el delimitador se guarda y se pone a disposición del comando en la entrada estándar, o el descriptor de archivo n, si se especifica.Si se cita el delimitador como se especifica en la línea inicial, entonces el texto aquí-doc se trata literalmente, de lo contrario, el texto está sujeto a la expansión de parámetros, la sustitución de comandos y la expansión aritmética (como se describe en la sección "Expansiones") 'Si el operador es `` << -' 'en lugar de `` <<' ', entonces se eliminan las pestañas iniciales del texto-doc aquí. Hay tres tipos de comandos: funciones de shell, comandos incorporados y programas normales, y el comando se busca (por nombre) en ese orden. Cada uno de ellos se ejecuta de una manera diferente. Cuando se ejecuta una función de shell, todos los parámetros posicionales del shell (excepto $ 0, que permanece sin cambios) se establecen en los argumentos de la función de shell. Las variables que se colocan explícitamente en el entorno del comando (colocándoles asignaciones antes del nombre de la función) se hacen locales a la función y se establecen en los valores dados. Luego se ejecuta el comando dado en la definición de la función. Los parámetros posicionales se restauran a sus valores originales cuando se completa el comando. Todo esto ocurre dentro del shell actual. Los shell construidos se ejecutan internamente en el shell, sin generar un nuevo proceso. De lo contrario, si el nombre del comando no coincide con una función o función incorporada, el comando se busca como un programa normal en el sistema de archivos (como se describe en la siguiente sección). Cuando se ejecuta un programa normal, el shell ejecuta el programa, pasando los argumentos y el entorno al programa. Si el programa no es un archivo ejecutable normal (es decir, si no comienza con el "número mágico" cuyoASCII la representación es "#!", por lo que execve (2) devuelve Er ENOEXEC entonces) el shell interpretará el programa en una subshell. El shell secundario se reinicializará en este caso, de modo que el efecto será como si se hubiera invocado un nuevo shell para manejar el script del shell ad-hoc, excepto que la ubicación de los comandos con hash ubicados en el shell primario será recordada por niño. Tenga en cuenta que las versiones anteriores de este documento y el propio código fuente se refieren de forma engañosa y esporádica a un script de shell sin un número mágico como un "procedimiento de shell". Al ubicar un comando, el shell primero mira para ver si tiene una función de shell con ese nombre. Luego busca un comando incorporado con ese nombre. Si no se encuentra un comando incorporado, ocurre una de estas dos cosas: Los nombres de comando que contienen una barra inclinada se ejecutan simplemente sin realizar ninguna búsqueda. El shell busca en cada entradaCAMINO a su vez por el comando. El valor de laCAMINOLa variable debe ser una serie de entradas separadas por dos puntos. Cada entrada consta de un nombre de directorio. El directorio actual puede estar indicado implícitamente por un nombre de directorio vacío, o explícitamente por un solo período. Estado de salida del comando Cada comando tiene un estado de salida que puede influir en el comportamiento de otros comandos de shell. El paradigma es que un comando sale con cero para normal o exitoso, y no cero para falla, error o una falsa indicación. La página de manual de cada comando debe indicar los distintos códigos de salida y su significado. Además, los comandos incorporados devuelven códigos de salida, al igual que una función de shell ejecutada. Los comandos complejos son combinaciones de comandos simples con operadores de control o palabras reservadas, creando juntos un comando complejo más grande. Más generalmente, un comando es uno de los siguientes: A menos que se indique lo contrario, el estado de salida de un comando es el del último comando simple ejecutado por el comando. Una tubería es una secuencia de uno o más comandos separados por el operador de control |. La salida estándar de todos, excepto el último comando, está conectada a la entrada estándar del siguiente comando. La salida estándar del último comando se hereda del shell, como de costumbre. El formato para una tubería es: ! comando1 | comando2 … La salida estándar de command1 está conectada a la entrada estándar de command2. La entrada estándar, la salida estándar o ambos comandos se consideran asignados por la canalización antes de cualquier redirección especificada por los operadores de redirección que forman parte del comando. Si la canalización no está en segundo plano (se explica más adelante), el shell espera a que se completen todos los comandos. Si la palabra reservada! no precede a la canalización, el estado de salida es el estado de salida del último comando especificado en la canalización. De lo contrario, el estado de salida es el NO lógico del estado de salida del último comando. Es decir, si el último comando devuelve cero, el estado de salida es 1; Si el último comando devuelve mayor que cero, el estado de salida es cero. Debido a que la asignación de tubería de entrada estándar o salida estándar, o ambas, tiene lugar antes de la redirección, se puede modificar mediante la redirección. Por ejemplo: $ command1 2> & 1 | comando2 envía tanto la salida estándar como el error estándar de comando1 a la entrada estándar de comando2. UNA ; o Tenga en cuenta que, a diferencia de otros shells, cada proceso en la tubería es un hijo del shell invocado (a menos que sea un shell incorporado, en cuyo caso se ejecuta en el shell actual, pero se borra cualquier efecto que tenga en el entorno). Si un comando es terminado por el operador de control ampersand (&), el shell ejecuta el comando de forma asíncrona, es decir, el shell no espera a que el comando termine antes de ejecutar el siguiente comando. El formato para ejecutar un comando en segundo plano es: comando1 y comando2 y … Si el shell no es interactivo, la entrada estándar de un comando asíncrono se establece en / dev / null Una lista es una secuencia de cero o más comandos separados por nuevas líneas, puntos y coma o símbolos, y opcionalmente terminados por uno de estos tres caracteres. Los comandos en una lista se ejecutan en el orden en que se escriben. Si al comando le sigue un signo, el shell inicia el comando y pasa inmediatamente al siguiente comando; de lo contrario, espera a que finalice el comando antes de continuar con el siguiente. `` && '' y `` || '' son operadores de listas AND-OR. `` && '' ejecuta el primer comando, y luego ejecuta el segundo comando si el estado de salida del primer comando es cero. `` || '' es similar, pero ejecuta el segundo comando si el estado de salida del primer comando es distinto de cero. `` && '' y `` || '' tienen la misma prioridad. La sintaxis del comando if es si lista luego lista lista de elif entonces lista … lista de else fi La sintaxis del comando while es lista mientras lista de tareas hecho Las dos listas se ejecutan repetidamente mientras el estado de salida de la primera lista es cero. El comando hasta es similar, pero tiene la palabra hasta en lugar de while, lo que hace que se repita hasta que el estado de salida de la primera lista sea cero. La sintaxis del comando for es por variable en palabra … lista de tareas hecho Las palabras se expanden y luego la lista se ejecuta repetidamente con la variable establecida para cada palabra por turno. do y done pueden ser reemplazados con `` {'' y ``} '' La sintaxis del comando break y continue es descanso num continuar num Break termina el número más interno de los bucles o while. Continuar continúa con la siguiente iteración del bucle más interno. Estos se implementan como comandos incorporados. La sintaxis del comando case es palabra del caso en patrón) lista ;; … esac El patrón puede ser en realidad uno o más patrones (vea Patrones de concha descritos más adelante), separados por caracteres `` ''. Los comandos se pueden agrupar escribiendo (lista) o {lista; El primero de estos ejecuta los comandos en una subshell. Los comandos incorporados agrupados en una (lista) no afectarán al shell actual. La segunda forma no bifurca otra concha, por lo que es un poco más eficiente. Agrupar los comandos de esta manera le permite redirigir su salida como si fueran un solo programa: {printf hola; printf world n ";}> saludo Funciones La sintaxis de una definición de función es nombre () comando Una definición de función es una sentencia ejecutable; cuando se ejecuta, instala una función llamada nombre y devuelve un estado de salida de cero. El comando es normalmente una lista entre `` {'' y ``} '' Las variables se pueden declarar como locales a una función usando un comando local. Esto debería aparecer como la primera declaración de una función, y la sintaxis es local variable | - … Local se implementa como un comando incorporado. Cuando una variable se hace local, hereda el valor inicial y se exporta y lee solo las banderas de la variable con el mismo nombre en el ámbito circundante, si existe. De lo contrario, la variable se desactiva inicialmente. El shell utiliza el alcance dinámico, de modo que si hace que la variable x local sea la función f, que luego llama a la función g, las referencias a la variable x hecha dentro de g se referirán a la variable x declarada dentro de f, no a la variable global llamada x . El único parámetro especial que se puede hacer local es `` - '' Haciendo `` - '' local cualquier opción de shell que se cambie a través del comando set dentro de la función para ser restaurada a sus valores originales cuando la función regrese. La sintaxis del comando de retorno es volver exitstatus Termina la función en ejecución actualmente. El retorno se implementa como un comando incorporado. El shell mantiene un conjunto de parámetros. Un parámetro denotado por un nombre se llama variable. Al iniciar, el shell convierte todas las variables de entorno en variables de shell. Se pueden configurar nuevas variables usando el formulario nombre = valor Las variables establecidas por el usuario deben tener un nombre que consiste únicamente en alfabéticos, numéricos y guiones bajos, el primero de los cuales no debe ser numérico. Un parámetro también se puede denotar con un número o un carácter especial como se explica a continuación. Un parámetro posicional es un parámetro denotado por un número (n> 0). El shell los establece inicialmente a los valores de sus argumentos de línea de comando que siguen al nombre del script de shell. El conjunto (1) incorporado también se puede utilizar para configurarlos o restablecerlos. Un parámetro especial es un parámetro indicado por uno de los siguientes caracteres especiales. El valor del parámetro se muestra junto a su carácter. * Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión ocurre dentro de una cadena entre comillas dobles, se expande a un solo campo con el valor de cada parámetro separado por el primer carácter delIFS variable, o por una @ Se expande a los parámetros posicionales, comenzando desde uno.Cuando la expansión ocurre entre comillas dobles, cada parámetro posicional se expande como un argumento separado. Si no hay parámetros posicionales, la expansión de @ genera cero argumentos, incluso cuando @ está entre comillas dobles. Lo que esto significa básicamente, por ejemplo, es que si $ 1 es `abc '' y $ 2 es` `def ghi '', entonces Qq $ @ se expande a los dos argumentos: abc def ghi # Se expande al número de parámetros posicionales. ? Se expande al estado de salida de la tubería más reciente. - (Guión.) Se expande a los indicadores de opción actuales (los nombres de opción de una sola letra concatenados en una cadena) como se especifica en la invocación, mediante el comando incorporado del conjunto, o implícitamente por el shell. $ Se expande al ID de proceso del shell invocado. Una subshell retiene el mismo valor de $ que su padre. ! Se expande al ID de proceso del comando de fondo más reciente ejecutado desde el shell actual. Para una canalización, la ID del proceso es la del último comando en la canalización. 0 (cero). Se expande al nombre del shell o script de shell. Expansiones de palabras Esta cláusula describe las diversas expansiones que se realizan en las palabras. No todas las expansiones se realizan en cada palabra, como se explica más adelante. Las expansiones de tilde, las expansiones de parámetros, las sustituciones de comandos, las expansiones aritméticas y las eliminaciones de comillas que se producen dentro de una sola palabra se expanden a un solo campo. Solo la división de campos o la expansión de la ruta de acceso puede crear múltiples campos a partir de una sola palabra. La única excepción a esta regla es la expansión del parámetro especial @ entre comillas dobles, como se describió anteriormente. El orden de expansión de la palabra es: Expansión de tilde, Expansión de parámetros, Sustitución de comandos, Expansión aritmética (todo esto ocurre al mismo tiempo). La división de campos se realiza en campos generados por el paso (1) a menos queIFS La variable es nula. Expansión del nombre de ruta (a menos que se establezca -F está en efecto). Citar la eliminación. El carácter $ se utiliza para introducir la expansión de parámetros, la sustitución de comandos o la evaluación aritmética. Una palabra que comienza con un carácter de tilde sin comillas (~) está sujeta a la expansión de tilde. Todos los caracteres hasta una barra (/) o el final de la palabra se tratan como un nombre de usuario y se reemplazan con el directorio de inicio del usuario. Si falta el nombre de usuario (como en ~ / foobar), la tilde se reemplaza con el valor de CASA variable (directorio de inicio del usuario actual). El formato para la expansión de parámetros es el siguiente: $ {expresión} donde la expresión consta de todos los caracteres hasta que la ``} '' coincidente Cualquier ``} '' escapada por una barra invertida o dentro de una cadena entre comillas, y los caracteres en las expansiones aritméticas incrustadas, las sustituciones de comandos y las expansiones variables, no se examinan para determinar la ``} '' La forma más simple para la expansión de parámetros es: $ {parámetro} El valor del parámetro, si lo hubiera, se sustituye. El nombre o el símbolo del parámetro se pueden incluir entre llaves, que son opcionales, excepto para los parámetros posicionales con más de un dígito o cuando el parámetro va seguido de un carácter que podría interpretarse como parte del nombre. Si se produce una expansión de parámetros dentro de comillas dobles: La expansión del nombre de ruta no se realiza en los resultados de la expansión. La división de campos no se realiza en los resultados de la expansión, con la excepción de @. Además, la expansión de un parámetro se puede modificar utilizando uno de los siguientes formatos. $ {parámetro: -word} Utilice los valores predeterminados. Si el parámetro no está definido o es nulo, la expansión de la palabra se sustituye; de lo contrario, se sustituye el valor del parámetro. $ {parámetro: = palabra} Asignar valores por defecto. Si el parámetro no está definido o es nulo, la expansión de la palabra se asigna al parámetro. En todos los casos, se sustituye el valor final del parámetro. Sólo las variables, no los parámetros posicionales o los parámetros especiales, se pueden asignar de esta manera. $ {parámetro:? palabra} Indica error si es nulo o no está configurado. Si el parámetro no está establecido o es nulo, la expansión de la palabra (o un mensaje que indica que no se ha establecido si se omite la palabra) se escribe en el error estándar y el shell sale con un estado de salida distinto de cero. De lo contrario, se sustituye el valor del parámetro. Un shell interactivo no necesita salir. $ {parámetro: + palabra} Utilice el valor alternativo. Si el parámetro no está definido o es nulo, se sustituye nulo; De lo contrario, se sustituye la expansión de la palabra. En las expansiones de parámetros mostradas anteriormente, el uso de los dos puntos en el formato da como resultado una prueba para un parámetro que no está establecido o es nulo; la omisión de los dos puntos da como resultado una prueba para un parámetro que solo está desactivado. $ {# parámetro} Longitud de la cuerda. La longitud en caracteres del valor del parámetro. Las siguientes cuatro variedades de expansión de parámetros proporcionan para el procesamiento de subcadenas. En cada caso, se utiliza la notación de coincidencia de patrones (consulte Patrones de shell), en lugar de la notación de expresión regular, para evaluar los patrones. Si el parámetro es * o @, el resultado de la expansión no se especifica. La inclusión de la cadena de expansión de parámetro completo entre comillas dobles no hace que se citen las siguientes cuatro variedades de caracteres de patrón, mientras que la cita de caracteres dentro de las llaves tiene este efecto. $ {parámetro% palabra} Eliminar el patrón de sufijo más pequeño. La palabra se expande para producir un patrón. La expansión del parámetro da como resultado un parámetro, con la porción más pequeña del sufijo que coincide con el patrón eliminado. $ {parámetro %% palabra} Eliminar el patrón de sufijo más grande.La palabra se expande para producir un patrón. La expansión del parámetro da como resultado un parámetro, con la mayor parte del sufijo que coincide con el patrón eliminado. $ {parámetro # palabra} Eliminar el patrón de prefijo más pequeño. La palabra se expande para producir un patrón. La expansión del parámetro da como resultado un parámetro, con la porción más pequeña del prefijo que coincide con el patrón eliminado. $ {parámetro ## palabra} Eliminar el patrón de prefijo más grande. La palabra se expande para producir un patrón. La expansión del parámetro da como resultado un parámetro, con la mayor parte del prefijo que coincide con el patrón eliminado. Sustitución de comandos La sustitución de comandos permite sustituir la salida de un comando en lugar del nombre del comando en sí. La sustitución de comandos se produce cuando el comando se incluye de la siguiente manera: $ (comando) o Po `` backquoted '' versión PC: `comando` El shell expande la sustitución del comando ejecutando el comando en un entorno de subshell y reemplazando la sustitución del comando con la salida estándar del comando, eliminando secuencias de uno o más La expansión aritmética proporciona un mecanismo para evaluar una expresión aritmética y sustituir su valor. El formato para la expansión aritmética es el siguiente: $ ((expresión)) La expresión se trata como si estuviera entre comillas dobles, excepto que una comilla doble dentro de la expresión no se trata especialmente. El shell expande todos los tokens en la expresión para expansión de parámetros, sustitución de comandos y eliminación de comillas. A continuación, el shell trata esto como una expresión aritmética y sustituye el valor de la expresión. Después de la expansión de parámetros, la sustitución de comandos y la expansión aritmética, el shell escanea los resultados de las expansiones y sustituciones que no se produjeron entre comillas dobles para la división de campos y se pueden producir varios campos. La concha trata a cada personaje de laIFS como un delimitador y use los delimitadores para dividir los resultados de la expansión de parámetros y la sustitución de comandos en campos. A menos que el -F se establece el indicador, la generación del nombre de archivo se realiza después de completar la división de palabras. Cada palabra se ve como una serie de patrones, separados por barras. El proceso de expansión reemplaza la palabra con los nombres de todos los archivos existentes cuyos nombres pueden formarse reemplazando cada patrón con una cadena que coincide con el patrón especificado. Hay dos restricciones en esto: primero, un patrón no puede coincidir con una cadena que contiene una barra diagonal, y segundo, un patrón no puede coincidir con una cadena que comienza con un punto a menos que el primer carácter del patrón sea un punto. La siguiente sección describe los patrones utilizados para la Expansión del nombre de ruta y el comando de caso (1). Un patrón consta de caracteres normales, que coinciden con ellos mismos, y de meta-caracteres. Los metacaracteres son ``! '' `` * '' ``? '' Y `` '' Estos caracteres pierden sus significados especiales si se los cita. Cuando se realiza el comando o la sustitución de variables y el signo de dólar o las cotizaciones de respaldo no se incluyen entre comillas dobles, el valor de la variable o la salida del comando se analiza en busca de estos caracteres y se convierten en meta-caracteres. Un asterisco (`` * '') coincide con cualquier cadena de caracteres. Un signo de interrogación coincide con cualquier carácter individual. Un corchete izquierdo (`` '') introduce una clase de caracteres. El final de la clase de caracteres se indica con un (`` '') si falta el `` '', entonces el `` '' coincide con un `` '' en lugar de introducir una clase de caracteres. Una clase de caracteres coincide con cualquiera de los caracteres entre los corchetes. Se puede especificar un rango de caracteres usando un signo menos. La clase de caracteres se puede complementar haciendo que un signo de exclamación sea el primer carácter de la clase de caracteres. Para incluir un `` '' en una clase de caracteres, conviértalo en el primer carácter listado (después de ``! '', Si corresponde). Para incluir un signo menos, conviértalo en el primer o último carácter listado Esta sección enumera los comandos incorporados que están incorporados porque necesitan realizar alguna operación que no puede ser realizada por un proceso separado. Además de estos, hay varios otros comandos que pueden incorporarse para la eficiencia (por ejemplo, eco 1). : Un comando nulo que devuelve un valor de salida 0 (verdadero). . expediente Los comandos en el archivo especificado son leídos y ejecutados por el shell. alias nombre = cadena … Si nombre = cadena Se especifica, el shell define el alias. nombre con valor cuerda Si solo nombre Se especifica, el valor del alias. nombre está impreso. Sin argumentos, laalias builtin imprime los nombres y valores de todos los alias definidos (verunalias) bg trabajo … Continúe con los trabajos especificados (o el trabajo actual si no se asignan trabajos) en segundo plano. mando comando arg … Ejecute el comando incorporado especificado. (Esto es útil cuando tiene una función de shell con el mismo nombre que un comando incorporado). discos compactos directorio Cambiar al directorio especificado (por defecto$ HOME) Si una entrada paraCDPATH Aparece en el entorno de ladiscos compactos comando o la variable de shellCDPATH está establecido y el nombre del directorio no comienza con una barra inclinada, luego los directorios listados enCDPATH Se buscará el directorio especificado. El formato deCDPATH es el mismo que el deCAMINO En una shell interactiva, eldiscos compactos comando imprimirá el nombre del directorio al que realmente cambió si este es diferente del nombre que dio el usuario. Estos pueden ser diferentes ya sea porqueCDPATH Se utilizó el mecanismo o porque se cruzó un enlace simbólico. evaluar cuerda… Concatenar todos los argumentos con espacios. Luego vuelva a analizar y ejecute el comando. exec comando arg … A menos que se omita el comando, el proceso de shell se reemplaza con el programa especificado (que debe ser un programa real, no un shell incorporado o una función). Cualquier redirección en elexecLos comandos se marcan como permanentes, de modo que no se deshacen cuando elexec comando termina salida estado de salida Terminar el proceso de shell. Si estado de salida se da se usa como el estado de salida del shell; de lo contrario, se utiliza el estado de salida del comando anterior. exportar nombre… exportar -p Los nombres especificados se exportan para que aparezcan en el entorno de los comandos subsiguientes. La única forma de anular la exportación de una variable es anularla. El shell permite que el valor de una variable se establezca al mismo tiempo que se exporta escribiendo nombre de exportación = valor Sin argumentos, el comando de exportación enumera los nombres de todas las variables exportadas. Con el -pagOpción especificada, la salida se formateará adecuadamente para uso no interactivo. fc-mi editor primero último fc -l -nr primero último fc -s viejo = nuevo primero losfc listas integradas, o edita y vuelve a ejecutar, los comandos ingresados previamente en un shell interactivo. -e editor Utilice el editor nombrado por editor para editar los comandos. La cadena del editor es un nombre de comando, sujeto a búsqueda a través deCAMINO variable. El valor en elFCEDIT la variable se usa por defecto cuando -mi no se especifica SiFCEDIT es nulo o no está configurado, el valor deEDITOR Se utiliza la variable. SiEDITOR es nulo o no está establecido, ed (1) se utiliza como editor. -l (ell) Listar los comandos en lugar de invocar un editor en ellos. Los comandos se escriben en la secuencia indicada por el primero y el último operando, según se ven afectados por:r con cada comando precedido por el número de comando. -norte Suprimir los números de comando al listar con -l. -r Invertir el orden de los comandos enumerados (con -l o editado (con ninguna -l nis) -s Vuelva a ejecutar el comando sin invocar un editor. primero último Seleccione los comandos para listar o editar. El número de comandos previos a los que se puede acceder está determinado por el valor delHISTSIZE variable. El valor de primero o último o ambos son uno de los siguientes: + número Un número positivo que representa un número de comando; Los números de comando se pueden mostrar con el -l opción. -número Un número decimal negativo que representa el comando que se ejecutó anteriormente. Por ejemplo, -1 es el comando inmediatamente anterior. cuerda Una cadena que indica el comando ingresado más recientemente que comienza con esa cadena. Si el antiguo = nuevo operando no se especifica con -s La forma de cadena del primer operando no puede contener un signo igual incrustado. Las siguientes variables de entorno afectan la ejecución de fc: FCEDIT Nombre del editor a utilizar. HISTSIZE El número de comandos anteriores que son accesibles. fg trabajo Mueva el trabajo especificado o el trabajo actual al primer plano. getopts optstring var losPOSIX getopts comando, que no debe confundirse con el Bell Labs Derivado de getopt (1). El primer argumento debe ser una serie de letras, cada una de las cuales puede ir seguida de forma opcional por dos puntos para indicar que la opción requiere un argumento. La variable especificada se establece en la opción analizada. losgetopts el comando deja de usar la utilidad getopt (1) anterior debido a su manejo de argumentos que contienen espacios en blanco. losgetopts builtin se puede utilizar para obtener opciones y sus argumentos de una lista de parámetros. Cuando se invoca,getopts coloca el valor de la siguiente opción de la cadena de opción en la lista en la variable de shell especificada por var y es índice en la variable de shellOptar Cuando se invoca el shell,Optar se inicializa a 1. Para cada opción que requiere un argumento, elgetopts builtin lo colocará en la variable shellOPTARG Si una opción no está permitida en el optstring entoncesOPTARG será desarmado optstring Es una cadena de letras opcionales reconocidas. Si una letra va seguida de dos puntos, se espera que la opción tenga un argumento que puede estar o no separado por un espacio en blanco. Si no se encuentra un carácter de opción donde se esperaba,getopts establecerá la variable var a un ``? ''getopts entonces se desarmaráOPTARG y escribir salida a error estándar. Al especificar dos puntos como el primer carácter de optstring Todos los errores serán ignorados. Se devuelve un valor distinto de cero cuando se alcanza la última opción. Si no quedan argumentos,getopts establecerá var a la opción especial, `` - '' de lo contrario, se establecerá var a ``? '' El siguiente fragmento de código muestra cómo se pueden procesar los argumentos para un comando que puede tomar las opciones a y b y la opción c que requiere un argumento. mientras que getopts abc: fhacercaso $ f enun | b) bandera = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; salida 1 ;;esachechoDesplazar `expr $ OPTIND - 1` Este código aceptará cualquiera de los siguientes como equivalente: archivo de archivo cmd -acargcmd -a -c archivo arg archivocmd -carg -a archivo de archivocmd -a -carg - archivo de archivo hash -rv mando… El shell mantiene una tabla hash que recuerda las ubicaciones de los comandos. Sin discusión alguna, lapicadillo comando imprime el contenido de esta tabla. Entradas que no se han visto desde la última.discos compactos Los comandos están marcados con un asterisco; Es posible que estas entradas no sean válidas. Con argumentos, lapicadillo comando elimina los comandos especificados de la tabla hash (a menos que sean funciones) y luego los ubica. Con el -v opción, hash imprime las ubicaciones de los comandos a medida que los encuentra. Los -r La opción hace que el comando hash elimine todas las entradas en la tabla hash, excepto las funciones. Identificación del trabajo trabajo Imprima los identificadores de proceso de los procesos en el trabajo. Si el trabajo se omite el argumento, se utiliza el trabajo actual. trabajos Este comando enumera todos los procesos en segundo plano que son hijos del proceso de shell actual. pwd Imprima el directorio actual. El comando incorporado puede diferir del programa del mismo nombre porque el comando incorporado recuerda qué es el directorio actual en lugar de volver a calcularlo cada vez. Esto lo hace más rápido. Sin embargo, si se cambia el nombre del directorio actual, la versión incorporada depwd Continuará imprimiendo el nombre antiguo del directorio. leer-pag rápido -r variable… El aviso se imprime si el -pag Se especifica la opción y la entrada estándar es un terminal. Luego se lee una línea de la entrada estándar. La nueva línea final se elimina de la línea y la línea se divide como se describe en la sección sobre división de palabras anterior, y las partes se asignan a las variables en orden. Al menos una variable debe ser especificada. Si hay más piezas que variables, las piezas restantes (junto con los caracteres enIFS que los separaron) se asignan a la última variable. Si hay más variables que piezas, a las variables restantes se les asigna la cadena nula. losleer builtin indicará éxito a menos que se encuentre EOF en la entrada, en cuyo caso se devuelve la falla. Por defecto, a menos que el -r se especifica la opción, la barra diagonal inversa `` '' actúa como un carácter de escape, haciendo que el siguiente carácter sea tratado literalmente. Si una barra invertida va seguida de una nueva línea, la barra invertida y la nueva línea se eliminarán. solo lectura nombre… readonly -p Los nombres especificados están marcados como de solo lectura, por lo que no pueden modificarse o anularse posteriormente. El shell permite que el valor de una variable se establezca al mismo tiempo que se marca como de lectura y escritura. nombre de solo lectura = valor Sin argumentos, el comando readonly enumera los nombres de todas las variables de solo lectura. Con el -pag Opción especificada, la salida se formateará adecuadamente para uso no interactivo. conjunto { -opciones | + opciones | - arg … losconjunto comando realiza tres funciones diferentes. Sin argumentos, enumera los valores de todas las variables de shell. Si se dan opciones, establece los indicadores de opción especificados, o los borra como se describe en la sección llamada Sx Argument List Processing. El tercer uso del comando set es establecer los valores de los parámetros posicionales del shell en los argumentos especificados. Para cambiar los parámetros posicionales sin cambiar ninguna opción, use `` - '' como primer argumento para establecer. Si no hay argumentos presentes, el comando set borrará todos los parámetros posicionales (equivalente a ejecutar `` shift $ #. '' valor variable Asigna valor a la variable. (En general, es mejor escribir variable = valor en lugar de usarsetvar setvarestá destinado a ser utilizado en funciones que asignan valores a variables cuyos nombres se pasan como parámetros.) cambio norte Cambia los parámetros posicionales n veces. UNAcambio establece el valor de $1 al valor de $2 El valor de $2 al valor de $3 y así sucesivamente, disminuyendo el valor de $# por uno. Si n es mayor que el número de parámetros posicionales,cambio emitirá un mensaje de error y saldrá con el estado de retorno 2. veces Imprima los tiempos acumulados de usuario y sistema para el shell y para los procesos ejecutados desde el shell. El estado de retorno es 0. trampa acción señal… Causa que el shell analice y ejecute la acción cuando se reciba cualquiera de las señales especificadas. Las señales se especifican por número de señal. Si señal es0 La acción se ejecuta cuando el shell sale. acción puede ser nulo o `` - '' el primero hace que se ignore la señal especificada y el segundo hace que se realice la acción predeterminada. Cuando el shell se desvanece de una subshell, restablece las señales atrapadas (pero no ignoradas) a la acción predeterminada. lostrampa El comando no tiene efecto en las señales que se ignoraron al ingresar al shell. tipo nombre … Interprete cada nombre como un comando e imprima la resolución de la búsqueda de comandos. Las posibles soluciones son: palabra clave de shell, alias, componente de shell, comando, alias rastreado y no encontrado. Para los alias se imprime la expansión de alias; para comandos y alias rastreados se imprime la ruta completa del comando. ulimit-H -S -a -tfdscmlpn valor Pregunte o establezca los límites rígidos o flexibles de los procesos o establezca nuevos límites.La elección entre el límite rígido (que no se permite violar ningún proceso y que no se puede elevar una vez que se ha rebajado) y el límite blando (que hace que los procesos se señalicen pero no se eliminen necesariamente, y que se pueda elevar) se realiza con estas banderas: -H establecer o preguntar sobre límites duros -S establecer o preguntar acerca de los límites suaves. Si ningunoH niS se especifica, se muestra el límite flexible o se establecen ambos límites. Si se especifican ambos, el último gana. El límite a ser interrogado o establecido, entonces, se elige especificando cualquiera de estas banderas: -una Mostrar todos los límites actuales. -t muestra o establece el límite de tiempo de CPU (en segundos) -F muestre o establezca el límite en el archivo más grande que se puede crear (en bloques de 512 bytes) -re Mostrar o establecer el límite en el tamaño del segmento de datos de un proceso (en kilobytes) -s Mostrar o establecer el límite en el tamaño de pila de un proceso (en kilobytes) -do muestre o establezca el límite en el tamaño de volcado de núcleo más grande que se puede producir (en bloques de 512 bytes) -metro mostrar o establecer el límite en la memoria física total que puede estar en uso por un proceso (en kilobytes) -l mostrar o establecer el límite de la cantidad de memoria que un proceso puede bloquear con mlock (2) (en kilobytes) -pag mostrar o establecer el límite en el número de procesos que este usuario puede tener al mismo tiempo -norte mostrar o establecer el límite en el número de archivos que un proceso puede tener abierto a la vez Si no se especifica ninguno de estos, el límite de tamaño de archivo se muestra o se establece. Si se especifica un valor, el límite se establece en ese número; de lo contrario se muestra el límite actual. Los límites de un proceso arbitrario se pueden mostrar o configurar usando la utilidad sysctl (8). umask máscara Establezca el valor de umask (consulte umask (2)) en el valor octal especificado. Si se omite el argumento, se imprime el valor de umask. unalias-una nombre Si nombre se especifica, el shell elimina ese alias. Si -una Se especifica, se eliminan todos los alias. desarmado nombre… Las variables y funciones especificadas no están establecidas ni se exportan. Si un nombre dado corresponde tanto a una variable como a una función, tanto la variable como la función quedan sin configurar. Espere trabajo Espere a que finalice el trabajo especificado y devuelva el estado de salida del último proceso en el trabajo. Si se omite el argumento, espere a que se completen todos los trabajos y devuelva un estado de salida de cero. Cuandosh se está utilizando de forma interactiva desde un terminal, el comando actual y el historial de comandos (verfc en Sx Builtins) se puede editar utilizando la edición de línea de comandos en modo vi. Este modo utiliza comandos, descritos a continuación, similares a un subconjunto de los descritos en la página de manual de vi. El comando `set '-o vi habilita la edición en modo vi y coloca sh en el modo de inserción vi. Con el modo vi activado, se puede cambiar entre modo de inserción y modo de comando. El editor no se describe en su totalidad aquí, pero estará en un documento posterior. Es similar a vi: al escribir Aq ESC, pasará al modo de comando VI. Si pulsa AQ en el modo de comando, la línea pasará a la shell. Utilizar el hombre comando % hombre ) para ver cómo se usa un comando en su computadora en particular. Citando
Barra invertida
Comillas simples
Doble comillas
Palabras reservadas
Alias
Comandos
Comandos simples
Búsqueda y ejecución
Búsqueda de ruta
Comandos complejos
Oleoductos
Comandos de fondo -
Listas - Hablando en general
Lista de operadores de cortocircuito
Construcciones de control de flujo - si, mientras, para, caso
Agrupando Comandos Juntos
Variables y parámetros
Parámetros posicionales
Parámetros especiales
Expansión de Tilde (sustituyendo el directorio de inicio de un usuario)
Expansión de parámetros
Expansión aritmética
División del espacio en blanco (división del campo)
Expansión del nombre de ruta (generación de nombre de archivo)
Patrones de Shell
Builtins
Edición de línea de comandos




