Estou tentando aprender como usar getopts para que eu possa ter scripts com entrada analisada (embora eu ache que as getopts poderiam ser melhores). Estou tentando apenas escrever um script simples para retornar porcentagens de uso da partição. O problema é que uma das minhas funções do bash não parece gostar da referência $1
como uma variável dentro da função. A razão de eu referenciar $1
é porque a get_percent
função pode receber um ponto de montagem como um argumento opcional a ser exibido em vez de todos os pontos de montagem.
O script
#!/usr/bin/bash
set -e
set -u
set -o pipefail
get_percent(){
if [ -n "$1" ]
then
df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }'
else
df -h | tail -n +2 | awk '{ print $1,"\t",$5 }'
fi
}
usage(){
echo "script usage: $(basename $0) [-h] [-p] [-m mount_point]" >&2
}
# If the user doesn't supply any arguments, we run the script as normal
if [ $# -eq 0 ];
then
get_percent
exit 0
fi
# ...
A saída
$ bash thing.sh
thing.sh: line 8: $1: unbound variable
$ bash -x thing.sh
+ set -e
+ set -u
+ set -o pipefail
+ '[' 0 -eq 0 ']'
+ get_percent
thing.sh: line 8: $1: unbound variable
getopts
, não é? Seu script é encerrado-u
antes de ligargetopts
.