3
1

More than 3 years have passed since last update.

【Linuxエラー】 ex4.sh: 44 行: [: 100: 単項演算子が予期されます

Last updated at Posted at 2020-06-07

【エラーメッセージ】単項演算子が予期されます

if文、while文用いた練習問題で起こったエラー
よく分からなかったので原因と解決を残しておきます。

<結論>

・指摘された行 または 周辺に無駄なスペース(全角スペースの場合もある)が存在する可能性がある.
・空欄があることによって正常な処理が出来ないことでエラーメッセージをが出る場合もあります。
このエラーメッセージは要因が複数あるので解決できない場合は他の記事もご覧ください。

今回、原因を特定したコマンドを記事の下の方に記載しましたのでご確認ください。

<書いたコード>

ファイル

    1  #!/bin/bash
     2
     3  read -p 'ファイル名を入力してください' fh
     4  if [ -f $fh ];
     5  then
     6          read -p  'sum, avg, min, max, exit ' command
     7          if [ $command = 'sum' ];
     8          then
     9                  sum=0
    10                  while read p;
    11                  do
    12                    sum=$(( sum + p ))
    13                  done < $fh
    14                  echo SUM: $sum
    15                  exit 0
    16          elif [ $command = 'avg' ];
    17          then
    18                  sum=0
    19                  count=0
    20                  while read p;
    21                  do
    22                    sum=$(( sum + p ))
    23                    count=$(( count + 1 ))
    24                  done < $fh
    25                  echo AVG: $(( sum / count ))
    26                  exit 0
    27          elif [ $command = 'min' ];
    28          then
    29                  min=101
    30                  while read p;
    31                  do
    32                          if [ $min -gt $p ];
    33                          then
    34                                  min=$p
    35                          fi
    36                  done < $fh
    37                  echo MIN: $min
    38                  exit 0
    39          elif [ $command = 'max' ];
    40          then
    41                  max=0
    42                  while read p;
    43                  do
    44                          if [ $max -lt $p ];
    45                          then
    46                                  max=$p
    47                          fi
    48                  done < $fh
    49                  echo MAX: $max
    50                  exit 0
    51          elif [ $command = 'exit' ];
    52          then
    53              exit 0
    54          else
    55                  echo 'そのようなコマンドは存在しません'
    56                  exit 1
    57          fi
    58  else
    59      echo '入力したファイル名は存在しません'
    60      exit 1
    61  fi

<エラーメッセージ>

ex4.sh: 44 行: [: 100: 単項演算子が予期されます

<解決策>

呼び込んだファイルの一部に 「無駄なスペース」 があったので処理中にスペースも計算してしまい
エラーメッセージが出てしまった

以下のコマンドを実行して原因を特定しました。
こちらのコマンドは「どういうコマンドが実行されているか確認できる」ものになります。

bashコマンド
bash -x ファイル名

参考記事

・1.「単項演算子が予期されます」を抑制する
https://www.bee-planetz.com/blog/%E3%80%8C%E5%8D%98%E9%A0%85%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%8C%E4%BA%88%E6%9C%9F%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%8D%E3%82%92%E6%8A%91%E5%88%B6%E3%81%99%E3%82%8B/

・2.bashで配列の個数部分を変数で指定するとエラー
https://okwave.jp/qa/q8362685.html

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1