Comprimento de teste da cadeia no arquivo

1

Não tenho certeza se estou usando meu argumento corretamente. Eu gostaria de passar em um argumento que é um arquivo de texto contendo uma string. Quando eu executo este script, ele sempre entra na instrução if mesmo quando o número de caracteres da string está abaixo de 32.

#!/bin/bash
if [ {$1} > 32 ]; then
    echo "Error: Password length invalid"
else
    echo "okay"
fi
    
por Avinash Prabhakar 01.02.2016 / 02:37

2 respostas

3

Você pode obter o tamanho da string da variável usando ${#variable} . E você deve usar -gt em vez de > na expressão [ ] .

#!/bin/bash -

pass=$(cat < "$1") || exit
if [ "${#pass}" -gt 32 ]; then
    echo >&2 "Error: Password length invalid"
    exit 1
else
    echo "okay"
fi

Isso conta o número de caracteres (interpretados na codificação da localidade atual), não bytes, no arquivo passado como primeiro argumento, exceto os caracteres de nova linha à direita, portanto, para um arquivo contendo uma linha de texto, que fornece o número de caracteres nessa linha.

    
por 01.02.2016 / 02:53
0

Você pode obter o tamanho do arquivo com o comando stat -c %s <file> . Eu não fiz o benchmarking, mas faz mais sentido ler os metadados diretamente, em vez de carregar cada byte do arquivo na memória apenas para verificar sua extensão.

    
por 09.01.2018 / 17:01