호스트에 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}'