====== Shell de Bourne ====== El Bourne Shell fue un [[intérpretes de comandos|intérprete de comandos]] desarrollado a partir de finales de 1976 por Stephen Bourne de los [[Laboratorios Bell]], en vista de reemplazar la limitada [[sh|Shell de Thompson]] anterior. Aunque podía utilizarse como un intérprete de comandos interactivo, no era amistoso en este sentido, realmente estaba pensado para oficiar de [[lenguaje del intérprete de comandos|lenguaje de guionado]], y contenía la mayoría de las características que se asocian popularmente para producir programas estructurados. > El Shell original de Bourne no suele utilizarse más, pero todos los sistemas POSIX actuales suelen incorporar alguna implementación moderna derivada de esta shell **sh** por razones de compatibilidad absoluta y de ejecución de [[script|guiones de programación]]. ==== Historia ==== El [[sh|Shell de Thompson]] típico de las primeras ediciones de Unix se había demostrado limitado, por lo que Stephen Bourne decidió implementar una versión radical que lo superara en potencia y posibiliades. Para ello desarrolló a lo largo de 1977 una versión que no retuviese compatibilidad con el de Thompson, inspirándose en las modalidades de programación utilizadas por su lenguaje preferido por entonces, el ALGOL68, e incorporando macros de programación. Para 1979 su shell (que también recibió el nombre de fichero **sh** en la [[versiones de unix#unix septima edición|unix V7]]), reemplazó al vetusto de Thompson. A principios de la década de 1980 el shell de Bourne era uno de los más prometedores.. En vista de sus posibilidades, fue expandida por la [[AT&T]], lo que lo terminó de colocar en el podio uno de los shell estándares y el más utilizado (aunque también, uno de lenta ejecución). A finales de esta década su uso se vió disociado. =====Reglas===== La antigua shell de Bourne tienen reglas universales que inpirarían a [[Bash]]. Originalmente, incorpora las siguientes palabras clave. ''if'' ''then'' ''else'' ''elif'' ''fi'' ''case'' ''in'' ''esac'' ''for'' ''thile'' ''until'' ''do'' ''done'' ''{'' '']''. ===Sintaxis=== //Palabra//: secuencia de caracteres no nulos //nombres//: una secuencia de letras que comienzan con una letra, dígitos, o guiones bajos //dígitos//: ''0'' ''1'' ''2'' ''3'' ''4'' ''5'' ''6'' ''7'' ''8'' ''9'' comando-simple (lista-de-comandos) for nombre do lista-de-comandos donde for nombre in palabra... do lista-de-comandos done while lista-de-comandos do lista-de-comandos done until lista-de-comandos do lista-de-comandos done case palabra in case-part... esac if lista-de-comandos then lista-de-comandos else-parte fi ===Sintáctica=== ^ Carácter ^ Significado ^ | ''|'' | caño | | ''&&'' | símbolo //andf// | | ''||'' | símbolor //orf// | | '';'' | separador de comandos | | '';;'' | delimitador de ''case'' | | ''&'' | ejecuta comando en segundo plano | | ''(...)'' | agrupa comandos | | ''<'' | redirección de entrada | | ''<<'' | entrada desde un documento | | ''>'' | creación de salida | | ''>>'' | agregar a la salida | ===Patrones=== Los patrones de coincidencia pueden aplicarse mediante * ''*'': para cualquier caracter incluyendo el nulo * ''?'': patrón de coincidencia para cualquier caracter * ''[...]'': coincidencia de cualquiera de los caracteres entrecorchetados ===Sustitución=== La shell de bourne sustituye de este modo * ''${...}'' sustituye variables de shell * '''...''' sustituye salida de comandos ===Citado=== El citado se puede hacer con: * ''\'' cita el siguiente caracter * '''...''' cita los caracteres entrediéresis * ''"..."'' cita los caracteres entrecomillados, excepto ''$'' ''''' ''\'' y ''"''