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!