Bash 如何使用pinky检查目录中是否找到输入(有输入,但用户不在那里)
我想要的是输入一个用户名,如果找不到用户,应该找不到FNAME,但是当我做测试时,NOTFOUND从未出现,测试仪是由其他人制作的,应该没有问题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
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}”