スクリプトで「=:見つかりません」エラーが発生する

スクリプトで「=:見つかりません」エラーが発生する

考慮する:

#!/bin/ksh

db2 connect to MKTETLPS user ....... using ........

db2 "select count(*)  from etl.IDM_COLLAPSE_ORG_DEE c where c.IDM_PROCESS_STEP = 'I' and priority in ( '1','2','3','4','5') and c.update_ts < (current timestamp - 60 minutes) with ur"  > l.txt

$a = /is115/idm/dsproj/scripts/l.txt

        if [ $a -gt 0 ];
      then
        db2  "update etl.idm_collapse_org_dee
             set idm_process_step = NULL where priority in (
'1','2','3','4','5')
             and idm_process_step ='I'"
      else
          echo "All is well"
fi

上記のスクリプトを実行していますが、次のエラーが発生します。どうすれば解決できますか?

./CORCleanup1.sh[8]: =:  not found.
./CORCleanup1.sh[10]: test: 0403-004 Specify a parameter with this command.
All is well
DB20000I  The SQL command completed successfully.
DB20000I  The TERMINATE command completed successfully.

db2 connect reset


db2 terminate
exit

答え1

変数の割り当てには、$および周囲のスペースを含めないでください=。私もその課題を二重引用します。したがって、変数の割り当ては次のようにする必要があります。

a="/is115/idm/dsproj/scripts/l.txt"

スクリプトをよく読むと、ファイルパス自体ではなく1.txtファイルの内容を保存したいようです。$aこれを行うには、次のようにタスクを使用できます。

read -r a < /is115/idm/dsproj/scripts/l.txt

read -rファイルの最初の行を読み、先行するスペースとタブを削除し(デフォルトと仮定$IFS)、指定された変数に保存します)


$aステートメントで変数を二重引用符で指定することもできますif

if [ "$a" -gt 0 ];

また、使用することができますhttps://www.shellcheck.net/スクリプトの構文を確認してください。

答え2

これがこのエラーが表示される理由です。

$a = /is115/idm/dsproj/scripts/l.txt

コードのこの時点では、変数はaまだ設定されていません。 ksh は変数を空の文字列に置き換えて、次のような結果を得る。

 = /is115/idm/dsproj/scripts/l.txt

その後、kshはその行を実行しようとし、コマンドを見つけようとし、見つから=ず、表示される最初のエラーを生成します。

@Thomasが指摘したように、変数割り当て構文は次のとおりです。

varname=value

$左側には何もなく、その周りには空白もありません=https://www.shellcheck.net/これらのエラーは指摘されます。

それではそこにいます。

    if [ $a -gt 0 ];

値がないため、akshは置換を実行して実行しようとします。

    if [  -gt 0 ];

コマンド[(例:エイリアス付きコマンド)は、左のオペランドを持たない演算子をtest理解しておらず、2番目のエラーメッセージが表示されます。‑gt

コマンド[がゼロ以外の状態で終了すると、ステートメントはこのブロックをif実行し、else「すべてが正常です」というメッセージが表示されます。

そのため、単一の括弧内にすべての変数を引用することが重要です。[ ... ]

    if [ "$a" -gt 0 ];

より一般的には、引用符を省略する時期を明示的に知らない限り、変数は常に引用符で囲まれます。また、見ることができますbash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク

関連情報