![我的挂载脚本不起作用,为什么?](https://linux22.com/image/986056/%E6%88%91%E7%9A%84%E6%8C%82%E8%BD%BD%E8%84%9A%E6%9C%AC%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
#!/bin/bash
mount | grep 'sda[1-5]'
if [ $? = 0 ]
then
echo -e "its already mounted ! type u to unmount :\c"
read word
if [ $word = "u" || $word = "U" ]
then
umount /home/shady/Desktop/mountpoint1
umount /home/shady/Desktop/mountpoint2
fi
fi
if [ $? = 1 ]
then
mount /dev/sda1 /home/shady/Desktop/mountpoint1
mount /dev/sda5 /home/shady/Desktop/mountpoint2
echo -e "all mounted !!"
fi
它甚至没有进入第一个 if 语句
答案1
这行是你的主要问题:
if [ $word = "u" || $word = "U" ]
我修正了条件,并整理了下面的控制结构:
#!/bin/bash
mount | grep 'sda[1-5]'
if [ $? -eq 0 ]
then
echo "Volumes are already mounted."
read -p "Please type 'u' to unmount:" word
if [ "$word" = "u" ] || [ "$word" = "U" ]
then
echo 'User wishes unmount. Attempt umount here.'
fi
else
echo 'Volumes unmounted. Attempt mount here.'
fi
看到这个bash 运算符页面举些例子。
答案2
有几个问题。一个[ $? = 0 ]
应该是[ $? -eq 0 ]
因为$?
返回数字,但=
对于字符串(文本)是比较。其次,使用[ $word = "u" ] || [ $word = "U" ]
或使用[ $word = "u" -o $word = "U" ]
。阅读有关这些选项的更多信息man test
不过,我建议使用更简单的解决方案:使用udisksctl
utility 而不是media
。它更简单,并且可以自动为您完成很多工作。事实上,这是 Ubuntu 默认文件管理器 Nautilus 的后端。
例如,如果我想安装/dev/sda5
$ udisksctl mount -b /dev/sdb5
Mounted /dev/sdb5 at /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd625
获取卷安装位置的信息:
$ udisksctl info -b /dev/sdb5 | awk '/MountPoints/'
MountPoints: /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd625
下面是卸载
$ udisksctl unmount -b /dev/sdb5
Unmounted /dev/sdb5.