Por que não criar um comando que aumentará em um ou diminuirá em um baseado nas opções que você passar para ele? Essa é a ideia básica por trás do roteiro que você verá abaixo. Nós armazenamos o valor atual em CURRENT
variable, então usamos bash
da expansão aritmética de $(( numberA + numberB ))
para aumentar ou diminuir em um. Quanto à tomada de decisão, chamamos o script com o argumento de linha de comando único +
para aumentar ou -
para diminuir.
Por sugestão do muru nos comentários, eu também fiz uma pequena edição no código, que agora permite que você chame brightness.sh
com um parâmetro inteiro menor ou igual ao brilho máximo
#!/bin/bash
###########
# Variables
###########
FILE="/sys/class/backlight/acpi_video0/brightness"
MAX="$(cat /sys/class/backlight/acpi_video0/max_brightness)"
MIN=0
CURRENT="$( cat $FILE )"
###########
# functions
###########
function printUsage
{
echo "Usage:"
echo "sudo brightness.sh [ + | - | INTEGER ]"
}
######
# Main
######
if [ $# -eq 0 ];
then
printUsage
exit 0
fi
if [ "" == "+" ];
then
NEW=$(( $CURRENT+1 ))
# are we trying to go past maximum value ? If yes, quit
if [ $NEW -ge $MAX ]
then
echo ">>> ERROR: Current value already the maximum; "
echo ">>> Exiting"
exit 1
fi
# if not, then proceed
echo "$NEW" > "$FILE"
elif [ "" == "-" ];
then
NEW=$(( $CURRENT-1 ))
# Is NEW value going past 0 ? If yes, quit
if [ $NEW -le $MIN ];
then
echo ">>> Error: already at minimum. "
echo ">>> Exiting."
exit 1
fi
# If not, then continue
echo "$NEW" > "$FILE"
# Note: new test w/ regex; for portability
# probably better idea to use awk
elif [[ "" =~ ^[0-9]+$ ]] && [ -le $MAX ];
then
echo "" > "$FILE"
else
echo "<<< ERROR: wrong parameter "
printUsage
exit 1
fi