C Shell

C shell
Muestra la shells tcsh y sh  Unix ejecutándose en escritorio Mac OSX.
Información general
Desarrollador(es) Bill Joy
Autor(es) Bill Joy
Lanzamiento inicial 1978
Última versión estable 6.20.00
Género Shell
Programado en C
Sistema operativo BSD, Unix, Mac OSX, GNU/Linux
Licencia BSD
[ editar datos en Wikidata]

C shell es un intérprete de comandos ( shell) de Unix (llamado csh o tcsh) creado por Bill Joy al graduarse de la Universidad de Bekeley en California en 1970. Las primeras versiones se distribuyeron con el sistema operativo 2 BSD en el año de 1978.[3]

Csh es un intérprete de comandos que se ejecuta en una ventana en modo texto, y permite al usuario ingresar comandos. También puede leer comandos desde un fichero de texto llamado script y como toda shell de Unix soporta comodines y tuberías para referirse a los nombres de ficheros, sustitución de comandos, variables, condicionales e interacción. Lo que diferenciaba la shell C de otras (en 1980) fueron sus características interactivas y el estilo general. Las nuevas características lo hicieron más fácil y rápido de usar, también destacaba el lenguaje de comandos similar al lenguaje de programación C.

En muchos sistemas como Mac OS X y Red Hat, chs es tcsh, una versión mejorada de csh. A menudo cualquiera de los dos nombres (csh o tcsh) es un enlace simbólico a la versión mejorada de C shell (tcsh).

En Debian y algunos derivados ( Ubuntu) hay dos paquetes diferentes, csh y tcsh. El primero se basa en la versión original para BSD[7]

tcsh agregó nombres de archivos, terminación de línea de comandos y la capacidad de editar líneas de comando que tomó prestado del sistema Tenex, por el cual lleva la letra "t" .[9]​ solo agregó funcionalidad y no cambió mucho se mantuvo compatible con la C shell original.

tcsh inició como una rama lateral a partir del código inicial que Bill Joe había escrito. tcsh es ahora la rama principal que se continua desarrollando, se mantiene estable y las versiones son publicadas alrededor del año y consisten en pequeñas correcciones de errores.[10]

Estilo C

El sistemas operativo Unix se había escrito exclusivamente en C, así que el primer objetivo de C shell fue un lenguaje de comandos que poseyera un estilo consistente con el resto del sistema.

El uso de palabras claves, paréntesis, gramática integrada y el soporte de matrices de C shell fueron estrechamente influenciadas por el lenguaje C.

El siguiente ejemplo muestra la sintaxis, expresiones y diferencias entre csh y sh.

Bourne shell

#!/bin/sh
if [ $días -gt 365 ]
then
   echo Ha pasado más de un año.
fi

C shell

#!/bin/csh
if ( $días > 365 ) then
   echo Ha pasado más de un año.
endif

sh carecía de expresiones gramáticas. La condición entre corchetes era evaluada de forma lenta, esto quería decir que necesitaba correr programas externos para realizar dicha comprobación. sh tomaba palabras como argumentos y comandos que debían ser ejecutado como proceso hijos. Si el proceso hijo daba un código de retorno cero, entonces sh buscaría una cláusula then (una sentencia separada pero a menudo escrita en la misma línea con un punto y coma) y ejecutaría el bloque anidado, de lo contrario se ejecutaría el resto. La vinculación del programa "test" y "[" dio una ventaja de notación a los corchetes y la apariencia que la funcionalidad test era parte del lenguaje. sh usó una palabra clave invertida para marcar el final de un bloque de control, fue un estilo tomado de ALGOL68.[11]


Por el contrario csh podía evaluar expresiones directamente, lo que la hacía más rápida. Tenía mejor legibilidad: Sus expresiones utilizaban una gramática y un conjunto de operadores copiado en su mayoría del lenguaje C; ninguna de sus palabras claves se invirtieron y su estilo era parecido al de C.

Un segundo ejemplo, comparando scripts que calculan las primeras 10 potencias de 2.

Bourne shell

#!/bin/sh
i=2
j=1
while [ $j -le 10 ]
do
   echo '2 **' $j = $i
   i=`expr $i '*' 2`
   j=`expr $j + 1`
done

C shell

#!/bin/csh
set i = 2
set j = 1
while ( $j <= 10 )
   echo '2 **' $j = $i
   @ i *= 2
   @ j++
end

Debido a la falta de expresión gramática, el script sh utiliza la sustitución de comando y el comando expr. La declaración @ en C shell es un juego de palabras, es la sentencia "at-sign-ment".

Tenemos un tercer ejemplo mostrando un estilo para una instrucción switch.

Bourne shell

#!/bin/sh
for i in d*
do
   case $i in
      d?) echo $i is short ;;
      *) echo $i is long ;;
   esac
done

C shell

#!/bin/csh
foreach i ( d* )
   switch ( $i )
      case d?:
         echo $i is short
         breaksw
      default:
         echo $i is long
   endsw
end

En el script sh ";;" marca el final de cada caso debido a que sh no permite declaraciones nulas.

Other Languages
azərbaycanca: C shell
čeština: C shell
English: C shell
فارسی: سی شل
français: C shell
עברית: C Shell
italiano: C shell
日本語: C Shell
한국어: C 셸
norsk: C shell
polski: Csh
português: Csh
русский: Csh
shqip: C shell
svenska: C shell
українська: Csh
中文: C Shell