|
1 2 3 4 5 6 7 8 |
#!/bin/bash for fich in $@ do if test -f $fich then chmod u+x $fich fi done |
|
1 2 3 4 5 6 7 8 |
#!/bin/bash for fich in $@ do if test -f $fich then chmod u+x $fich fi done |
|
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash if [ -f $2 ] then echo "$2 existe. ¿Quieres sobreescribirlo? (s/n)" read sn if [ $sn = "N" -o $sn = "n" ] then exit 0 fi fi cp $1 $2 |
Para leer un archivo línea a línea lo más cómodo es utilizar un bucle while con read line. Es decir:
|
1 2 3 |
while read linea ; do echo ${linea} done <<< "`cat archivo`" |
en linea se va almacenando en cada iteración la línea del archivo que toque y para que el bucle while sepa de donde obtener los datos ponemos al final del bucle <<< para indicarle que los datos le van a llegar por esa vía, cat archivo para volcar el contenido del archivo y lo encerramos entre comillas dobles («) para que cada línea la trate como un todo, sin las comillas en cada iteración tomaría una sola palabra del archivo, es decir recorreriamos el archivo de palabra en palabra.
Naturalmente si nos interesara recorrer un archivo de palabra en palabra, por ejemplo porque es un archivo de configuración en el que cada línea es del tipo opcion=valor (así sin espacios), nos serviría con hacer lo siguiente:
|
1 2 3 4 |
contenido=`cat archivo` for linea in ${contenido} ; do echo ${linea} done |
o sin utilizar la variable contenido:
|
1 2 3 |
for linea in `cat archivo` ; do echo ${linea} done |
Si queremos saber el número de parámetros con el que nos han invocado al script podemos usar la variable especial $#
Si nuestro script requiere más parámetros podemos usar shift para desplazar una posición los parámetros de forma que $1 pasa a almacenar el segundo, $2 el tercero, … y $9 el décimo, una nueva ejecución de shift haría que en $9 tuvieramos el undécimo parámetro y así sucesivamente.
|
1 2 3 4 5 6 7 8 |
#!/bin/bash i=1 while [ $# -gt 0 ]; do echo El parametro $i vale $1 i=$(($i+1)) shift done |
|
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash echo "Introduce una palabra o frase" read frase esarf="" for ((i=$((${#frase}-1));i>=0;i--)) { esarf=${esarf}${frase:$i:1} } echo "'${frase}' al reves es '${esarf}'" |