使用参数和返回值在bash中执行命令

时间:2010-12-17 12:15:07

标签: bash scripting

我有以下脚本来检查服务器上当前是否挂载了NFS挂载:

#!/bin/bash
$targetserver=192.168.3.1
commandline="mount | grep '$targetserver' | wc -l"
checkmount=`$commandline`

if [ $checkmount == "1" ]; then
  echo "Mounted !"
else
  echo "Not mounted"
fi

但似乎我的checkmount没有返回任何东西。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:10)

这应该会更好。

#!/bin/bash
targetserver="192.168.3.1"
commandline=$(mount | grep "$targetserver" | wc -l)

if [ $commandline -gt 0 ]; then
  echo "Mounted !"
else
  echo "Not mounted"
fi

您可以使用$?重定向和控制运算符来缩短它。

targetserver="192.168.3.1"
mount | grep "$targetserver" > /dev/null && echo "mounted" || echo "not mounted"

直接取决于系统grep /etc/mtab可能也是一个好主意。不必执行mount将是更清洁的imho。

干杯!

答案 1 :(得分:3)

如果您只是在一个地方使用它,我可能会直接在if中执行此功能,或者直接使用该功能的内容。

nfsismounted() {
mount | grep -qm1 "$1":
}

q = quiet(我们只想要返回码),m1 =在第一场比赛时退出。

并按原样使用:

if nfsismounted 192.168.0.40; then
    echo "Mounts found"
else
    echo "Not mounts"
fi

关于你问题中代码的附注,你不要在shell中使用==进行测试,只需=。 ==会在Debian / Ubuntu中破解,例如,破坏/ / bin / sh。

编辑:为了增加可移植性(非GNU grep),请删除 grep > /dev/null上的标记。测试是在bash / dash / ksh

上完成的