【シェルスクリプト】構文エラー: 無効な計算演算子です (エラーのあるトー クンは〇)

問題点

シェルスクリプトを実行していて「[[: 9 while_read.txt: 構文エラー: 無効な計算演算子です (エラーのあるトー クンは “.txt”)」のようなエラーが出ました。

その原因と対処法がわかりましたので、記述しておきます。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

目次

構文エラーの原因

エラー

原因は[[などのテストコマンドで変な値が入っている事によるエラーでした。

今回は変数展開するとif [[ 9 while_read.txt -lt 10 ]]といった構文になりエラーが起こっていました。

なぜこんな値が入っていたかというと「wc -l」コマンドの仕様が原因でした。

構文エラーの解決策

解決策は[[などのテストコマンドの値を修正する事でした。

「wc -l ファイル名」はファイルの行数とファイル名まで変数にいれてしまいます。

なので下のように変更したら解決しました

変更前と変更後
  • 変更前:row_count=$(wc -l $file)
  • 変更後:row_count=$(cat $file | wc -l)

これで変数には行数のみの値が入ります。

実際のシェルスクリプト

code
file='while_read.txt'
row_count=$(wc -l $file)
echo 終了するにはqを押してください

while :
 do
 read -p "ファイルの何行目を表示させますか?" my_row
  if [[ $row_count -lt $my_row ]]; then
   echo $my_row行目に文字はありません
   continue
  elif [[ $my_row == q ]]; then
   echo 終了します
   break
  else
   sed -n ${my_row}p $file
  fi
 done

このシェルスクリプトでの原因は2行目の「wc -l ファイル名」のコマンドでファイルの行数を数えるものです。

数えた値を変数に入れると思っていましたが、実際は「値 ファイル名」とファイル名が入ってきます。

8行目でこの数字を使用して場合分けしたかったですが、変数に数字と不要なファイル名もはいっていた為に起こったエラーでした。

問題点

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次