1. ホーム
  2. シェル

シェルスクリプト、判定文エラー [: 引数が多すぎる

2022-02-25 09:06:02
このスクリプトは2つの引数を取り、1つ目はyumのパッケージ名、2つ目はバージョン番号で、そのパッケージがすでにシステムにインストールされているかどうかを判断し、インストールされていない場合はインストールし、インストールされているがバージョンが現在のバージョンと異なる場合は、まず古いパッケージをアンインストールしてから指定したバージョンをインストールし、インストール済みでバージョンが同じ場合は何もしません。







コードは以下の通りです。







if [ $# -ne 2 ]。



では



    echo "usage install package versionn"



    出口



フィ







パッケージ=$1



バージョン=$2



oldpack=$(yum list installed|grep $package)



echo "$oldpack \n"



if [ $oldpack ]。



では



    sudo yum install $package -b test



elif [ -n $oldpack -a $oldpack!=$package ]。



では



    sudo yum remove $oldpack -b test



    sudo yum install $package -b test



さもなくば



    出口



フィ







走る。







. /install.sh php 0.6.3







 . /install.sh: 11行目: [: 引数が多すぎる



. /install.sh: 14行目: [: 引数が多すぎる







コードの11行目と14行目でエラーになる







11行目: if [ $oldpack ]。







14行目: elif [ -n $oldpack -a $oldpack!=$package ]。







判定文に問題はないのですが、なぜエラーを報告しているのでしょうか?







環境変数は二重引用符で囲まれていないため、bashは角括弧の中に独立変数が多すぎると考えます。文字列の独立変数を二重引用符で囲むと、この問題を解消することができます。すべての文字列独立変数を二重引用符で囲む習慣を身につけることで、このようなプログラミングのミスを多くなくすことができることを覚えておいてください。







次に、11行目と14行目の変数に引用符を付けます、すなわち。







if [ "$oldpack" ]。







elif [ -n "$oldpack" -a "$oldpack"! ="$package" ]である。







問題は解決されました