问题在shell中打印字符串

时间:2010-12-18 22:57:45

标签: shell unix sh string

我有一个脚本编写了unix shell语言(不是在bash或任何其他shell中,在sh中),它打印给定usb的挂载点(即,它采用usb的路径(例如/ dev / sdb1) )作为一个论点)。这是:

#!/bin/sh
# usage: get_mount [path]
# returns: mount pount of given usb path

pth=$1
echo $pth
mountPoint="`df -h | grep $pth | tr -s \" \"| cut \"-d \" -f6`"
echo $mountPoint

问题是,当我运行它时,它只打印一个空白字符串,我知道该命令有效,因为我在终端中尝试了它没有问题:它只是将它分配给变量是什么不起作用。有人有主意吗? Thx提前!

2 个答案:

答案 0 :(得分:2)

您可以通过有效使用单引号和双引号来简化您的生活:

mountPoint="`df -h | grep $pth | tr -s ' ' | cut -d' ' -f6`"

调试它的第一步是删除cut命令并查看它产生的内容:

mountPoint="`df -h | grep $pth | tr -s ' '`"
echo $mountPoint

是否仍会打印6个(或更多)列?

请注意,如果您拼错了该命令的参数,那么grep将不会传递给cut

在我的机器(Mac)上,我从df -h获得输出:

Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   465Gi  189Gi  277Gi    41%    /
devfs          111Ki  111Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home
/dev/disk1s1   1.8Gi  8.8Mi  1.8Gi     1%    /Volumes/BLACKBERRY

请注意,某些文件系统名称中包含空格。它不太可能是你问题的一个因素,但它可能会把事情搞砸(挂载点就是字段7)。

答案 1 :(得分:0)

将-d in cut之前的\“移动到-d。

之后
mountPoint="`df -h | grep $pth | tr -s \" \"| cut -d \" \" -f6`"