Bashスクリプトの修正

Bashスクリプトの修正

現在、私はbashスクリプトで動作するように2つのコードを取得しようとしています。どちらも個別に機能しますが、両方がコードに含まれている場合はもう機能しません。

var=$(cat /sys/block/vda/queue/rotational 2>/dev/null || cat /sys/block/sda/queue/rotational 2>/dev/null)
dtype='nil'
if [ $var = 0 ]; then
dtype=' SSD '
elif [ $var = 1 ]; then
        dtype=' HDD '
fi


var1=$(lsmod | grep kvm | awk 'NR==1{print $3}'  2>/dev/null)
vtype = 'no'
if [ $var1 = 0 ]; then
        vtype=' no '
else
    vtype = 'yes'
fi

printf '$dtype' '$vtype'
echo $dtype $vtype

最初の変数はvar回転したファイルの値を保持する必要があります。 HDDではなく0SSDについて尋ねています1

2番目の変数は、var1コンピュータに仮想化があることを確認します。保持している数字が裏面に設定され0、他の数字の場合に設定されます。このコマンドは、他のコードファイルで実行すると完全に実行されます。しかし、私はその2つが一緒に必要です。どんな提案がありますか?vtypenovtypeyes

答え1

このスクリプトには4つの主な問題があります。

  1. #!一番上の行がありません。私が知る限り、これは可能です#!/bin/sh

  2. 変数拡張は引用されていません。単語の区切りやファイル名のグロービングを防ぐには、二重引用符を使用してください。たとえば、if [ "$var" = 0 ]。数学試験を受けているので、ここで-eq代わりに使用することもできます。=

  3. 課題の周りにスペースを入れないでください=

  4. 最初の引数はprintf型文字列でなければなりません(例:)printf '%s %s\n' "$dtype" "$vtype"

これらは以下を使用して見つけることができます。シェルチェックのウェブサイト

若干の非効率性もあります。

lsmod | grep kvm | awk 'NR==1{print $3}'  2>/dev/null

ほぼ同じように、次のように書くことができます。

lsmod | awk '/kvm/ { print $3; exit }'

たとえば、特定の変数の値にスペースを入れる理由がわからないとしますdtype=' HDD '

関連情報