Scripting Básico by NDG

Los comandos de Linux Essentials, creando script con editor VI.

El editor vi es un potente editor de texto con una pequeña curva de aprendizaje, pero capaz de realizar una amplia variedad de tareas de edición de texto.

El editor vi tiene dos modos: inserción y comando. En el modo de inserción se agrega el texto a un documento. En el modo de comandos, pueden realizarse las operaciones tales como la navegación, la búsqueda, guardar y salir del editor.

Creando un nuevo archivo.

vi archivo

Con i es posible cambiar al modo inserción de texto, la tecla esc saldra del modo inserción, :wq funcionará para escribir los cambios realizados y salir de la pantalla.

Para volver a invocar el editor y abrir el archivo creado se hace igual que cuando se creo… vi archivo.

Al entrar a vi este entrara en modo comando.

Estos son algunos comandos de navegación dentro de vi.

TeclasFunción
jMueve el cursor una línea hacia abajo (igual que la flecha hacia abajo)
kMueve el cursor una línea hacia arriba (igual que la flecha hacia arriba)
lMueve el cursor un carácter a la derecha (igual que la flecha derecha)
hMueve el cursor un carácter a la izquierda (igual que la flecha izquierda)
wMueve el cursor al principio de la siguiente palabra
eMueve el cursor al final de la palabra
bMueve el cursor al principio de la palabra anterior
$Mueve el cursor al final de la línea actual (igual que la tecla Fin )
0 (zero)Mueve el cursor al inicio de la línea actual (igual que la tecla Inicio )
3GSalta a la tercera línea (nG salta a la enésima línea)
1GSalta a la primera línea
Shift+GSalta a la última línea
dwElimina una palabra, posicionar el puntero a la izquierda
uDeshacer el ultimo cambio
4uDeshace 4 cambios
2dwElimina dos palabras
xElimina un caracter a la derecha
10xElimina 10 caracteres
ddElimina la linea actual
pPega la linea eliminada o cualquier texte en el portapapeles
2ddElimina 2 lineas, la actual y la siguiente
4wMoverse a la cuarta palabra.
DEliminar hasta la derecha de la linea
d$Eliminar hasta la derecha de la linea
JUne 2 lineas, la actual y la siguiente
ywCopia o jala la palabra actual
3JUne 3 lineas
:%s/text //gBusca text y lo elimina añadiendo un espacio
~Cambia la letra seleccionada a mayúscula o minúscula
aMueve el cursor a la derecha y entra en modo de inserción
oAbre una linea en blanco debajo de la línea actual
OAbre una linea en blanco arriba de la línea actual
:xSe guarda y cierra el archivo.
:wqEscribe al archivo y se cierra.
:wq!Escribe a un archivo de sólo lectura, si es posible, y se cierra.
ZZSe guarda y se cierra. Observa que en este caso no se utilizan los dos puntos :.
:q!Salir sin guardar los cambios.
:e!Descartar los cambios y volver a cargar el archivo.
:w!Escribir a sólo lectura, si es posible.
/palabraBusca palabras, se posiciona el cursor al inicio.
nSe mueve entre instancias de busquedas.
?palabraBusca la palabra hacia atrás.
cwLa palabra que se encuentra se puede editar, entrando el nuevo texto y desaparecioendo el viejo, entrara en modo inserción.
AAñade algo al final de la linea entrando igual al modo inserción.

Advertencia: Si introduces cualquier otra clave que no sean las de arriba, puedes terminar en el modo de inserción. No te asustes! Presiona la tecla Esc , luego :q! + la tecla Entrar . Con esto debes salir del vi sin guardar los cambios. ¡A continuación, ejecuta vi myfile y regresas al editor vi!

Creando script paso 1

Escribe lo siguiente en la terminal, puedes usar cualquier editor compatible.

vi ejemplo.sh

En el editor agrega lo siguiente.

#!/bin/bash
echo "Hello there! Here is the calendar for this month:"                      
cal  

Para ejecutar ese script básico usa lo siguiente.

bash ejemplo.sh

Para evitar escribir bash delante del archivo podemos agregar permisos para que sea ejecutable con todos los usuarios.

chmod a+x ejemplo.sh
./ejemplo.sh

Una característica común que se utiliza en el scripting es «backquoting». Con esta técnica puedes ejecutar un comando shell «dentro» de otro comando shell. El resultado del comando interno será devuelto como un argumento para el comando externo. Añade lo siguiente a la parte inferior del archivo ejemplo.sh .

echo "Today is" `date +%A`

Recuerda que la variable $PATH se utiliza para buscar los comandos que introduces. Ejecuta lo siguiente para ver la variable $PATH para la cuenta del administrador de sistemas.

echo $PATH

