我编写了一个bash脚本,以检查在挂载cifs共享时是否输入了正确的密码,并将其报告给用户。
它坏了。我的意思是grep的整个部分,现在我看了它,甚至没有任何意义。它正在对原始命令执行grep操作,而不是输入密码后的输出。
#!/bin/bash
share=sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me
$share
if [[ ($share | $(grep) "mount error (13): Permission denied") ]]; then
echo "Wrong password"
else
echo "Successful mount"
fi如果密码错误,这就是输出的样子。
Password for me@192.168.0.10/windows-share:
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)我正在尝试用grep作为我的条件陈述的第二行。如果可能的话..。
发布于 2022-11-17 02:34:56
您的脚本有几个问题:
;或&),则需要引用整个字符串。例如,share='sudo mount.cifs //192.168.0.10/windows-共享/ -o user=me‘,这是你写它的方式,没有引号,你设置了share=sudo,然后运行mount.cifs ...,这完全不是你想要的。($share | $(grep) ...)行甚至都不是有效的shell语法这一事实)。您的脚本应该更像这样,它直接测试sudo mount命令的退出代码:
if sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me ; then
echo Successful mount
else
echo Mount failed
fi顺便说一下,请参阅man mount并搜索EXIT STATUS以查看退出状态代码的完整列表,这些代码可以由mount返回。然而,在大多数情况下,您只需要关心成功(0)或失败(其他任何事情)。
如果您确实需要处理一些或全部非零退出代码,则应该这样做:
sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me
result=$?
case "$result" in
0) echo Successful mount ;;
1) echo incorrect invocation or permissions ;;
2) echo 'system error (out of memory, cannot fork, no more loop devices)' ;;
4) echo internal mount bug ;;
8) echo user interrupt ;;
16) echo problems writing or locking /etc/mtab ;;
32) echo mount failure ;;
64) echo some mount succeeded ;;
esachttps://unix.stackexchange.com/questions/725197
复制相似问题