======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 [[tutorial_de_programacion_en_bash|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 ''(())''. 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!