Los conceptos básicos de la creación de scripts Bash para no programadores. Parte 3

En la segunda parte del artículo, analizamos los archivos de script, sus parámetros y derechos de acceso. También hablamos de ejecución condicional, selección y bucles. En esta parte final, veremos las funciones y el programador de cron. También proporcionaré varios comandos y enlaces útiles.





Funciones

Tiene sentido separar los bloques repetidos usados ​​con frecuencia en funciones separadas para ejecutarlos si es necesario pasando parámetros.





La definición de la función se ve así:





<_>() {
  <>
  return <>
}

function <_>() {
  <>
  return <>
}
      
      



La primera opción está más cerca de la sintaxis del lenguaje C y se considera más portátil; en la segunda opción, se pueden omitir los paréntesis. La declaración de retorno también puede faltar si la función no devuelve un valor.





El ejemplo más simple de un script que contiene una declaración y una llamada de función se vería así:





#!/bin/bash

f() {
  echo Test
}

f
      
      



Declaramos una función f



que genera la palabra Test y luego la llamamos:





test@osboxes:~$ ./script6.sh
Test
      
      



Al igual que un script, una función puede aceptar parámetros y usarlos, refiriéndose al número ($ 1, $ 2,…, $ N). La llamada a la función con parámetros en el script se hace así:





< > <1> <2><N>
      
      



( ) 0 255. , 0, , . , $?



. , :





#!/bin/bash

summ() {
  re='^[0-9]+$'
  if ! [[ $1 =~ $re ]] ; then
    return 1
  elif ! [[ $2 =~ $re ]] ; then
    return 2
  else
    s=$(($1 + $2))
    return 0
  fi
}

summ $1 $2

case $? in
 0) echo "The sum is: $s" ;;
 1) echo "var1 is not a nubmer" ;;
 2) echo "var2 is not a nubmer" ;;
 *) echo "Unknown error" ;;
esac
      
      



summ, 2 ^[0-9]+$



, . , , 1, , 2. , s.





, , . , 0, , s



. :





test@osboxes.org:~$ ./script7.sh abc 123
var1 is not a nubmer
test@osboxes.org:~$ ./script7.sh 234 def
var2 is not a nubmer
test@osboxes.org:~$ ./script7.sh 10 15
The sum is: 25
      
      



, .. . , , , , . , "" , .





, , local, local loc_var=123



. , , , , .





, :





#!/bin/bash

clearFiles() {
  rm *.dat
  if [ $? -eq 0 ]
  then
    echo Files deleted
  fi
}

genFiles() {
  for (( i=1; i<=$1; i++ ))
  do
    head -c ${i}M </dev/urandom >myfile${i}mb.dat
  done
  ls -l *.dat
}

delFiles() {
for f in *.dat
  do
    size=$(( $(stat -c %s $f) /1024/1024 ))
    if [ $size -gt $1 ]
    then
      rm $f
      echo Deleted file $f
    fi
  done
  ls -l *.dat
}

showWeather() {
  curl -s "https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/$1" | grep "<desc" | sed -r 's/<description>//g; s/<\/description>//g'
}

menu() {
  clear
  echo 1 - Delete all .dat files
  echo 2 - Generate .dat files
  echo 3 - Delete big .dat files
  echo 4 - List all files
  echo 5 - Planet info
  echo 6 - Show weather
  echo "x/q - Exit"
  echo -n "Choose action: "
  read -n 1 key
  echo
}

while true
do
  case "$key" in
    "x" | "q" | "X" | "Q") break ;;
    "1")
      clearFiles
      read -n 1
    ;;
    "2")
      echo -n "File count: "
      read count
      genFiles $count
      read -n 1
    ;;
    "3")
      echo -n "Delete file greater than (mb): "
      read maxsize
      delFiles $maxsize
      read -n 1
    ;;
    "4")
      ls -la
      read -n 1
    ;;
    "5")
      ./script4.sh
      read -n 1
    ;;
    "6")
      echo -n "Enter city code: " # 524901 498817 5391959
      read citycode
      showWeather $citycode
      read -n 1
    ;;
  esac
  menu
done
      
      



5 :





  • clearFiles





  • genFiles





  • delFiles





  • showWeather





  • menu





while true, , menu . :





  • .dat

















  • ,









, , , , ( ), break . , , , , . :





