Gostaria de um script de shell bash (para meu sistema Debian 12) que aceitasse múltiplos caminhos como argumentos e, então, verificasse se um arquivo pode ser criado com sucesso em cada um deles. Então, o resultado deveria ser colocado no formato json.
O comando a ser executado deve ser:
./checkavailable.sh /the/first/path /the/second/path
(onde pode haver qualquer número de caminhos de entrada fornecidos, mas pelo menos um) e eu gostaria que a saída estivesse no seguinte formato:
[
{ "is_available": 0, "path": "/the/first/path/" },
{ "is_available": 1, "path": "/the/second/path/" }
]
Atualmente, consegui fazer isso com o seguinte script:
#!/bin/bash
# Check if first path is available
if touch $1/checkalivefile ; then
avail_path1=1
rm $1/checkalivefile
else
avail_path1=0
fi
# Check if second path is available
if touch $2/checkalivefile ; then
avail_path2=1
$2/checkalivefile
else
avail_path2=0
fi
echo "["
printf " { \"is_available\": "$avail_path1", \"path\": \"$1\" } "
printf ",\n"
printf " { \"is_available\": "$avail_path2", \"path\": \"$2\" } "
echo
echo "]"
mas é obviamente um pouco primitivo e é codificado para funcionar apenas com argumentos x2, e não é escalável para argumentos adicionais.
Eu poderia tentar adicionar um loop agora. No entanto, me deparei com este script, que parece fazer algo similar (para obter o uso do disco neste caso), mas usando awk em vez de um loop:
#!/bin/bash
echo "["
du -s -B1 "$@" | awk '{if (NR!=1) {printf ",\n"};printf " { \"dir_size_bytes\": "$1", \"path\": \""$2"\" }";}'
echo
echo "]"
Alguém pode mostrar como essa abordagem usando "awk" pode ser aplicada ao meu caso? Sou muito novo em scripts bash, então espero aprender alguma coisa.