Bash:如何将输出强制执行到一行?

时间:2015-02-03 10:35:25

标签: bash

我编写了以下Nagios检查,检查/etc/fstab是否有挂载,并使用df检查是否正确安装:

#!/bin/bash
# Check mounts based on /etc/fstab
grep="/bin/grep"
awk="/bin/awk"
df="/bin/df"
mounts=$($grep nfs /etc/fstab | $awk '{print $2}')

# Check if mounts exist
for mount in $mounts; do
$df | $grep $mount &>/dev/null
if [ "$?" -eq "0" ]; then
msg="Mount $mount is mounted!"
else
msg="Mount $mount is not mounted!"
fi
echo $msg
done

当我运行检查时,它会返回一个正确的结果:

[root@nyproxy5 ~]# ./check_mount.sh 
Mount /proxy_logs is mounted!
Mount /proxy_dump is mounted!
Mount /sync_logs is mounted!
[root@nyproxy5 ~]#

但我希望脚本的输出为1行而不是3行,如何实现呢? 我意识到目前编写脚本的方式是不允许的,即使是" Mount X已安装"消息应该改变,但我对逻辑很难。

提前致谢

2 个答案:

答案 0 :(得分:1)

echo $msg更改为echo -n $msg

-n选项将避免打印换行符

答案 1 :(得分:0)

在一些复杂的命令的情况下有一个通用的解决方案。可以通过这种方式删除换行符或任何其他字符:

./script.sh | tr -d '\n'

或者cygwin中的win32可执行文件:

./asd.exe | tr -d '\r\n'