web-dev-qa-db-ja.com

ファイルシステムがスクリプトでマウントされているかどうかを確認する方法

私はスクリプト作成の初心者です...非常に基本的なことはできますが、今は手が必要です。

バックアップが必要なときにのみマウントされるローカルファイルシステムがあります。

これから始めます。

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

言ったように、私はスクリプト作成が非常に基本的です。 mountコマンドのステータスは、リターンコードを確認すると確認できると聞きました。

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

確認方法がわかりません。何かアドバイスは?

20
maniat1k

シェルの特別なパラメーター?を使用すると、mountのステータスコードと、最もよく記述された実行可能ファイルを確認できます。

man bashから:

? Expands to the exit status of the most recently executed foreground pipeline.

mountコマンドを実行した後、すぐにecho $?を実行すると、前のコマンドのステータスコードが出力されます。

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

すべての実行可能ファイルに明確に定義されたステータスコードがあるわけではありません。少なくとも、成功(0)または失敗(1)コードで終了する必要がありますが、常にそうであるとは限りません。

サンプルスクリプトを拡張(および修正)するために、わかりやすくするためにネストされたif構造を追加しました。これはステータスコードをテストしてアクションを実行する唯一の方法ではありませんが、学習するときに読むのが最も簡単です。

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

「終了および終了ステータス」の詳細については、 高度なBashスクリプトガイド を参照してください。

20
George M

多くのLinuxディストリビューションにはmountpointコマンドがあります。ディレクトリがマウントポイントかどうかを確認するために明示的に使用できます。このように単純:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi
38
grosshat

もう1つの方法:

if findmnt ${mount_point}) >/dev/null 2>&1 ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi
3
Sun

短い ステートメント

マウントされているかどうかを確認:

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

マウントされていない場合はチェック:

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"
2

Rootを必要としない最も簡単な方法は次のとおりです。

if $(df | grep -q /mnt/ramdisk); then

fi

または、マウントされていないかどうかを確認するには:

if ! $(df | grep -q /mnt/ramdisk); then

fi
2

以下のスクリプトで試しました

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

入力する必要があるのはファイルシステムの名前だけです

0