Bash

awk 上的 Shell 變數以獲取遠端伺服器資訊

  • October 10, 2022

我正在嘗試使用 grep 正則表達式將 shell 變數發送到 awk。我正在嘗試僅輸出在遠端伺服器上創建的特定使用者資訊 但不知何故無法正常工作

我的嘗試但空結果為空

#!/bin/bash
echo "Enter username which u want to add"
read Student3
ssh root@serverIP "useradd $Student3;"
awk -F: '{print $1, $3, $6, $7}' /etc/passwd | grep "^${Student3}"

但沒有 grep 輸出是:

root 0 /root /bin/bash
bin 1 /bin /sbin/nologin
daemon 2 /sbin /sbin/nologin
adm 3 /var/adm /sbin/nologin
lp 4 /var/spool/lpd /sbin/nologin
sync 5 /sbin /bin/sync
shutdown 6 /sbin /sbin/shutdown
halt 7 /sbin /sbin/halt
mail 8 /var/spool/mail /sbin/nologin
operator 11 /root /sbin/nologin

使用 grep | grep "^${Student3}"空輸出

您希望您添加的使用者顯示在本地/etc/passwd。如果它是您要解析的遠端awk系統上的文件,那麼您需要使用它ssh來訪問數據:

#!/bin/bash

read -r -p 'Username: ' user

# Add user and check the remote /etc/passwd file
ssh remote "useradd '$user' && cat /etc/passwd" |
awk -F : -v user="$user" '$1 == user { print $1, $3, $6, $7 }'

最後一個管道也可以寫成

ssh remote "useradd '$user' && getent passwd '$user'" |
awk -F : '{ print $1, $3, $6, $7 }'

請注意,您不太可能希望/etc/passwd使用正則表達式解析數據,^$user因為這將匹配任何使用者名以$user. 上面的兩種程式碼變體通過不使用正則表達式匹配而是對完整使用者名進行字元串比較來避免這種情況。

引用自:https://unix.stackexchange.com/questions/720411