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 |
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}'" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/bin/bash array=( uno dos tres cuatro cinco seis siete ocho nueve ) #2 formas de imprimir el primer elemento del array echo ${array[0]} echo ${array:0} #2 formas de imprimir todos los elementos del array echo ${array[@]} echo ${array[@]:0} #Imprimir todos los elemntos desde indice numero 1 echo ${array[@]:1} #Imprimir un rango de lementos, desde indice 1 a indice 4 echo ${array[@]:1:4} #2 formas de imprimir el largo en caracteres del 1er. elemento del array echo ${#array[0]} echo ${#array} #2 formas de imprimir el numero de lementos del array echo ${#array[*]} echo ${#array[@]} #reemplazando un substring echo ${array[@]//a/A} exit 0 |