#【エラーメッセージ】単項演算子が予期されます
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 -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