Pular para o conteúdo

Como excluir valores repititos de um shuf -n 1 [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Como excluir valores repititos de um shuf -n 1 [RESOLVIDO]

Enviado em 26/08/2021 - 13:06h

Estou fazendo um script que me retorne um arquivo aleatório de um diretório sem repitilo.
Prentendo usar esse script para trocar o meu papel de parede automaticamente para uma imagem aleatória.

Esse é meu código:
#!/bin/sh

last=""

func1() {
first=$(ls $1 | shuf -n 1)

if [[ "$firs" == "$last" ]]; then
echo "é igual"
# Se for igual ele executa a função novamente até encontrar um valor diferente
else
echo "é diferente"
# Continua o código
fi

export last="$first"

sleep 2

func1 $1
}

func1 $1


Por algum motivo o meu código após a primeira execução da função a condicional if só me retorna false mesmo se for igual.

Responder tópico

2. Re: Como excluir valores repititos de um shuf -n 1 [RESOLVIDO]

Melhor resposta

Enviado em 27/08/2021 - 00:35h

JoaoP-Vieira escreveu:

Estou fazendo um script que me retorne um arquivo aleatório de um diretório sem repitilo.
Prentendo usar esse script para trocar o meu papel de parede automaticamente para uma imagem aleatória.

Esse é meu código:
#!/bin/sh

last=""

func1() {
first=$(ls $1 | shuf -n 1)

if [[ "$firs" == "$last" ]]; then
echo "é igual"
# Se for igual ele executa a função novamente até encontrar um valor diferente
else
echo "é diferente"
# Continua o código
fi

export last="$first"

sleep 2

func1 $1
}

func1 $1


Por algum motivo o meu código após a primeira execução da função a condicional if só me retorna false mesmo se for igual.

Boa noite João P,
segue sugestão:

#!/bin/bash

#perfumaria para testes#
L00=0;L01=0;
linha=$(printf "%40s"|tr ' ' '_';);
#L00=looping while
#L01=looping for

while :;do
for imagem in $(ls $1|shuf);do
export ${imagem};
printf "%03d %03d %s\n" $L00 $L01 ${imagem} #usado para testes
let L01++;sleep 3;
done;
let L00++;L01=0;
echo "$linha"; #usado para testes
done



______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/";,
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________

3. Re: Como excluir valores repititos de um shuf -n 1 [RESOLVIDO]

Enviado em 26/08/2021 - 18:33h


JoaoP-Vieira escreveu:

Estou fazendo um script que me retorne um arquivo aleatório de um diretório sem repitilo.
Prentendo usar esse script para trocar o meu papel de parede automaticamente para uma imagem aleatória.

Esse é meu código:
#!/bin/sh

last=""

func1() {
first=$(ls $1 | shuf -n 1)

if [[ "$firs" == "$last" ]]; then
echo "é igual"
# Se for igual ele executa a função novamente até encontrar um valor diferente
else
echo "é diferente"
# Continua o código
fi

export last="$first"

sleep 2

func1 $1
}

func1 $1


Por algum motivo o meu código após a primeira execução da função a condicional if só me retorna false mesmo se for igual.

Tem um erro de sintaxe na linha do if
if [[ "$first" == "$last" ]]; then
Não sei se é uma boa ideia fazer chamadas recursivas no shell

4. Re: Como excluir valores repititos de um shuf -n 1 [RESOLVIDO]

Enviado em 26/08/2021 - 19:18h


leandropscardua escreveu:

Tem um erro de sintaxe na linha do if
if [[ "$first" == "$last" ]]; then
Não sei se é uma boa ideia fazer chamadas recursivas no shell


Realmente, estava fazendo alguns testes aqui e deixando sem essa verificação e atualizando o wallpaper a cada 3 minutos já é bem mau perfomatico, imagina com a verificação.



Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder