使用脚本从修改后的 /etc/passwd 文件中读取用户名
read username from modified /etc/passwd file using a script
我想从 /etc/passwd file.My /etc/passwd 文件中读取用户
/etc/passwd
root:eRYFFjZ2./oo:0:0:root:/:/bin/bash
nobody:*:99:99:Nobody:/:
ftp:*:14:50:FTP User:/:/bin/false
#guest
guest:/QP8Q2QieMWi4:500:500:Guest:/:/bin/bash
gst1:x:1002:1003:,,,:/home/gst1:/bin/bash
#gend
#admin
ad1:x:1003:1004:,,,:/home/adm1:/bin/bash
ad2:x:1004:1005:,,,:/home/adm2:/bin/bash
#adend
我想使用 script.first read guest 和 gst1 从该文件中获取用户。然后是 ad1、ad2。
我尝试使用
awk'#guest/{flag-1;next}/#gend/{flag=0}flag' /etc/passwd
awk'#admin/{flag-1;next}/#adend/{flag=0}flag' /etc/passwd
这给了我两行
guest:/QP8Q2QieMWi4:500:500:Guest:/:/bin/bash
gst1:x:1002:1003:,,,:/home/gst1:/bin/bash
ad1:x:1003:1004:,,,:/home/adm1:/bin/bash
ad2:x:1004:1005:,,,:/home/adm2:/bin/bash
我想先提取 'guest' 用它做一些操作然后提取 'gst1' 。
然后我想提取管理员用户名(ad1 和 ad2)
能不能一会一个一个的提取出来loop.I想要这样
start from label #guest
get user 'guest'
===do some work with 'guest'===
continue above steps for the users up to label #gend
我 运行 这个 linux 在嵌入式目标中,文件系统是自定义构建的。
您需要将 :
指定为记录分隔符并利用记录变量。让我们打印一条简单的消息:
awk -F: '/#guest/{flag=1;next} /#gend/ {flag=0} flag { print "work with \"" "\""}' /etc/passwd
但您也可以 运行 提供用户名作为参数的外部命令,将 print
语句更改为 system
调用。
例如。让我们列出用户主目录内容(使用 /etc/passwd
的第六列内容):
awk -F: '/#guest/{flag=1;next} /#gend/{flag=0} flag { system("ls " ) }' /etc/passwd
您可以使用以下 GNU sed 命令:
sed '0,/#guest/d;/#gend/,$d;s/:.*//' /etc/passwd
0,/#guest/d
删除所有行,直到 #guest
(包括它)。
/#gend/,$d
删除从 #gend
到使用 $
表示的输入结尾的所有内容。 (在 GNU sed 中)
s/:.*//
删除从第一个 :
到剩余行末尾的所有内容。
输出:
guest
gst1
如果要 "do something" 用户名,请使用 while
循环和 read
:
sed '0,/#guest/d;/#gend/,$d;s/:.*//' /etc/passwd | while read user ; do
echo "$user"
do something ...
done
简单地在输出周围放一个循环:
awk'#guest/{flag-1;next}/#gend/{flag=0}flag' /etc/passwd | while read pwline
do
# do what you want to do with guest users
done
awk'#admin/{flag-1;next}/#adend/{flag=0}flag' /etc/passwd | while read pwline
do
# do what you want to do with admin users
done
我想从 /etc/passwd file.My /etc/passwd 文件中读取用户
/etc/passwd
root:eRYFFjZ2./oo:0:0:root:/:/bin/bash
nobody:*:99:99:Nobody:/:
ftp:*:14:50:FTP User:/:/bin/false
#guest
guest:/QP8Q2QieMWi4:500:500:Guest:/:/bin/bash
gst1:x:1002:1003:,,,:/home/gst1:/bin/bash
#gend
#admin
ad1:x:1003:1004:,,,:/home/adm1:/bin/bash
ad2:x:1004:1005:,,,:/home/adm2:/bin/bash
#adend
我想使用 script.first read guest 和 gst1 从该文件中获取用户。然后是 ad1、ad2。 我尝试使用
awk'#guest/{flag-1;next}/#gend/{flag=0}flag' /etc/passwd
awk'#admin/{flag-1;next}/#adend/{flag=0}flag' /etc/passwd
这给了我两行
guest:/QP8Q2QieMWi4:500:500:Guest:/:/bin/bash
gst1:x:1002:1003:,,,:/home/gst1:/bin/bash
ad1:x:1003:1004:,,,:/home/adm1:/bin/bash
ad2:x:1004:1005:,,,:/home/adm2:/bin/bash
我想先提取 'guest' 用它做一些操作然后提取 'gst1' 。 然后我想提取管理员用户名(ad1 和 ad2)
能不能一会一个一个的提取出来loop.I想要这样
start from label #guest
get user 'guest'
===do some work with 'guest'===
continue above steps for the users up to label #gend
我 运行 这个 linux 在嵌入式目标中,文件系统是自定义构建的。
您需要将 :
指定为记录分隔符并利用记录变量。让我们打印一条简单的消息:
awk -F: '/#guest/{flag=1;next} /#gend/ {flag=0} flag { print "work with \"" "\""}' /etc/passwd
但您也可以 运行 提供用户名作为参数的外部命令,将 print
语句更改为 system
调用。
例如。让我们列出用户主目录内容(使用 /etc/passwd
的第六列内容):
awk -F: '/#guest/{flag=1;next} /#gend/{flag=0} flag { system("ls " ) }' /etc/passwd
您可以使用以下 GNU sed 命令:
sed '0,/#guest/d;/#gend/,$d;s/:.*//' /etc/passwd
0,/#guest/d
删除所有行,直到 #guest
(包括它)。
/#gend/,$d
删除从 #gend
到使用 $
表示的输入结尾的所有内容。 (在 GNU sed 中)
s/:.*//
删除从第一个 :
到剩余行末尾的所有内容。
输出:
guest
gst1
如果要 "do something" 用户名,请使用 while
循环和 read
:
sed '0,/#guest/d;/#gend/,$d;s/:.*//' /etc/passwd | while read user ; do
echo "$user"
do something ...
done
简单地在输出周围放一个循环:
awk'#guest/{flag-1;next}/#gend/{flag=0}flag' /etc/passwd | while read pwline
do
# do what you want to do with guest users
done
awk'#admin/{flag-1;next}/#adend/{flag=0}flag' /etc/passwd | while read pwline
do
# do what you want to do with admin users
done