ウェブサイト検索

Bashスクリプトでエラーが発生しています; Expr $a + 1: 整数式が期待されます


Bashは、LinuxやUnixベースのシステムで一般的に使用される人気のコマンドラインインタプリタであり、ユーザーがターミナルでコマンドやスクリプトを実行できるようにします。Bashを使用する際にユーザーが遭遇する最も一般的なエラーの1つが「expr: 整数式が必要です」というエラーです。この記事では、このエラーに詳しく目を向け、なぜこのエラーが発生するのか、そしてどのように修正するかを説明しますので、同じエラーに直面している場合はこのガイドをお読みください。

「Expr: 整数式が期待される」エラーとは何ですか?

「expr: 整数式が必要です」というエラーは、ユーザーが非数値文字を含む数学的な式を実行しようとしたときにBashシェルによって生成されるエラーメッセージです。このエラーは通常、スクリプト内のエラーが発生した場所を示す行番号と共に表示されます。

なぜ「Expr: 整数式が必要です」というエラーが発生するのか

「expr: 整数式が期待されます」というエラーは、ユーザーが非数値の値を使用して数学的操作を行おうとしたときに発生します。たとえば、ユーザーが数字に文字列を加えようとすると、Bashシェルは「expr: 整数式が期待されます」というエラーを生成します。このエラーを引き起こす故障コードの例を見てみましょう:

#!/bin/bash
a=0
b=3

while [ "$a" -lt $b ]
do
 echo $a
 a="expr $a + 1 "
done

ここで上記のコードは、最初の変数であるa(その値は0)を、与えられた値が3である2番目の変数bと比較する加算プロセスを続行するためにwhileループを使用しています。ループは、条件が偽になるまで実行され続けます。つまり、aがbより小さい限り、加算はexprコマンドを使用して行われます。エラーメッセージ“expr $0 + 1: 整数式が期待されます”は、スクリプトが「a」の値をインクリメントしようとする方法に問題があることを示しています。このエラーは、双子の引用符の代わりにバックティックまたはドル記号と括弧を使用して「expr」コマンドを実行しようとしたことによって引き起こされます。

エラーを修正するために、スクリプトはバックスラッシュ(`)を使用して「expr」コマンドを実行し、算術式を評価する必要があります。したがって、こちらがバックスラッシュを使用した正しいコードです。

#!/bin/bash

a=0
b=3

while [ "$a" -lt $b ]
do
 echo $a
 a=`expr $a + 1`
done

ここでは、ダブルクオーテーションをバックティックに置き換えました。そして、exprコマンドはaを整数として受け取り、加算を実行します。そのため、whileループの条件は偽になります:

結論

「expr: 整数式が期待されています」というエラーは、ユーザーが数値以外の値に対して数学的操作を試みたときにBashで発生する一般的なエラーです。このエラーを修正するためには、私たちの数学的表現のすべての値が数値であることを確認することが重要です。そうすることで、このエラーを回避し、スクリプトが意図した通りに実行されることを確実にできます。