Bash
awk in ssh in su 中的命令替換
我正在創建一個腳本,它將 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 命令在此腳本中不起作用?
第一組引號被命令行 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}'