Bash 如何使用pinky检查目录中是否找到输入(有输入,但用户不在那里)

Bash 如何使用pinky检查目录中是否找到输入(有输入,但用户不在那里),bash,Bash,我想要的是输入一个用户名,如果找不到用户,应该找不到FNAME,但是当我做测试时,NOTFOUND从未出现,测试仪是由其他人制作的,应该没有问题 function fname() { #if argument passed canot be found among sessions logged in result=$(pinky -f "$1") result_length="${#result}" #if the result length is not equal to zero mean

我想要的是输入一个用户名,如果找不到用户,应该找不到FNAME,但是当我做测试时,NOTFOUND从未出现,测试仪是由其他人制作的,应该没有问题

function fname()
{
#if argument passed canot be found among sessions logged in
result=$(pinky -f "$1")
result_length="${#result}"
#if the result length is not equal to zero means there are some values
elif [ "$result_length" != 0 ]
then
        FNAME="$(pinky -f $1 | awk '{print $2}')"
        return 0
elif [ ! -f "$result" ]
then
        FNAME="NOTFOUND"
        return 0
fi
}
我试图检查结果,但只能显示错误和用户的名字,即使输入错误,NOTFOUND也不会显示。是因为${#result}从不显示0吗? 文件名 函数状态代码为==1==FNAME值为==ERROR== [[[WORKS-但找不到用户id]]]


努塞尔 函数状态代码为==0==FNAME值为==== [[[WORKS-找到用户id]]]


fname zo9
函数状态代码为==0==FNAME值为==Zo==

您的问题在这一行:

elif [ ! -f "$result" ]
这字面意思是“如果
$result
不是文件,则执行其他操作”。因为您将result设置为pinky的输出,这显然不是您所认为的那样。由于您正在检查原始if语句中的变量结果是否为空,因此此处只需
else

此外,还有一种内置的方法可以使用test(
[
)检查空白变量。您可以使用
-n
选项进行测试。如果在
块中使用该选项,则会更干净:

if [ -n "$result" ]; then
    # found
else
    # not found
fi
FNAME="$(awk '{print $2}' <<< "$result")"
然后,不需要
结果长度
变量

此外,无需重新运行pinky for awk。pinky的结果存储在
result
变量中。您只需使用here字符串将变量发送到awk中。类似如下:

if [ -n "$result" ]; then
    # found
else
    # not found
fi
FNAME="$(awk '{print $2}' <<< "$result")"
FNAME=“$(awk'{print$2}”