scripts script resueltos programacion pasar parametros operaciones manejo español ejercicios ejemplos comandos cadenas aritmeticas unix shell comments editing

unix - resueltos - Comentando un conjunto de líneas en un script de shell



scripts linux ejercicios resueltos (10)

Me preguntaba si hay una manera de comentar un conjunto de líneas en un script de shell. ¿Cómo podría hacer eso? Podemos usar / * * / en otros lenguajes de programación. Esto es más útil cuando estoy convirtiendo / usando / modificando otro script y quiero mantener las líneas originales en lugar de eliminarlas.

Parece un trabajo engorroso para buscar y prefijo # para todas las líneas que no se utilizan.

Digamos que hay 100 líneas en la secuencia de comandos en líneas consecuentes que no se utilizan. Quiero comentarlos todos de una vez. ¿Es eso posible?


¿Qué pasa si simplemente envuelve su código en función?

Así que esto:

cd ~/documents mkdir test echo "useless script" > about.txt

Se convierte en esto:

CommentedOutBlock() { cd ~/documents mkdir test echo "useless script" > about.txt }


Dependiendo del editor que estés usando, hay algunos accesos directos para comentar un bloque de líneas.

Otra solución sería colocar su código en un bloque condicional "if (0)";)


El método más versátil y seguro es poner el comentario en un vacío citado here-document , como este:

<<"COMMENT" This long comment text includes ${parameter:=expansion} `command substitution` and $((arithmetic++ + --expansion)). COMMENT

Es necesario citar el delimitador COMMENT anterior para evitar la expansión de parámetros, la sustitución de comandos y la expansión aritmética, lo que ocurriría de otro modo, como lo specifies manual de Bash y el estándar de shell POSIX.

En el caso anterior, no citar COMMENT daría como resultado parameter se asignara expansion texto al parameter variable, si estaba vacío o sin configurar, ejecutando la command substitution , incrementando la variable arithmetic y disminuyendo la expansion variable.

Comparando otras soluciones a esto:

Usando if false; then comment text fi if false; then comment text fi requiere que el texto de comentario sea sintácticamente correcto. Código de Bash, mientras que los comentarios naturales a menudo no lo son, aunque solo sea por posibles apóstrofes desequilibrados. Lo mismo ocurre con : || { comment text } : || { comment text } construir.

Poner los comentarios en un argumento de comando nulo entre comillas, como en :''comment text'' , tiene el inconveniente de no poder incluir apóstrofes. Los argumentos entre comillas dobles, como en :"comment text" , todavía están sujetos a la expansión de parámetros, la sustitución de comandos y la expansión aritmética, lo mismo que el contenido del documento aquí no citado y puede llevar a los efectos secundarios descritos anteriormente.

Usar scripts y herramientas de edición para prefijar automáticamente cada línea en un bloque con ''#'' tiene algún mérito, pero no responde exactamente a la pregunta.


Este Perl one-liner comenta las líneas 1 a 3 del archivo orig.sh inclusive (donde la primera línea tiene el número 0) y escribe la versión comentada en cmt.sh

perl -n -e ''$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++'' orig.sh > cmt.sh

Obviamente, puede cambiar los números de límite según sea necesario.

Si desea editar el archivo en su lugar, es aún más corto:

perl -in -e ''$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++'' orig.sh

Manifestación

$ cat orig.sh a b c d e f $ perl -n -e ''$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++'' orig.sh > cmt.sh $ cat cmt.sh a #b #c #d e f


Los editores de texto tienen una característica sorprendente llamada buscar y reemplazar. No dices qué editor usas, pero como los scripts de shell tienden a ser * nix, y yo uso VI, este es el comando para comentar las líneas 20 a 50 de algunos de los scripts de shell:

:20,50s/^/#/


Puede usar un documento ''aquí'' sin comando para enviarlo.

#!/bin/bash echo "Say Something" <<COMMENT1 your comment 1 comment 2 blah COMMENT1 echo "Do something else"

Referencia de Wikipedia


Según este site :

#!/bin/bash foo=bar : '' This is a test comment Author foo bar Released under GNU '' echo "Init..." # rest of script


También puedes poner comentarios multilínea usando:

: '' comment1comment1 comment2comment2 comment3comment3 comment4comment4 ''

De acuerdo con la referencia Bash para Bourne Shell builtins

: (dos puntos)

: [argumentos]

No haga nada más que expandir argumentos y realizar redirecciones. El estado de retorno es cero.

Gracias a Ikram por señalar esto en el script de Shell posterior al comentario de varias líneas.


if false then ...code... fi

false siempre devuelve false por lo que siempre se saltará el código.


: || { your code here your code here your code here your code here }