現在、私は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ではなく0
SSDについて尋ねています1
。
2番目の変数は、var1
コンピュータに仮想化があることを確認します。保持している数字が裏面に設定され0
、他の数字の場合に設定されます。このコマンドは、他のコードファイルで実行すると完全に実行されます。しかし、私はその2つが一緒に必要です。どんな提案がありますか?vtype
no
vtype
yes
答え1
このスクリプトには4つの主な問題があります。
#!
一番上の行がありません。私が知る限り、これは可能です#!/bin/sh
。変数拡張は引用されていません。単語の区切りやファイル名のグロービングを防ぐには、二重引用符を使用してください。たとえば、
if [ "$var" = 0 ]
。数学試験を受けているので、ここで-eq
代わりに使用することもできます。=
課題の周りにスペースを入れないでください
=
。最初の引数は
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 '
。