스크립트가 파일을 열고 파일을 한 줄씩 읽은 다음 줄/줄당 쉼표 수를 계산하기를 원합니다. $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.txt
compound variable
. 설정되지 않았기 때문에 test
오류가 발생합니다 test.txt: no parent
.