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

Dis*_*sco 2 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
Run Code Online (Sandbox Code Playgroud)

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

我在这里错过了什么?

jgr*_*jgr 12

这应该更好.

#!/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
Run Code Online (Sandbox Code Playgroud)

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

targetserver="192.168.3.1"
mount | grep "$targetserver" > /dev/null && echo "mounted" || echo "not mounted"
Run Code Online (Sandbox Code Playgroud)

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

干杯!

  • @Cameron $()语法更容易嵌套,通常更具可读性.反引号稍微便于携带,但几乎没有现代机器没有安装接受$()表示法的外壳,它已经标准化了将近20年.(Solaris上的/ bin/sh是典型的例子,但是/ xpg4包含大量的现代shell)最近,autoconf维护者(autoconf因可移植性问题而臭名昭着)同意$()是可以接受的.几乎没有理由让任何人再使用反引号. (2认同)