在线搜索 3 个不同用户并打印的脚本

在线搜索 3 个不同用户并打印的脚本

我正在尝试创建一个脚本,用户可以在其中输入 3 个不同的参数(用户名)来查看他们是否在线。

我目前who | grep "^$1"可以显示搜索到的人,但是当我尝试添加 $2 和 $3 时,例如

who | grep "^$1" "^$2" "^$3"

它给出一个错误,指出没有这样的文件或目录,但是当我只有一个参数时它工作正常。有什么建议么?

答案1

who | grep -e "^$1" -e "^$2" -e "^$3"应该做

答案2

Grep 的行为有所不同,具体取决于其使用的正则表达式引擎的类型。默认情况下它使用基本正则表达式但也可以使用扩展正则表达式-E和,在grep支持此功能的版本上, Perl 兼容的正则表达式-P

BRE 只能搜索两种模式,不能再搜索更多。语法是:

grep 'pattern1\|pattern2'

ERE 和 PCRE 可以搜索任意数字,它们的语法在这方面是相同的,只是选项标志发生变化:

grep -E 'pattern1|pattern2|pattern3|patternN'
grep -P 'pattern1|pattern2|pattern3|patternN'

因此,对于您的情况,您可以执行以下操作:

who | grep -E "^$1|^$2|^$3"

答案3

我建议这样做:

who | awk '{print $1}'

awk 将打印第一列或当前登录的用户名。

正如特登指出的,进一步将其缩小为三个论点:

who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'

相关内容