我需要在某些服务脚本顶部插入一个条件检查设备是否已安装。
我对 bash 脚本不是很熟悉......
这是我第一次尝试写,但它不起作用。
### START CHECK
volume="/media/MyMountName"
if ! mount | grep "on ${volume} type" > /dev/null
then
exit;
fi
### END CHECK
#... rest of the service script
这是我最喜欢的另一个解决方案:
### START CHECK
volume="/media/MyMountName"
delay=5
while ! mount | grep "on ${volume} type" > /dev/null
do
sleep $delay
if delay >= 60
then
exit;
$delay = $dealy + 5
done
### END CHECK
#... rest of the service script
第二个应该尝试在放弃之前检查安装一分钟并退出而不运行该服务。
答案1
while ! mount | grep "on ${volume} type" > /dev/null; do
sleep $delay
if [ "$delay" -gt 60 ]; then
exit
fi
delay=$((delay+5))
done
使用/proc/mounts
您可能会考虑使用而不是(这只是)/proc/mounts
的输出。mount
/etc/mtab
while ! grep " ${volume} " /proc/mounts &>/dev/null; do
答案2
你已经很接近了。怎么样:
### START CHECK
start_check_mtpt() {
local volume="$1"
local delay=5
local tries=$[ 60 / delay ]
local mounted=0
while [[ 0 = $mounted ]] && [[ $tries -ge 0 ]]; do
if cut -d' ' -f2 /etc/mtab | grep -qF "${volume}" ; then
mounted=1
# optional: break
else
sleep $delay
let tries=tries-1
fi
done
[[ 1 = $mounted ]]
return $?
}
### END CHECK
start_check "/media/MyMountName"
答案3
这个问题有几个答案。如果您想检查是否具体的设备是否已安装(即您的备份设备),那么您应该通过其 UUID 来检查它,您可以通过发出 来查找blkid
。
UUID="place the UUID here"
TRIES=0
DEVFILE=""
while [[ -z $DEVFILE ]] && [[ $TRIES -lt 5 ]]; do
DEVFILE=$(blkid -U $UUID)
TRIES=$(( $TRIES + 1 ))
sleep 5
done
if [ $TRIES -lt 5 ]; then
MOUNTPOINT=$(findmnt -f $DEVFILE | tail -n1 | cut -d" " -f1)
echo "found your device at $MOUNTPOINT"
fi