test@osboxes.org:~$ ./script8.sh
1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 4
total 40
drwxr-xr-x 2 test test 4096 Feb 16 15:56 .
drwxr-xr-x 6 root root 4096 Feb 16 15:54 ..
-rw------- 1 test test   42 Feb 16 15:55 .bash_history
-rw-r--r-- 1 test test  220 Feb 16 15:54 .bash_logout
-rw-r--r-- 1 test test 3771 Feb 16 15:54 .bashrc
-rw-r--r-- 1 test test  807 Feb 16 15:54 .profile
-rw-r--r-- 1 test test 1654 Feb 16 12:40 input.xml
-rwxr-xr-x 1 test test  281 Feb 16 14:02 script4.sh
-rwxr-xr-x 1 test test  328 Feb 16 13:40 script7.sh
-rwxr-xr-x 1 test test 1410 Feb 16 15:24 script8.sh
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 2
File count: 8
-rw-rw-r-- 1 test test 1048576 Feb 16 16:00 myfile1mb.dat
-rw-rw-r-- 1 test test 2097152 Feb 16 16:00 myfile2mb.dat
-rw-rw-r-- 1 test test 3145728 Feb 16 16:00 myfile3mb.dat
-rw-rw-r-- 1 test test 4194304 Feb 16 16:00 myfile4mb.dat
-rw-rw-r-- 1 test test 5242880 Feb 16 16:00 myfile5mb.dat
-rw-rw-r-- 1 test test 6291456 Feb 16 16:00 myfile6mb.dat
-rw-rw-r-- 1 test test 7340032 Feb 16 16:00 myfile7mb.dat
-rw-rw-r-- 1 test test 8388608 Feb 16 16:00 myfile8mb.dat
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 3
Delete file greater than (mb): 5
Deleted file myfile6mb.dat
Deleted file myfile7mb.dat
Deleted file myfile8mb.dat
-rw-rw-r-- 1 test test 1048576 Feb 16 16:00 myfile1mb.dat
-rw-rw-r-- 1 test test 2097152 Feb 16 16:00 myfile2mb.dat
-rw-rw-r-- 1 test test 3145728 Feb 16 16:00 myfile3mb.dat
-rw-rw-r-- 1 test test 4194304 Feb 16 16:00 myfile4mb.dat
-rw-rw-r-- 1 test test 5242880 Feb 16 16:00 myfile5mb.dat
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 1
Files deleted
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 5
Enter the name of planet: Mars
The Mars has two satellite(s).
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 6
Enter city code: 524901
    Latest observations for Moscow from BBC Weather, including weather, temperature and wind information
      Temperature: -11°C (11°F), Wind Direction: Northerly, Wind Speed: 0mph, Humidity: 84%, Pressure: 1018mb, , Visibility: Moderate
      
      



: ( 6 ) curl, sudo apt install curl



.





cron

, , cron, .





crontab –l



. crontab –e



. cron :





m h dom mon dow command parameters
      
      



m – , h – , dom – , mon – , dow – , command – , parameters – . :





, , 10 30 , :





10,30 * * * 1-5 command parameter1 parameter2
      
      



, 15 :





*/15 * * * * command
      
      



, :





#!/bin/bash
USER=`whoami`
BACKUP_DIR=/tmp/backup_${USER}
BACKUP_FILE=${USER}_$(date +%Y%m%d%M%H%S).tgz

mkdir -p $BACKUP_DIR
cd /
tar -zcf $BACKUP_DIR/$BACKUP_FILE home/$USER
      
      



22:00, crontab -e



:





00 22 * * * ./backup_home.sh
      
      



, , crontab -l



:





test@osboxes.org:~$ crontab -l
00 22 * * * ./backup_home.sh
      
      



22:00 ( ):





test@osboxes.org:~$ cd /tmp/backup_test/
test@osboxes:/tmp/backup_test$ ll
total 80
drwxrwxr-x  2 test test 4096 Feb 16 16:38 ./
drwxrwxrwt 17 root root 4096 Feb 16 16:30 ../
-rw-rw-r--  1 test test 4431 Feb 16 16:30 test_20210216301601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:31 test_20210216311601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:32 test_20210216321601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:33 test_20210216331601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:34 test_20210216341601.tgz
test@osboxes:/tmp/backup_test$
      
      



, /tmp , .. , . .





: help

: <> --help

: man <>

: <> --version

: cat /etc/shells

: cat /etc/passwd

: pwd

: ls -la

: id

: set

: cat /etc/os-release

: uname -a

: sudo su -

Debian: apt install mc

(): top

: df -h

: du -ks /var/log

: ifconfig -a

: free -m

(): lsblk

: cat /proc/cpuinfo

: apt list --installed

: service --status-all

: service apache2 restart

: wget https://www.gnu.org/graphics/gplv3-with-text-136x68.png

- URL: curl https://www.google.com

: crontab -l

: crontab -e

: tail -f /var/log/syslog

: <> | wc -l

( ): chmod a+x <>

: ps -ef

, : ps -ef | grep <>

: cd -

( kill): kill -9

: rm < >

: rm -rf < >

: nano <_>

10 : ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -nr | head





bash: GNU Bash manual

Bash: Advanced Bash-Scripting Guide

: Bash

bash: SS64

Debian GNU/Linux: Debian FAQ





bash, , , . Bash , . .





Eso es todo por ahora, ¡espero que haya sido interesante!

¿Qué otros comandos útiles conoce y utiliza en su trabajo?

¿Qué diseños interesantes tuviste que usar?

¿Qué tareas resolviste?

¡Feliz escribiendo a todos, comparta sus opiniones en los comentarios!








All Articles