Ksh 스크립트에 상위 오류가 없습니다.

Ksh 스크립트에 상위 오류가 없습니다.

스크립트가 파일을 열고 파일을 한 줄씩 읽은 다음 줄/줄당 쉼표 수를 계산하기를 원합니다. $2 매개변수 값을 초과하면 문제가 있는 줄 번호(읽기 루프에서)와 발견된 총 쉼표가 로그 파일에 기록됩니다.

무엇이 문제인지 잘 모르겠지만 부모 없음 오류가 발생합니다.

#!/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

출력 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

콘텐츠 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

로그 파일 내용 uhs_sm_qa_csv.ksh.log:

Line#5 has 1 pipe in total

답변1

변수를 원하는 것과 비교하는 것이 이상하다고 생각하지만오직로 설정하면 핵심 문제는 숫자 비교 연산자를 사용하여 (-ne)예상 파일 이름(텍스트)을 나타내는 것입니다. 대신 다음을 사용하세요.

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

...나도 거기 있었어변수 참조.

보너스 포인트는스틸 드라이버 리뷰, 이로 인해 이에 대해 더 자세히 조사하게 되었습니다.

내 테스트에 따르면 ksh는ne 숫자$filename비교 연산자 및 는 두 피연산자 및 에 대해 변수 라운드 및 산술 확장을 수행합니다 $1. 따라서 ksh는 이를 가능한 것으로 인식합니다 $filename.test.txtcompound variable. 설정되지 않았기 때문에 test오류가 발생합니다 test.txt: no parent.

관련 정보