• Add a confirmation dialog with bash

    If you have a bash script doing some critical actions, it can be useful to add a confirmation dialog to double check with the user that he really wants to perform the action.

    Here is a very simple script allowing this kind of checking:

    #!/bin/bash
    echo "Welcome to your favourite script!"
    read -r -p "Are you sure you want to execute it? [y/N] " response
    if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
    then
      echo "Execution in progress..."
      # Write your action here
    else
      echo "Action canceled."
      exit
    fi
    echo "End of script."
    

    Output will look like:

    • Case ‘yes’:
      $ bash script_yesno.sh 
      Welcome to your favourite script!
      Are you sure you want to execute it? [y/N] y
      Execution in progress...
      End of script.
      
    • Case ‘no’:
      $ bash script_yesno.sh 
      Welcome to your favourite script!
      Are you sure you want to execute it? [y/N] N
      Action canceled.
      

    It’s up to you customizing it depending on your needs and your feelings!

  • Apache Tomcat – Get logs directly cleaned with rotation

    Tomcat allows you to rotate easily your log files with AccessLogValve but it can be more difficult to get cleaning in logs directories automatically.

    For that, you can easily use some smart find commands combined with actions:

    1. Get logs older than 3 days compressed so they can be smaller but still accessible
      find /var/log/tomcat/ -mtime +3 -regex ".*\.\(log\|txt\)$" -exec gzip "{}" \;
    2. Get logs older than 60 days deleted permanently
      find /var/log/tomcat/ -mtime +60 -name "*.gz" -exec rm "{}" \;

    You will probably have to adjust the logs path depending on your needs, and you can also modify the retention time for each action.
    Once the command looks correct with what you’re expecting, you can set them up as cron so it can be executed automatically every day.

  • Generate a random file with specific size

    It’s possible to easily generate a random file with specific size filled differently depending on the needs:

    • Fill a 200MB file with zeroes
      dd if=/dev/zero of=/tmp/file.out bs=1024KB count=200
      
    • Fill a 200MB file with random values (longer than zeroes – depending on processor)
      dd if=/dev/random of=/tmp/file2.out bs=1024KB count=200