![在线搜索 3 个不同用户并打印的脚本](https://linux22.com/image/57643/%E5%9C%A8%E7%BA%BF%E6%90%9C%E7%B4%A2%203%20%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%94%A8%E6%88%B7%E5%B9%B6%E6%89%93%E5%8D%B0%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我正在尝试创建一个脚本,用户可以在其中输入 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'