首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash脚本条件,用于检查是否打印到终端

Bash脚本条件,用于检查是否打印到终端
EN

Unix & Linux用户
提问于 2022-11-16 22:42:46
回答 1查看 202关注 0票数 0

我编写了一个bash脚本,以检查在挂载cifs共享时是否输入了正确的密码,并将其报告给用户。

它坏了。我的意思是grep的整个部分,现在我看了它,甚至没有任何意义。它正在对原始命令执行grep操作,而不是输入密码后的输出。

代码语言:javascript
复制
#!/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

如果密码错误,这就是输出的样子。

代码语言:javascript
复制
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作为我的条件陈述的第二行。如果可能的话..。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-11-17 02:34:56

您的脚本有几个问题:

  1. 如果希望变量包含空格(或对shell具有特殊意义的其他字符,如;&),则需要引用整个字符串。例如,share='sudo mount.cifs //192.168.0.10/windows-共享/ -o user=me‘,这是你写它的方式,没有引号,你设置了share=sudo,然后运行mount.cifs ...,这完全不是你想要的。
  2. 更重要的是,整个脚本的设计都是错误的。不需要定义$share变量然后执行它,即使您这样做了,也不会通过对变量进行添加来获得挂载的结果(这忽略了($share | $(grep) ...)行甚至都不是有效的shell语法这一事实)。

您的脚本应该更像这样,它直接测试sudo mount命令的退出代码:

代码语言:javascript
复制
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)或失败(其他任何事情)。

如果您确实需要处理一些或全部非零退出代码,则应该这样做:

代码语言:javascript
复制
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 ;; 
esac
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/725197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档