我正在创建一个脚本,它将 ssh 到主机并打印所有用户帐户以及它们何时到期。
在我可以运行的主机上awk -F':' '{ print $1}' /etc/passwd
,它会给我所有用户帐户的列表。
我已将其添加到应该发送到服务器的脚本中,创建此列表并在其到期时使用它进行打印。
#!/bin/bash
for i in `cat /admin/lists/testlist`
do
echo $i
UNAME=`su - admin -c "ssh $i uname"`
if test "$UNAME" = "Linux"
then
LIST=`su - admin -c "ssh $i awk -F':' '{ print $1}' /etc/passwd"`
for j in $LIST
do
echo "$j " ; `su - batch -c "ssh $i sudo chage -l $j | grep Account"`
done
else
echo "Exiting. The OS type is not found."
fi
echo "========================================================================"
echo " "
done
exit 0
我遇到的问题是当我运行脚本时出现以下错误。
[admin@testserver bin]$ sudo checkPasswdExpiration.sh
testserver02
awk: cmd. line:1: {
awk: cmd. line:1: ^ unexpected newline or end of string
========================================================================
为什么 awk 命令在此脚本中不起作用?
答案1
第一组引号被命令行 for 吃掉su
,第二组引号被命令行 for吃掉ssh
,因此引号{ print $1}
实际上被 视为三个单独的参数awk
。转义引号 (和$
,以及您可能使用的任何其他特殊字符):
su - admin -c "ssh $i awk -F: \'{ print \$1}\' /etc/passwd"
或者:
su - admin -c "ssh $i getent passwd" | awk -F: '{print $1}'