script Ksh nenhum erro pai

0

Eu quero que o script abra um arquivo, leia o arquivo linha por linha e conte o número de vírgulas por linha / linha. Se isso for mais do que o valor do parâmetro $ 2, escreva o número da linha ofensiva (do meu loop de leitura) e as vírgulas totais encontradas em um arquivo de log.

Não tenho certeza do que está errado, mas estou recebendo um erro de não parentesco.

#!/bin/ksh
filename=$1 #First input parameter path with filename
pipe=$2  #Total Pipe Value

#Filename to parse
if [ $filename -ne $1 ]
then
   echo "Filename required"
   exit 1
fi

#Check pipe/comma
if [ $pipe -ne $2 ]
then
   echo "Filename and number of expected pipes required"
   exit 1
fi
if [ -f $1 ]
then
while read -r line
do
((i+=1))
count=${line//[^|]}
echo Line#"$i:" "${#count}" pipe per line compare to "$2" expected
done <$filename
fi
if [ $count > $2 ]
then
echo Line# "$i" has "${#count}" pipe in total > uhs_sm_qa_csv.ksh.log
fi
exit 0

Saída de script :

[root@uhspaastream01 scripts]# ksh uhs_sm_qa_csv.ksh test.txt 10
uhs_sm_qa_csv.ksh[6]: [: test.txt: no parent
Line#1: 1 pipe per line compare to 10 expected
Line#2: 1 pipe per line compare to 10 expected
Line#3: 1 pipe per line compare to 10 expected
Line#4: 1 pipe per line compare to 10 expected
Line#5: 1 pipe per line compare to 10 expected

Conteúdo de test.txt :

cyberciti.biz|74.86.48.99
nixcraft.com|75.126.168.152
theos.in|75.126.168.153
cricketnow.in|75.126.168.154
vivekgite.com|75.126.168.155

Conteúdo do arquivo de log uhs_sm_qa_csv.ksh.log :

Line#5 has 1 pipe in total
    
por fball4life36 16.03.2018 / 20:15

1 resposta

3

Embora eu ache estranho que você esteja comparando uma variável com algo que você apenas define, a questão principal é que você está usando um operador de comparação numérica (-ne) para o que é esperado para ser um nome de arquivo (de texto). Em vez disso, use:

if [ "$filename" != "$1" ]

... onde eu também citou suas variáveis .

O bônus aponta para o comentário da steeldriver , o que me levou a olhar um pouco mais sobre isso.

Com base em meus testes, acredito que o ksh veja o operador de comparação ne numérico e esteja realizando uma rodada de variáveis & expansão aritmética nos dois operandos $filename e $1 . Como tal, $filename se transforma em test.txt , que o ksh reconhece como um possível compound variable . Como test não está definido, você recebe o erro test.txt: no parent .

    
por 16.03.2018 / 20:56

Tags