Ten en cuenta que home/sysadmin/bin es uno de los directorios de la variable $PATH. Este es un buen lugar para colocar tus scripts del shell.

mkdir bin
mv ejemplo.sh bin
ejemplo.sh

La Ejecución Condicional y Repetitiva

Ten en cuenta que estos ejemplos son más complejos. Con tal fin, vas a utilizar una técnica para describir lo que está sucediendo en el programa. La técnica se verá como la siguiente:

Introduce esta columna al conductor.shEsta columna describe el código (no introducir al archivo)
echo "Please enter your age"# imprimir un prompt
read age# leer la entrada del usuario y colocar la variable $age

Al seguir las instrucciones proporcionadas, debes introducir el texto de la columna izquierda en el archivo especificado (ejemplo1.sh en el ejemplo anterior). La columna derecha se utiliza para describir las líneas específicas en el programa. El signo de gato # se utiliza debido a que en un script de shell puedes colocar comentarios dentro de tu programa mediante el uso del carácter #.

Scipts («Secuencias de comandos») que son más complejas pueden hacer uso de la ejecución condicional. Una expresión condicional, como la instrucción if puede hacer uso de los resultados de un comando llamado test. La instrucción test compara dos números (o dos cadenas) para cosas como «igual a», «menor que», etc.

Crea el siguiente archivo (drive.sh) y hazlo ejecutable para ver cómo las instrucciones if y test funcionan. Comienza por colocar lo siguiente en drive.sh:

Introduce esta columna al conductor.shEsta columna describe el código (no introducir al archivo)
#!/bin/bash
echo "Please enter your age"# imprimir un prompt
read age# leer la entrada del usuario y colocar la variable $age
if test $age -lt 16# test $age -lt 16 devuelve «verdadero» si $age es numéricamente inferior a 16
then
  echo "You are not old enough to drive."# se ejecuta cuando la prueba es verdadera
else
  echo "You can drive!"# se ejecuta cuando la prueba es falsa
fi# esto pone fin a la instrucción if

A continuación, haz que el archivo sea ejecutable y ejecútalo:

cat drive.sh
chmod a+x drive.sh
./drive.sh

Verbalmente, podrías leer la instrucción if como «If $age is less than 16, then echo ‘You are not old enough to drive’, else echo ‘You can drive!'» o «Si $ age es menor de 16, entonces echo ‘No tienes edad suficiente para conducir’, else echo ‘Puedes conducir’» en español. El fi termina la instrucción if.Importante$age debe ser un valor entero. Si no es así, el programa se bloqueará.

La instrucción de prueba se invoca automáticamente cuando colocas sus argumentos entre corchetes [] rodeados de espacios. Modifica la línea if de drive.sh para que se vea así:

if [ $age -lt 16 ]

A continuación, vuelve a ejecutar el programa:

cat conductor.sh
./conductor.sh

Para ver una lista completa de las condiciones de prueba, ejecuta el comando man test.Importante: Alrededor de los corchetes tiene que haber espacios.  [$age -lt 16] no funcionaría, pero [ $age -lt 16 ] sí.

También puedes utilizar el resultado de otros comandos, ya que todos regresan «éxito» o «fracaso». Por ejemplo, crea y ejecuta el programa siguiente, que se puede utilizar para determinar si una cuenta de usuario se encuentra en este sistema. Agrega lo siguiente a check.sh: q

#!/bin/bash
echo "Enter a username to check: "
read name
if grep $name /etc/passwd > /dev/null
then
    echo "$name is on this system"
else
    echo "$name does not exist"
fi

A continuación, ejecuta los siguientes comandos:

chmod a+x check.sh
./check.sh

Cuando recibes un prompt para introducir el nombre de usuario, proporciona el valor de «root». Vuelve a ejecutar el comando (./check.sh) y proporciona el valor de «bobby». Tu pantalla debe ser similar a la siguiente:

sysadmin@localhost:~$ cat check.sh                                            
#!/bin/bash                                                                   
echo "Enter a username to check: "                                            
read name                                                                     
if grep $name /etc/passwd > /dev/null                                         
then                                                                          
    echo "$name is on this system"                                            
else                                                                          
    echo "$name does not exist"                                               
fi                                                                            
sysadmin@localhost:~$ chmod a+x check.sh                                      
sysadmin@localhost:~$ ./check.sh                                             
Enter a username to check:                                                    
root                                                                          
root is on this system                                                        
sysadmin@localhost:~$ ./check.sh                                              
Enter a username to check:                                                    
bobby                                                                         
bobby does not exist                                                          
sysadmin@localhost:~$

Otra instrucción condicional común se llama el while loop. Esta instrucción se utiliza para ejecutar el código en varias ocasiones, siempre y cuando una comprobación condicional devuelva el valor «verdadero». Comienza colocando lo siguiente en un archivo denominado num.sh:

