コマンド出力の各行を格納するbashスクリプト

コマンド出力の各行を格納するbashスクリプト

#mount | grep ^\/dev/コマンド出力の各行を変数に格納するbashスクリプトを書くのに問題があります。

以下は私のbashスクリプトです。

#!/bin/bash
mount | grep ^\/dev/ > tempoary
input=$(cat tempoary)
x=0
while IFS= read -r line
do
  x=$((x+1))
  echo "$line" > /tmp/directory/$x
  for file in $(echo "$line"); do
  eval "var$x=$file";
  echo "$file"
  done
done <<< "$input"

出力は次のとおりです。

[root@localhost tmp]# sh script
/dev/mapper/rhel-root
on
/
type
xfs
(rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda1
on
/boot
type
xfs
(rw,relatime,seclabel,attr2,inode64,noquota)

次のような出力形式が欲しいです。

[root@localhost tmp]# sh script
/dev/mapper/rhel-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

これを達成する方法に関するガイダンスを提供してもらえますか?

PS。二重引用符は"$(echo "$line")"役に立ちません。次の構文エラーのみを表示します。

[root@localhost tmp]# sh script
script: eval: line 14: syntax error near unexpected token `('
script: eval: line 14: `var1=/dev/mapper/rhel-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)'

ベストアンサー1

ファイルを次に直接リダイレクトするwhile ... done

mount | grep ^\/dev/ > tempoary
while IFS= read -r line
do
...
done < temporary

または、プロセス置換を使用して一時ファイルを省略します。

while IFS= read -r line
do
...
done < <(mount | grep ^\/dev/)

または同様にパイプでwhile

mount | grep ^\/dev/ |
while IFS= read -r line
do
...
done

おすすめ記事