[英]Linux - List users which have specific directory
我正在嘗試創建一個腳本,該腳本將列出該用戶的名稱,只有該特定用戶在其文件夾中具有特定且可用的目錄時。
#!/bin/bash
for i in `cat /etc/passwd | cut -d : -f5\,6 | cut -d : -f2`
do
cd $i
if [ -d public_html ]
then
echo `cat /etc/passwd | cut -d : -f5,6 | cut -d : -f1`
fi
done
首先,我獲得了具有主文件夾的所有用戶名的列表。 然后,對於每個用戶,我進入他的目錄。如果在他的目錄中找到public_html目錄,則回顯該用戶。
當我在終端中運行此命令時,將列出所有用戶:
cat /etc/passwd | cut -d : -f5,6 | cut -d : -f1
但是,我需要以某種方式從整個列表中獲取用戶i。
有人能這么善解人意地解釋我做錯了什么,要注意什么嗎?
您得到錯誤的結果,因為您正在檢查文件(使用-f
)。 嘗試使用-d
。
使用cat and cut也不是bash,在大多數情況下可以很容易地用script代替。
我會做這樣的事情:
while IFS=: read -r user pass uid gid desc homedir shell; do [ -d "$homedir"/public_html ] && echo "$user"; done < /etc/passwd
我們將字段分隔符( IFS
)設置為:
因為/etc/passwd
使用的是),我們讀取其中的文件並設置要使用的變量。 然后對每一行進行測試,如果測試成功( &&
),我們將回顯結果。
引號並不是必需的,因為我們知道文件的格式,但是是很好的做法。
如果用戶的主目錄以標准方式設置:
cd /home
for pubdir in */public_html/ ; do
echo "${pubdir%%/*}"
done
我做了貧民窟的風格...
#!/bin/bash
counter=0
for i in `cat /etc/passwd | cut -d : -f6`
do
if [ -r $i ]
then
cd $i
if [ -d public_html ]
then
counter2=2
for j in `cat /etc/passwd | cut -d : -f5`
do
counter2=$(($counter2 + 1))
if [ $counter -eq $counter2 ]
then
echo $j
fi
done
fi
counter=$(($counter + 1))
fi
done
#!/bin/bash
getent passwd | awk -F: '{printf "%s\t%s\n",$1, $6}'| while read -r user home
do
if [ -d ${home}/public_html ] ; then
echo ${user}
fi
done
無論使用/ etc / passwd還是ldap,這都應該起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.