Abaixo está uma função de shell que pode ser usada com pelo menos ksh e bash. Como o comentário diz, é difícil esperar um padrão de entrada dessa questão em particular; isto é, do formato "XX" (exatamente dois X's) seguido por algo - não (alguma coisa) -XX como uma parte da questão implica.
O script usa a expansão de parâmetro para remover os XX's iniciais para salvar a recombinação posterior com o aumento do n
index. Em seguida, ele passa de 1 a 99, preenche zero o número, se necessário, e procura a não existência [ ! -f ... ]
de tal arquivo. Se não existir, ele imprime esse nome de arquivo e retorna com sucesso ( return 0
). Se sair do loop sem localizar um arquivo disponível, ele imprime uma mensagem para stderr ( >&2
), imprime nothing para stdout e retorna com um código de retorno malsucedido ( return 1
).
# hard-coded to expect an input pattern of XX(something)
function rmktemp {
pattern=$1
suffix=${pattern#XX}
n=1
while [ $n -lt 100 ]
do
if [ $n -lt 10 ]
then
n="0${n}"
fi
tfile="${n}${suffix}"
if [ ! -f "$tfile" ]
then
printf "%s\n" "$tfile"
return 0
fi
n=$((n+1))
done
if [ $n -eq 100 ]
then
echo Could not find an unused file >&2
return 1
fi
}
Use como:
LOG=$(rmktemp XX-output.log)
[ $? -eq 0 ] && echo stuff > "$LOG"