Su script de shell (como se muestra) se ejecuta tanto en shell Korn como en Bash. Algunos pensamientos:
- Es posible que necesite un espacio después del shebang (#!/Bin/bash y no #!/Bin/bash). Sin embargo, Dennis Ritchie había especificado originalmente el espacio es opcional. Además, no es el error que obtiene con el shell Bourne (en su lugar, obtiene
syntax error: '(' unexpected
).
- ¿Está en un sistema Windows? Solo una puñalada en la oscuridad. Esto no parece un error de Windows.
- ¿Este es el sistema Solaris o HP/UX? Puede que no estén ejecutando versiones verdaderas de Bash, o tal vez una versión anterior. Sin embargo, incluso la versión más antigua de Bash reconoce el constructo
for ((x;y;z))
.
Prueba esto:
#! /bin/bash
set -vx
echo "Random = $RANDOM" #Test for bash/Kornshell. Will be blank in other shells
echo \$BASH_VERSINFO[0] = ${BASH_VERSINFO[0]} #Should only work in BASH
echo \$BASH_VERSINFO[1] = ${BASH_VERSINFO[1]}
echo \$BASH_VERSINFO[2] = ${BASH_VERSINFO[2]}
echo \$BASH_VERSINFO[3] = ${BASH_VERSINFO[3]}
echo \$BASH_VERSINFO[4] = ${BASH_VERSINFO[4]}
echo \$BASH_VERSINFO[5] = ${BASH_VERSINFO[5]}
for ((c=0, c<=5, c++))
do
echo "Welcome $c times"
done
- El
set -xv
mostrará todas las líneas a medida que se ejecutan.
- El
$RANDOM
debe mostrar un valor si esto es BASH o Kornshell (su bucle for funcionará en cualquiera de los dos).
- El
{$BASH_VERINFO[x]}
solo debe configurarse si esto es realmente BASH. Estos ni siquiera se configuran incluso si ejecuta el shell Korn después de estar en BASH (a diferencia de $ SHELL, que todavía contendrá bash
).
Si el bucle for aún le da problemas, simplemente elimínelo. En algún lugar de este script, descubriremos si realmente estás ejecutando un shell bash o no.
no consigo el mismo error que por que - consigo final de archivo inesperado. De todos modos, te falta un punto y coma. –
Eso me funciona. Probablemente tengas un personaje extraño escondido en el texto. – karlphillip
Para bash, la sintaxis parece estar bien. ¿Puedes intentar asegurarte de que estás ejecutando el caparazón correcto? 'ls -l/bin/bash', tal vez? –