複数行変数を繰り返し、特定の行を抽出してコマンドとして使用します。

複数行変数を繰り返し、特定の行を抽出してコマンドとして使用します。

抽出する変数は次のとおりです。

ttyACM0
ttyACM1

この変数を繰り返して、次のコマンドを実行したいと思います。

echo disconnect > /dev/ttyACM0

それから

echo disconnect > /dev/ttyACM1

動作しない現在のコードは次のとおりです。

MCCI=`ls /dev | grep "ttyACM[0-9]" | grep -v "$all_dongles"`

while IFS= read -r line
do
    echo disconnect > /dev/"$line"
    sleep 1
    echo disconnect > /dev/"$line"
    sleep 1
    echo disconnect > /dev/"$line"
done <<< "$MCCI"

コードは現在ttyACM0を上書きしていますが、これは明らかに私が望むものではありません。そうすることをお勧めしますので、同じ接続解除コードを3回発行し、ループを切断した後も上記と同じ接続コードを発行する必要がありました。完全なコードはSSHを介して実行されます。

修正する SSHを介してコンピュータに接続し、ユーザーに入力するように求めるドングルのシリアル番号を確認しようとしています。ユーザーが提供したシリアル番号と一致しない不要なドングルを分離する必要があります。そのためには、どのMCCIがどのドングルに対応しているかを確認する必要があります。すべてのドングルとMCCIは/ dev / ttyACM [0-9]です。私の考えは、すべてのMCCIを切断し(MCCI変数のために数字を知っています)、一度に1つずつ再びオンにして、現在どのドングルが接続されているかを確認することです。 grepドングルのシリアル番号を見つけて、対応するMCCI ttyACM#に接続し、アレイに追加して再接続を解除し、アレイを繰り返してシリアル番号を検索し、そのttyACM#を削除してドングルを接続する予定です。

3つの変数ドングルとMCCIがあります。 - ls / dev | grep "ttyACM[0-9]"

dongle - シリアル番号、ttyACM[0-9]など、ドングルに関する情報を返す同様の変数です。

MCCI は、ドングル変数と MCCI 変数で既知のドングルを除外します。

答え1

設定方法とは別に、MCCI変数の各テキスト行を繰り返すアプローチは意味がありますが、変数をまったく使用しない方が簡単かもしれません。代わりにワイルドカードファイルの指定を繰り返すだけです/dev/

all_dongles='
/dev/ttyACM4
/dev/ttyACM9
/dev/ttyACM7
'
for line in /dev/ttyACM[0-9]
do
  if grep -Fqx "$line" <<<"$all_dongles"
  then
    : # skip
  else
  # ... do something with $line
  fi
done

答え2

正直なところ、入力に項目を区切る「改行」に加えて、他のスペースに似た文字を含めることはできないことを知っているので、簡単な方法

for device in /dev/ttyACM{0..9}*; do
  {echo $(basename "$device") | grep "$alldongles"} && continue
  for run in {1..3}; do
    echo disconnect > "$device"
    sleep 1
  done
done

します。ls出力を解析できません。、一度!

答え3

[237]ドングルに関連付けられているデバイス名の末尾にある数字と一致すると仮定します(と書くこともできます2|3|7)。

shopt -s extglob

dongle='[237]'
for device in /dev/ttyACM!($dongle); do
    printf '%s\n' disconnect disconnect disconnect >"$device"
done

拡張ワイルドカードパターンは、数字2、3、または7で/dev/ttyACM!([237])始まりますが終了しない/dev/ttyACMすべてのパス名と一致します。

ループの本文は、文字列をdisconnectデバイスに3回印刷します。

関連情報