シェルスクリプト、判定文エラー [: 引数が多すぎる
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" ]である。
問題は解決されました
コードは以下の通りです。
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" ]である。
問題は解決されました
関連
-
[解決済み】"ERROR. "を取得。ZooKeeperからマスターアドレスを取得できない。znode data == null" Hbaseシェル使用時
-
[解決済み] のコマンドがzshで見つからない [閉店]。
-
[解決済み] AWS cliの変数を置換して、シークレットマネージャーのパスワードを更新する。
-
[解決済み] タブを区切り記号として指定するカットコマンド【閉じた状態
-
[解決済み] sed が正規表現で終端がない代用品でエラーになる
-
[解決済み] usr/bin/envはどのような効果があるのでしょうか?
-
[解決済み] date: 余分なオペランド %d' エラー
-
バッドサブスティチューション
-
文字列 null with space エラー: 二項演算子が期待されています。
-
シェルwhileループのエラー曖昧なリダイレクトとwhileループの変数割り当て失敗問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JenkinsでExecute Shellがビルドを失敗とマークする方法/タイミングは?
-
[解決済み] "No such file or directory "と表示されるが、存在する
-
[解決済み] Centos 6 /usr/sbin/sendmail - 件名を付けてメールを送信する方法は?
-
Linuxシェルプログラミングのエラー "bad substitution "の解決法
-
ハイブのsqlとシェルスクリプトを書いているときに、いくつかの痛い問題に遭遇しました
-
linux shell script cannot be executed, error syntax error near unexpected token `$'\r'' solution.