Kshスクリプトに親エラーがありません。

Kshスクリプトに親エラーがありません。

スクリプトはファイルを開き、ファイルを1行ずつ読み込み、行/行あたりのコンマ数を数えたいと思います。 $ 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はこれを可能であると認識します$filenametest.txtcompound variable。設定されていないためtestエラーが発生しますtest.txt: no parent

関連情報