我正在创建一个脚本来检测哪个用户暂时没有连接到服务器。
到目前为止一切都很好,但现在试图从我的脚本生成的列表中删除一些不需要的条目。我想在脚本中添加一个异常,以便在使用未使用的参数调用lastlog时,输出不会打印到屏幕上。
我试过一些东西,比如:
if [ $? -gt 0 ]; then
echo "ERROR!"
fi
但问题是,lastog在成功时返回0,但是:
lastlog: Unknown user or range: infolog
出错时。所以我抓不到例外。
这是我的代码(非常简单)
#!/bin/bash
FILES=../*
for year in 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
do
for f in $FILES
do
tempUser=${f:3:20}
userCommand=`lastlog -u $tempUser | grep $year`
if [ ${#userCommand} != 0 ]
then
echo "$userCommand"
fi
done
done
最佳答案
您可以很简单地测试它,但是在我方便的linux机器上,确实为一个坏用户名设置了一个非零状态:
$ if lastlog -u nosuchuser; then echo no error; else echo error; fi
lastlog: Unknown user or range: nosuchuser
error
如果在管道中运行,问题是管道序列的“状态”是管道最后一个元素的状态:
$ progA | progB | progC
$ echo $?
打印程序的状态。
如果使用bash,可以通过bash的
lastlog
数组变量从所有内容获取状态:bash$ progA | progB | wc
bash: progB: command not found
bash: progA: command not found
0 0 0
bash$ echo ${PIPESTATUS[@]}
127 127 0
bash$
编辑:你可能根本不在乎,只是想找到一种方法来丢弃
PIPESTATUS
中的stderr输出,在这种情况下,请考虑:$ lastlog 2>/dev/null | grep ...
关于linux - 从laSTLog捕获错误(unix和bash),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10376410/