Introduce esta columna al drive.shEsta columna describe el código (no introducir al archivo)
#!/bin/bash
echo "Please enter a number greater than 100"echo «Ingrese un número mayor que 100»
read numleer num
while [ $num -le 100 ]# ejecutar el código desde «do» hasta «hecho si la condición de prueba es verdadera
do
  echo "$num is NOT greater than 100."echo «$num no es mayor que 100.»
  echo "Please enter a number greater than 100"echo «Ingrese un número mayor que 100»
  read numleer num
done# Esto pone fin a la instrucción
echo "Finally, $num is greater than 100"echo «Finalmente, el número es mayor que 100»

A continuación, haz que el archivo sea ejecutable y ejecútalo:

chmod a+x num.sh
./num.sh

Cuando recibes un prompt para introducir un número, proporciona el número 25. Cuando vuelves a recibir el prompt, introduce el número 99. Por último, introduce 101 cuando recibas el prompt para introducir un número por tercera vez. Tu pantalla debe ser similar a la siguiente:

sysadmin@localhost:~$ cat num.sh                                              
#!/bin/bash                                                                   
echo "Please enter a number greater than 100"                                 
read num                                                                      
while [ $num -le 100 ]                                                        
do                                                                            
    echo "$num is NOT greater than 100."                                      
    echo "Please enter a number greater than 100."                            
    read num                                                                  
done                                                                          
echo "Finally, $num is greater than 100"                                      
sysadmin@localhost:~$ chmod a+x num.sh                                        
sysadmin@localhost:~$ ./num.sh                                                
Please enter a number greater than 100                                        
25                                                                            
25 is NOT greater than 100.                                                   
Please enter a number greater than 100.                                       
99                                                                            
99 is NOT greater than 100.                                                   
Please enter a number greater than 100.                                       
101                                                                           
Finally, 101 is greater than 100                                              
sysadmin@localhost:~$

Si la prueba condicional para la instrucción while ( [ $num -le 100 ] ) devuelve valor verdadero, entonces las instrucciones entre do y done serán ejecutadas.

Una vez que esas instrucciones se acaben de ejecutar, la prueba condicional para la instrucción while se comprueba de nuevo. Si el valor es verdaderos otra vez, entonces las instrucciones entre do y done se vuelven a ejecutar.

Esto seguirá repitiéndose hasta que la instrucción while devuelva valor falso, o cuando el valor sea superior a 100.

El código de scripting es parte del shell BASH, lo que significa que puedes utilizar estas instrucciones en la línea de comandos al igual que los utilizas en un script de shell. Esto puede ser útil para una instrucción como la instrucción for, una instrucción que asignará una lista de valores de uno en uno a una variable. Esto te permite realizar un conjunto de operaciones para cada valor. Por ejemplo, ejecuta lo siguiente en la línea de comandos:

for name in /etc/passwd /etc/hosts /etc/group
do
          wc $name
done

Tu pantalla debe ser similar a la siguiente:

sysadmin@localhost:~$ for name in /etc/passwd /etc/hosts /etc/group           
> do                                                                          
>     wc $name                                                                
> done                                                                        
  24   30 1001 /etc/passwd                                                    
  7  15 161 /etc/hosts                                                        
  46  46 561 /etc/group                                                        
sysadmin@localhost:~$

Ten en cuenta que el comando wc se ha ejecutado tres veces: una vez para /etc/passwd, una vez para /etc/hosts a una para /etc/group.

A menudo, el comando seq se utiliza en combinación con la instrucción for. El comando seq puede generar una lista de valores enteros, por ejemplo de 1 a 10. Por ejemplo, ejecuta lo siguiente en la línea de comandos para crear los archivos con el nombre test1test2test3, etc. (hasta test12):

ls
for num in `seq 1 12`
do
          touch test$num
done
ls
sysadmin@localhost:~$ ls                                                      
Desktop    Downloads  Pictures  Templates  check.sh  num.sh                   
Documents  Music      Public    Videos     drive.sh                           
sysadmin@localhost:~$ for num in `seq 1 12`                                   
> do                                                                          
>     touch test$num                                                          
> done                                                                        
sysadmin@localhost:~$ ls                                                       Desktop    Music     Templates  drive.sh  test10  test2  test5  test8          Documents  Pictures  Videos     num.sh    test11  test3  test6  test9          Downloads  Public    check.sh   test1     test12  test4  test7                
sysadmin@localhost:~$

Gracias por haber leído hasta aquí, espero que te esté gustando, te invito a realizar un curso completo en la plataforma netacad, ya que de allí saque los apuntes para tenerlos más accesibles, repasar y practicar.

Related Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada.