Diferencias entre Tcsh y Bash
Tcsh es mayormente compatible con Bash y otros interpretes de comandos, pero cuenta con algunas diferencias notables, que lo hacen idiosincratico. Esto implica diferencias con la sintaxis de Bash
Hola Mundo
Para iniciar guiones con el, solo debes modificar la primera linea 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
, etcetera).
Comentarios
Los comentarios de una linea son similares a Bash. Tcsh no soporta comentarios multilinea.
Depurado
A diferencia de Bash, no se puede activar o desactivar el depurado dentro de un guion tcsh. En su lugar, podremos ejecutar un guion de tcsh en modo de trazado linea a linea, de la siguiente manera:
tcsh -xv guion.csh
Codigos de salida
A diferencia de Bash, en tcsh al ejecutar guiones con trozos de codigo erroneo, el mismo detendra su ejecucion. Podra 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 linea de codigo."
Argumentos de linea de comando
La sintaxis es diferente a bash. TCsh carece de indicadores de
argumentos como los $@
y $?
de Bash. Los
Argumentos de linea de comando se acceden con $argv[$i]
(donde $i
representa un argumento de rango numerico
(denotado por $n
), mientras que $n
devuelve el
valor de argumentos de linea de comandos.
He aqui un programa que almacena los argumentos de linea 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 linea 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 tambien 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
codigo demuestra como leer una cadena del usuario empleando
$<
:
#!/bin/tcsh -f
echo -n "Ingresa un numero escogido al azar entre 1 y 10: "
set x = $<
if ($x < 1 || $x > 10) then
echo "Entrada invalida: $x"
else
echo "Ha ingresado: $x"
endif
Operaciones aritmeticas
La sintaxis de tcsh es muy diferente a la de Bash. Realiza
operaciones aritmeticas comienza la linea con @
.
Por ejemplo:
@ x = (354 - 128 + 52 * 5 / 3)
Comparacion Numerica
Su sintaxis es similar a la de Bash, con la excepcion de que no
necesitamos dos pares de parentesis (())
. Por favor refiera
al ejemplo anterior para comparar $i
y
num_args
.
Comparacion de Cadenas
La sintaxis de Tcsh es similar a la de Bash. El codigo siguiente lee
una cadena del usuario, revisa para var que no sea una cadena vacia. Si
no lo es, realiza una comparacion de patron para observar si la cadena
finaliza con .txt
.
#!/bin/tcsh -f
echo -n "Ingresa un nombre de fichero: "
set name = $<
if ($name == "") then
echo "Ingreso una cadena vacia?"
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 declaracion 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 busqueda de un bucle while
en tanto la condicion sea verdadera.
Case
La sintaxis de Tcsh es diferente a la de Bash. El codigo a continuacion leera una cadena del usuario, revisara si iguala a uno de los casos provistos.
#!/bin/tcsh -f
echo -n "Ingrese un numero al azar entre 1 y 10: "
set x = $<
switch ( $x )
case "1", "3", "5", "7", "9":
echo "Ha ingresado un numero impar entre 1 y 10: $x"
breaksw
case "2", "4", "6", "8", "10":
echo "Ha ingresado un numero par entre 1 y 10: $x"
breaksw
default:
echo "Ha ingresado: $x"
endsw
Funciones
A diferencia de Bash, Tcsh no soporta funcion alguna.
En este aspecto, ¡Bash es claramente superior a Tcsh!