Comando sh de Linux

En Tipo Unix sistemas operativos, sh es el nombre de comando del shell Bourne, el lenguaje de comando estándar Interprete de Unix Y muchos Tipo Unix sistemas operativos , incluyendo Linux .
- Sintaxis
- Ejemplos de
- Comandos relacionados
- Ayuda de comandos de Linux
Sintaxis
|_+_|Descripción e historia
sh es un intérprete de lenguaje de comandos que ejecuta comandos leídos de un línea de comando cuerda , la entrada estándar , o un especificado expediente .
El caparazón de Bourne fue desarrollado en 1977 por Stephen Bourne en AT&T 's Laboratorios Bell en 1977. Era el shell predeterminado de Unix Versión 7. La mayoría de los sistemas similares a Unix contienen el archivo / bin / sh que es el caparazón de Bourne, o un enlace simbólico (o enlace fijo) a un shell compatible.
El Bourne Shell se desarrolló originalmente como un reemplazo del shell Thompson, cuyo Archivo ejecutable también fue nombrado sh . Aunque se usa como comando interactivo Interprete , su propósito original era funcionar como un guion idioma.
Las características del Bourne Shell incluyen:
- Los scripts se pueden invocar como comandos usando su Nombre del archivo .
- El caparazón se puede utilizar de forma interactiva o no interactiva.
- Los comandos se pueden ejecutar de forma sincrónica o asincrónica.
- El shell admite la redirección de entrada y salida y las canalizaciones.
- Un conjunto robusto de comandos integrados.
- Construcciones de control de flujo, facilidades de cotización y funciones .
- Sin tipo variables .
- Ámbitos de variables locales y globales.
- Los guiones se pueden interpretar, es decir, no tienen que ser compilado para ser ejecutado.
- Sustitución de comandos utilizando comillas inversas, por ejemplo: ' mando ' .
- 'Aquí documentos': el uso de << para incrustar un bloque de texto de entrada dentro de una secuencia de comandos.
- ' por / hacer / hecho 'bucles, en particular el uso de $* para recorrer los argumentos.
- ' caso / en / esac 'mecanismo de selección, principalmente destinado a ayudar a la argumentación analizando .
- Apoyo para Variables de entorno utilizando parámetros de palabras clave y variables exportables.
- Disposiciones sólidas para controlar la entrada y la salida y en sus instalaciones de comparación de expresiones.
El uso de Bourne Shell ha sido reemplazado en gran medida por Bourne-Again Shell ( intento ), que admite funciones interactivas más fáciles de usar, como el control de trabajos y un historial de comandos .
Comandos
A comando simple es una secuencia de palabras que no están en blanco separadas por espacios en blanco (un espacio en blanco es una tabulación o un espacio). La primera palabra especifica el nombre del comando que se ejecutará. Excepto como se especifica a continuación, las palabras restantes se pasan como argumentos al comando invocado. El nombre del comando se pasa como argumento 0 (ver ejecutivo ). El valor de un comando simple es su estado de salida si termina normalmente o el estado 200 + si termina anormalmente (consulte nuestro descripción general de las señales del sistema operativo para obtener una lista de valores de estado).
A tubería es una secuencia de uno o más comandos separados por una barra vertical (' | '). La salida estándar de cada comando, pero el último está conectado por una tubería al entrada estándar del siguiente comando. Cada comando se ejecuta como un proceso independiente; el shell espera a que termine el último comando. El valor de una canalización es el estado de salida de su último comando.
A lista es una secuencia de una o más canalizaciones separadas por ' ; ', ' & ', ' && ' o ' || 'y opcionalmente terminado por' ; ' o ' & '. ' ; ' y ' & 'tienen igual precedencia que es menor que la de' && ' y ' || ', ' && ' y ' || 'también tienen igual precedencia. Un punto y coma provoca una ejecución secuencial; un ampersand hace que la canalización anterior se ejecute sin esperar a que finalice. El símbolo ' && ' (' || ') hace que la siguiente lista se ejecute solo si la canalización anterior devuelve un valor cero (distinto de cero). Newlines puede aparecer en una lista, en lugar de punto y coma, para delimitar comandos.
A ' # 'al principio de una palabra comienza un comentario y hace que se ignore el resto de la línea.
A mando es un comando simple o uno de los siguientes. El valor devuelto por un comando es el del último comando simple ejecutado en el comando:
por nombre [ en palabra ...] hacer lista hecho | En bucle . Cada vez que un por se ejecuta el comando, nombre está configurado para el siguiente palabra en el por lista de palabras. Si ' en palabra ... 'se omite, entonces' en '[correo electrónico protegido]' ' se supone. La ejecución finaliza cuando no hay más palabras en la lista. |
caso palabra en [ patrón [ | patrón ] ... ) lista ;; ] ... esac | A caso comando ejecuta el lista asociado con el primero patrón eso combina palabra . La forma de los patrones es la misma que se usa para la generación de nombres de archivos. |
Si lista luego lista [ elif lista luego lista ] ... [ demás lista ] ser | La lista siguiente Si se ejecuta, y si devuelve cero, el lista siguiente luego es ejecutado. De lo contrario, el lista siguiente elif ('else if') se ejecuta y si su valor es cero, el lista siguiente luego es ejecutado. Si falla el demás lista es ejecutado. |
tiempo lista [ hacer lista ] hecho | A tiempo comando ejecuta repetidamente el tiempo lista , y si su valor es cero, ejecuta el hacer lista ; de lo contrario, el bucle termina. El valor devuelto por un tiempo comando es el del último comando ejecutado en el hacer lista . Hasta que puede usarse en lugar de tiempo para negar la prueba de terminación de bucle. |
( lista ) | Ejecutar lista en una subcapa. |
{ lista ; } | La lista es ejecutado. |
nombre () { lista ; } | Define la función de shell nombre . Cada vez nombre se reconoce como un comando, lista se ejecuta, con los parámetros posicionales $1 , $2 ... establecido en los argumentos del comando. Una vez que la función regresa, se restauran los parámetros posicionales anteriores. |
Las siguientes palabras solo se reconocen como la primera palabra de un comando y cuando no están entre comillas:
- Si
- luego
- demás
- elif
- ser
- caso
- en
- esac
- por
- tiempo
- Hasta que
- hacer
- hecho
- {
- }
Sustitución de comando
La salida estándar de un comando encerrado en un par de acentos graves ( '' ) se puede utilizar como parte o en su totalidad de una palabra; Se eliminan las nuevas líneas finales. Por ejemplo, si el script ejecutable echotest.sh contenía el comando:
|_+_|Luego, ejecutar el script mostraría la salida combinada de echo y nombre de base :
|_+_|Sustitución de parámetros
El personaje $ se utiliza para introducir parámetros sustituibles. A los parámetros posicionales se les pueden asignar valores mediante colocar . Las variables se pueden establecer en la forma ' nombre = valor [ nombre = valor ] ...'.
${ parámetro } | A parámetro es una secuencia de letras, dígitos o guiones bajos (un nombre), un dígito o cualquiera de los caracteres * @ # ? - $ ! . Se sustituye el valor, si lo hay, del parámetro. Las llaves son necesarias solo cuando el parámetro va seguido de una letra, un dígito o un guión bajo que no debe interpretarse como parte de su nombre. Si parámetro es un dígito, entonces es un parámetro posicional. Si el parámetro es * o @ luego todos los parámetros posicionales, comenzando con $1 , se sustituyen separados por espacios. $0 se establece desde el argumento cero cuando se invoca el shell. |
${ parámetro :- palabra } | Si parámetro está establecido y no está vacío, luego sustituya su valor; de lo contrario sustituir palabra . |
${ parámetro := palabra } | Si parámetro no está configurado y no está vacío, luego configúrelo en palabra ; luego se sustituye el valor del parámetro. Los parámetros de posición no se pueden asignar de esta manera. |
${ parámetro :? palabra } | Si parámetro está establecido y no está vacío, luego sustituya su valor; de lo contrario, imprimir palabra y salir del caparazón. Si palabra se omite, se imprime un mensaje estándar. |
${ parámetro :+ palabra } | Si parámetro está configurado y no vacío, luego sustitúyalo palabra ; de lo contrario no sustituyas nada. |
Si el : se omite, las sustituciones solo se ejecutan si el parámetro está configurado, incluso si está vacío.
En lo anterior, palabra no se evalúa a menos que se utilice como cadena sustituida. Así por ejemplo, ' echo $ {d-'pwd '}' solo ejecutará pwd Si D está desarmado.
El shell establece automáticamente los siguientes parámetros:
# | El número de parámetros posicionales, en decimal. |
- | Opciones proporcionadas al shell en la invocación o por colocar . |
? | El valor devuelto por el último comando ejecutado, en decimal. |
$ | El número de proceso de este shell. |
! | El número de proceso del último comando en segundo plano invocado. |
El shell utiliza los siguientes parámetros:
CDPATH | La ruta de búsqueda del cd mando. |
CASA | El argumento predeterminado (directorio de inicio) para el cd mando. |
OPTARG | El valor del último argumento de opción procesado por el getopts comando especial. |
optando | El índice de la última opción procesada por el getopts comando especial. |
CAMINO | La ruta de búsqueda de comandos (ver Ejecución ). |
CORREO | Si esta variable se establece en el nombre de un archivo de correo, el shell informa al usuario de la llegada del correo en el archivo especificado. |
CORREO | Si se establece esta variable, se interpreta como un valor en segundos para esperar entre las comprobaciones de correo nuevo. El valor predeterminado es 600 (10 minutos). Si el valor es cero, se comprueba el correo antes de cada solicitud. |
MAILPATH | Una lista de archivos separados por dos puntos que se comprueban en busca de correo nuevo. MAIL se ignora si se establece esta variable. |
PS1 | Cadena de solicitud principal, de forma predeterminada '$ ' . |
PS2 | Cadena de solicitud secundaria, de forma predeterminada '> ' . |
IFS | Separadores de campo internos, normalmente espacio, tabulación y nueva línea. |
LANG , LC_ALL | Variables locales. |
LC_CTYPE | Afecta la asignación de bytes a caracteres para la generación de nombres de archivos, para la interpretación de ' ', y para manipular $ IFS . |
SHACCT | Si esta variable se establece en el entorno inicial que se pasa al shell y apunta a un archivo en el que el usuario puede escribir, se escriben estadísticas de contabilidad. |
SE ACABÓ EL TIEMPO | El shell existe cuando se solicita una entrada si no se ingresa ningún comando por más del valor dado en segundos. Un valor de cero significa que no hay tiempo de espera y es el valor predeterminado. |
Interpretación en blanco
Después de la sustitución de parámetros y comandos, los resultados de la sustitución se escanean en busca de caracteres separadores de campo internos (los que se encuentran en $ IFS ) y dividirlos en distintos argumentos donde se encuentren dichos caracteres. Argumentos nulos explícitos ( '' o '' ) se conservan. Se eliminan los argumentos nulos implícitos (los que resultan de parámetros que no tienen valores).
Generación de nombre de archivo
Después de la sustitución, cada palabra de comando se escanea en busca de los caracteres * ', ' ? ' y ' [ '. Si aparece uno de estos caracteres, la palabra se considera un patrón. La palabra se reemplaza con nombres de archivo ordenados alfabéticamente que coinciden con el patrón. Si no se encuentra ningún nombre de archivo que coincida con el patrón, la palabra no se modifica. El personaje . al comienzo de un nombre de archivo o inmediatamente después de un ' / ', y el personaje' / ', debe coincidir explícitamente.
* | Coincide con cualquier cadena, incluida la cadena nula. |
? | Coincide con cualquier carácter individual. |
[ ... ] | Coincide con cualquiera de los caracteres incluidos. Un par de caracteres separados por - coincide con cualquier carácter léxico entre el par. |
[! ... ] | Coincide con cualquier carácter excepto los incluidos. |
Cotización
Los siguientes caracteres tienen un significado especial para el shell y provocan la terminación de una palabra a menos que se citen:
- ;
- &
- (
- )
- |
- ^
- <
- >
- nueva línea
- espacio
- pestaña
Se puede citar un carácter precediéndolo con un ' '. ' \ nueva línea 'se ignora. Todos los caracteres encerrados entre un par de comillas ( '' ), excepto una comilla simple, se cotizan. Dentro de comillas dobles ( '' ) se produce la sustitución de parámetros y comandos y ' 'cita a los personajes , ' ' y $ .
' $* ' es equivalente a ' $1 $2 ...', mientras que ' [correo electrónico protegido] ' es equivalente a ' '$1' '$2' ...'.
Incitación
Cuando se usa de forma interactiva, el shell solicita el valor de $ PS1 antes de leer un comando. Si en algún momento se escribe una nueva línea y se necesitan más datos para completar un comando, entonces el indicador secundario ( $ PS2 ) se emite.
Entrada y salida
Antes de que se ejecute un comando, su entrada y salida pueden ser redirigidas usando una notación especial interpretada por el shell. Lo siguiente puede aparecer en cualquier lugar de un comando simple o puede preceder o seguir a un comando y no se pasa al comando invocado. La sustitución ocurre antes palabra o dígito se utiliza:
< palabra | Usar archivo palabra como entrada estándar (descriptor de archivo 0). |
> palabra | Usar archivo palabra como salida estándar (descriptor de archivo 1). Si el archivo no existe, se crea; de lo contrario, se trunca a una longitud cero. |
>> palabra | Usar archivo palabra como salida estándar. Si el archivo existe, la salida se agrega (buscando al final); de lo contrario, se crea el archivo. |
<< [ - ] palabra | La entrada del shell se lee hasta una línea igual que palabra o al final del archivo. El documento resultante se convierte en la entrada estándar. Si cualquier personaje de palabra se cita, entonces no se da interpretación a los caracteres del documento; de lo contrario, se produce la sustitución de parámetros y comandos, nueva línea es ignorado, y se usa para citar a los personajes $ ' y el primer personaje de palabra . El opcional ' - 'hace que el carácter de tabulador principal se elimine del documento resultante; palabra entonces también puede ir precedido de un tabulador. |
<& dígito | La entrada estándar está duplicada del descriptor de archivo dígito . De manera similar para la salida estándar usando > . |
<&- | La entrada estándar está cerrada. De manera similar para la salida estándar usando > . |
Si uno de los anteriores está precedido por un dígito, el descriptor de archivo creado es el especificado por el dígito (en lugar del 0 o 1 predeterminado). Por ejemplo, '... 2>&1 'crea descriptor de archivo 2 ser un duplicado del descriptor de archivo 1 . Si un comando va seguido de & entonces la entrada estándar predeterminada para el comando es el archivo vacío ( / dev / null ), a menos que el control de trabajos esté habilitado. De lo contrario, el entorno para la ejecución de un comando contiene los descriptores de archivo del shell de invocación modificados por las especificaciones de entrada y salida.
Ambiente
La ambiente es una lista de pares nombre-valor que se pasa a un programa ejecutado de la misma forma que una lista de argumentos normal; ver ejecutivo y alrededor de . El caparazón interactúa con el medio ambiente de varias formas. En la invocación, el shell escanea el entorno y crea un parámetro para cada nombre encontrado, dándole el valor correspondiente. Los comandos ejecutados heredan el mismo entorno. Si el usuario modifica los valores de estos parámetros o crea otros nuevos, ninguno de ellos afecta el entorno a menos que se utilice el comando de exportación para vincular el parámetro del shell al entorno. El entorno visto por cualquier comando ejecutado está compuesto por cualquier par nombre-valor no modificado originalmente heredado por el shell, más cualquier modificación o adición, todo lo cual debe anotarse en los comandos de exportación.
El entorno para cualquier comando simple puede aumentarse prefijándolo con una o más asignaciones de parámetros. Por tanto, estas dos líneas son equivalentes:
|_+_| |_+_|Señales
La INTERRUPCIÓN y SALIDA señales para un comando invocado se ignoran si el comando va seguido de & (a menos que el control de trabajos esté habilitado); de lo contrario, las señales tienen los valores heredados por el shell de su padre. Ver también trampa .
Ejecución
Cada vez que se ejecuta un comando, se llevan a cabo las sustituciones anteriores. Luego, el shell primero mira si se definió una función con el nombre del comando; si es así, se elige para su ejecución. De lo contrario, a excepción de los 'comandos especiales' que se enumeran a continuación, se crea un nuevo proceso y se intenta ejecutar el comando a través de un ejecutivo .
El parámetro de shell $ RUTA define la búsqueda camino para el directorio que contiene el comando. Cada nombre de directorio alternativo está separado por dos puntos (' : '). La ruta predeterminada es ' / usr / sbin: / bin: / usr / bin: '. Si el nombre del comando contiene un / entonces no se utiliza la ruta de búsqueda. De lo contrario, se busca un archivo ejecutable en cada directorio de la ruta. Si el archivo se ha ejecutado permiso pero no es un fuera archivo, se supone que es un archivo que contiene comandos de shell. Se genera una subcapa (es decir, un proceso separado) para leerlo. Un comando entre paréntesis también se ejecuta en un subshell.
Comandos especiales
: | Sin efecto; el comando no hace nada. | |||||||||||||||||
. expediente | Leer y ejecutar comandos desde un archivo y regresar. La ruta de búsqueda $ RUTA se utiliza para encontrar el directorio que contiene expediente . | |||||||||||||||||
rotura [ norte ] | Salir del recinto por o tiempo bucle, si lo hay. Si norte se especifica luego se rompe norte niveles. | |||||||||||||||||
Seguir [ norte ] | Reanudar la siguiente iteración del adjunto por o tiempo círculo. Si norte se especifica y luego se reanuda en el norte th bucle envolvente. | |||||||||||||||||
cd [ enfadado ] | Cambiar el directorio actual a enfadado . El parámetro de shell $ HOME es el argumento predeterminado. Si no se encuentra un directorio arg y el parámetro $ CDPATH contiene una lista de directorios separados por dos puntos, cada uno de estos directorios se usa como prefijo de arg en el orden dado, y el directorio actual se establece en el primero que se encuentre. Si no se encuentra un directorio adecuado, un shell interactivo puede intentar corregir errores ortográficos y proponer un nombre de directorio alternativo: sh [-acefhikmnprstuvx] [ arg ] ... echo 'The name of this script is 'basename $0'.'Si la respuesta es ' y 'o cualquier otra cosa que' norte ', el shell establecerá el directorio actual en el propuesto. | |||||||||||||||||
echo [ enfadado ...] | Cada enfadado se imprime en salida estándar; luego, se imprime una nueva línea. Las siguientes secuencias de escape se reconocen en enfadado :
|