Case… in, casos tipo de arquivo

4

Recebi lições de casa nas quais preciso testar se $1 é um arquivo, um arquivo especial ou uma pasta em um caso $1 na instrução .

Eu tentei algumas coisas, mas não consegui fazer funcionar. Você tem alguma idéia sobre como implementar isso (em uma declaração de caso)

O que preciso alcançar é:

if [ -f $1 ]
then
    exit 1
elif [ -d $1 ]
then
    exit 2
elif [ -c $1 -o -b $1 ]
then
    exit 3
else
    exit 0
fi

Eu não estou pedindo o código final, apenas uma maneira de fazer o seguinte trabalho:

Case $1 in
    -d) ...
    
por JeanneD4RK 10.12.2015 / 20:06

2 respostas

3

Como o código if que você postou parece bastante simples, o O requisito para usar uma construção case é um pouco estranho. Suponho que um poderia recuperar as informações de tipo de arquivo que ls -l fornece:

case "$(ls -ld -- "$1")" in
    -*) echo 'Regular file' ;;
    d*) echo 'Directory' ;;
    *)  echo 'other' ;;
esac
    
por 10.12.2015 / 20:17
1

Esta é a solução que escolhi:

filetype=$(stat -c%F "$1")
exitcode=$?

if [ $exitcode -eq 0 ]
then
    case "$filetype" in
        "regular file") exit 1;;
        "directory") exit 2;;
        *) exit 3;;
    esac
else
    exit 0
fi

Ainda exibe um erro quando a estatística falha (arquivo não existe) mas funciona bem. Obrigado

    
por 10.12.2015 / 20:44

Tags