Como usar uma instrução if para alterar a mensagem de saída

1

Quando eu executo este comando, ele ainda exibe a mesma mensagem quando nada está no diretório da lixeira, como posso obter o comando para enviar uma mensagem diferente quando não há arquivos na lixeira?

            #! /bin/bash
            #! listwaste - Lists the names of all the files in your waste bin and their size
            #! Daniel Foster 23-11-2015

            echo "The files that are in the waste bin are:"

            ls -1 ~/bin/.waste/

Eu sei que isso deve ser simples, mas estou apenas começando e acredito que deveria estar usando uma declaração if ou algo semelhante.

Obrigado pela ajuda antecipada.

    
por S.Jones 23.11.2015 / 22:21

3 respostas

0

Oneliner:

trash() { ls -1 ~/bin/.waste; }; [[ $(trash | wc -l) -eq 0 ]] && echo no waste || echo -e "waste:\n$(trash)"

Melhor formatado:

trash() { ls -1 ~/bin/.waste; }
[[ $(trash | wc -l) -eq 0 ]] && echo no waste || echo -e "waste:\n$(trash)"

Nerd formatado:

#!/bin/bash

function trash() {
  ls -1 ~/bin/.waste
}

if [[ $(trash | wc -l) -eq 0 ]]; then
  echo 'There are no files in the waste bin.'
else
  echo 'The files that are in the waste bin are:'
  trash
fi

Todos os 3 exemplos estão executando exatamente a mesma funcionalidade, apenas formatados de forma diferente, dependendo da preferência.

Se você quiser realmente executar o comando listwaste , coloque-o em um script chamado listwaste , certifique-se de torná-lo executável ( chmod +x ) e salve o script em um diretório que seja listado em seu $PATH . Você pode echo $PATH ver esses diretórios que contêm executáveis que você poderá chamar diretamente do shell.

    
por 23.11.2015 / 23:55
1

Atribuir a saída a uma variável, se comportar de maneira diferente, dependendo:

$ mkdir ~/bin/.waste
$ OUTPUT=$( ls -1 ~/bin/.waste )
$ if [[ -z "$OUTPUT" ]]; then echo no waste; else echo $OUTPUT; fi
no waste
$ touch ~/bin/.waste/blkasdjf
$ OUTPUT=$( ls -1 ~/bin/.waste )
$ if [[ -z "$OUTPUT" ]]; then echo no waste; else echo $OUTPUT; fi
blkasdjf
$ 
    
por 23.11.2015 / 22:24
0
file_count=$(ls -1 ~/bin/.waste | wc -l)
if [[ $file_count == 0 ]]; then
    echo "There are no files in the waste bin"
else
    echo "The files that are in the waste bin are:"
    ls -1 ~/bin/.waste
fi
    
por 23.11.2015 / 22:23

Tags