bash: Número ilegal

Cuando ejecuto este script bash:

if [ [$EUID -ne 0] ]; then echo "This script must be run as root" 1>&2 exit 1 else printf " whathever " exit 0 fi 

Tengo este error:

 ./myScript: 15: [: Illegal number: [ 

¿Ves algún problema?

Tiene un error de syntax en su condición if, use esta condición si:

 if [ "$EUID" -ne 0 ]; 

O usando [[ y ]]

 if [[ "$EUID" -ne 0 ]]; 

Tiene un error de syntax en su condición if, use esta condición si:

 if [ "$EUID" -ne 0 ]; 

O usando [[ y ]]

 if [[ "$EUID" -ne 0 ]]; 

Si usa la instrucción interna KSH88 + / Bash 3+ [[ , no es necesario usar comillas dobles alrededor de las variables operandos:

 [ ~/test]$ [[ $var2 = "string with spaces" ]] && echo "OK" || echo "KO" OK 

En lugar de la test comando externo o su tenedor [ :

 [ ~/test]$ [ $var2 = "string with spaces" ] && echo "OK" || echo "KO" bash: [: too many arguments KO [ ~/test]$ [ "$var2" = "string with spaces" ] && echo "OK" || echo "KO" OK 

Por supuesto, también debe elegir los operadores según el tipo de operandos:

 [ ~/test]$ var1="01" [ ~/test]$ [ "$var1" = "1" ] && echo "OK" || echo "KO" KO [ ~/test]$ [ "$var1" -eq "1" ] && echo "OK" || echo "KO" OK 

dos sugerencias aparte de lo que todos los demás ya han señalado.

1) en lugar de hacer ‘else [montón de código porque somos root] fi’, simplemente reemplaza el ‘else’ por ‘fi’. una vez que haya probado la condición de falla que le preocupa y haya tomado las medidas adecuadas, no es necesario que continúe dentro del cuerpo del condicional.

2) $ EUID es un bashismo, si desea hacer que sea portable a shells como ksh, reemplazándolo con:

if [$ (id -u) -ne 0]; luego echo “ur not root bro”; salida 1; fi

sería una buena manera de hacerlo.