Tabla de Contenidos

Diferencias entre Tcsh y Bash

Tcsh es mayormente compatible con Bash y otros intérpretes de comandos, pero cuenta con algunas diferencias notables, que lo hacen idiosincrático. Esto implica diferencias con la sintaxis de Bash

Hola Mundo

Para iniciar guiones con él, solo debes modificar la primera línea de llamada (el “bang”).

#!/bin/tcsh -f
echo "Hello World"

Variables

La sintaxis es diferente a Bash. Para configurar el valor de una variable, debemos utilizar la palabra reservada set =:

#!/bin/tcsh -f
 
set NAME = "Tutoriales Texto-plano.xyz"
echo $NAME
 
set launchdate = "Feb 25, 2023"
echo $launchdate

En tcsh Todas las variables se comportan como variables globales.

Las variables de Ambiente pueden accederse directamente (e.g., $PATH, $SHELL, $HOME, $LANG, $PWD, etcétera).

Comentarios

Los comentarios de una línea son similares a Bash. Tcsh no soporta comentarios multilínea.

Depurado

A diferencia de Bash, no se puede activar o desactivar el depurado dentro de un guión tcsh. En su lugar, podremos ejecutar un guión de tcsh en modo de trazado línea a línea, de la siguiente manera:

tcsh -xv guion.csh

Códigos de salida

A diferencia de Bash, en tcsh al ejecutar guiones con trozos de código erróneo, el mismo detendrá su ejecución. Podrá observarse tal comportamiento coN:

#!/bin/tcsh -f
 
rm -f /tmp/fichero_prueba.txt
echo "hola" > /tmp/fichero_prueba.txt
ls -l /tmp/fichero_prueba.txt
chmod 0444 /tmp/fichero_prueba.txt
ls -l /tmp/fichero_prueba.txt
echo "hola" > /tmp/fichero_prueba.txt
echo "No puedo llegar a esta línea de código."

Argumentos de línea de comando

La sintaxis es diferente a bash. TCsh carece de indicadores de argumentos como los $@ y $? de Bash. Los Argumentos de línea de comando se acceden con $argv[$i] (donde $i representa un argumento de rango numérico (denotado por $n), mientras que $n devuelve el valor de argumentos de línea de comandos.

He aquí un programa que almacena los argumentos de línea de comandos en una lista y luego los presenta:

#!/bin/tcsh -f
 
set num_args = $#
set i = 1
set list = ( )
echo "Arma la lista de los argumentos de línea de comandos..."
while ($i <= $num_args)
    @ i_minus_1 = $i - 1
    set arg = $argv[$i]
    echo "\targ[$i_minus_1] = $arg"
    set list = ( $list $arg )
    @ i = $i + 1
end
echo "Ahora imprimo la lista..."
foreach f ($list)
    echo "\t$f"
end

Comandos de Shell

Tcsh también utiliza acentos graves `…` para correr comandos de shell, de la misma forma que lo hace Bash.

Entradas del usuario

La sintaxis de TCSh es muy diferente a la de Bash. El siguiente código demuestra cómo leer una cadena del usuario empleando $<:

#!/bin/tcsh -f
 
echo -n "Ingresa un número escogido al azar entre 1 y 10: "
set x = $<
if ($x < 1 || $x > 10) then
    echo "Entrada inválida: $x"
else
    echo "Ha ingresado: $x"
endif

Operaciones aritméticas

La sintaxis de tcsh es muy diferente a la de Bash. Realiza operaciones aritméticas comienza la línea con @.

Por ejemplo:

@ x = (354 - 128 + 52 * 5 / 3)

Comparación Numérica

Su sintaxis es similar a la de Bash, con la excepción de que no necesitamos dos pares de paréntesis 1). Por favor refiera al ejemplo anterior para comparar $i y num_args.

Comparación de Cadenas

La sintaxis de Tcsh es similar a la de Bash. El código siguiente lee una cadena del usuario, revisa para var que no sea una cadena vacía. Si no lo es, realiza una comparación de patrón para observar si la cadena finaliza con .txt.

#!/bin/tcsh -f
 
echo -n "Ingresa un nombre de fichero: "
set name = $<
if ($name == "") then
    echo "Ingresó una cadena vacía?"
else
    if ($name =~ "*.txt") then
        echo "Nombre del fichero txt: $name"
    else
        echo "No es un fichero txt: $name"
    endif
endif

If-else

La sintaxis de Tcsh es diferente a la de Bash. Observe el ejemplo anterior para considerar la declaración anidada if-then-else.

bucle For

La sintaxis de Tcsh es diferente de la de Bash. En lugar de emplear for, tcsh utiliza foreach. Observe el ejemplo anterior para consultar el uso de foreach en una lista lista iterativa.

Bucle While

La sintaxis de Tcsh es ligeramente diferente a la de Bash. Por favor consulta el ejemplo anteior en búsqueda de un bucle while en tanto la condición sea verdadera.

Case

La sintaxis de Tcsh es diferente a la de Bash. El código a continuación leerá una cadena del usuario, revisará si iguala a uno de los casos provistos.

#!/bin/tcsh -f
 
echo -n "Ingrese un número al azar entre 1 y 10: "
set x = $<
switch ( $x )
case "1", "3", "5", "7", "9":
    echo "Ha ingresado un número impar entre 1 y 10: $x"
    breaksw
case "2", "4", "6", "8", "10":
    echo "Ha ingresado un número par entre 1 y 10: $x"
    breaksw
default:
    echo "Ha ingresado: $x"
endsw

Funciones

A diferencia de Bash, Tcsh no soporta función alguna.

En este aspecto, ¡Bash es claramente superior a Tcsh!