这更多是针对学习BASH而不是创建特定代码。
---问题:编写一个Bash脚本,它将计算机系统上的登录名列表作为命令行参数,并显示拥有这些登录的用户的这些登录名,全名和用户ID(如所包含的)在/ etc / passwd文件中),每行一个。如果登录名无效(在/ etc / passwd文件中找不到),则显示登录名和相应的错误消息。 ---
如果我需要创建一个代码来解决这个问题,我可以使用"选择"像这样的列表:
read -p "Enter choice: " ch
if [ "$ch" = "1" ]; then
function_1
else
if [ "$ch" = "2" ]; then
function_2
else
if [ "$ch" = "3" ]; then
function_3
else
if [ "$ch" = "4" ]; then
function_4
else
if [ "$ch" = "5" ]; then
function_5
fi x5
或是否必须使用grep和test方法完成,其中用户读取输入必须被带入变量Name1 Name2 .... NameN并通过grep命令测试到ect / passwd文件。
#!/bin/bash
# pgroup -- first version
# Fetch the GID from /etc/group
gid=$(grep "$̂1:" /etc/group | cut -d: -f3)
# Search users with that GID in /etc/passwd
grep "^[^:]*:[^:]*:[^:]*:$gid:" /etc/passwd | cut -d: -f1`enter code here`
请使用一些通用代码尽力解释。我仍在学习基础知识并测试不同的想法。如果这些是非常模糊的概念我很抱歉,我仍然掌握着BASH。
答案 0 :(得分:0)
你会:
从用户接受(读取)用户名
使用grep
,
如果结果为阳性(即您有数据),请根据需要显示
否则,显示错误消息(或您需要的任何内容)。
你几乎就在那里(如何获得输入,如何使用grep进行搜索)。你需要的是将grep的结果变成你可以检查的变量。您可以尝试以下方式:
Result=$(grep....)
然后检查Result
。
答案 1 :(得分:0)
对我而言,您似乎错过了问题的一个重要部分:名称作为参数传递给脚本:
./script.sh name1 name2 name3
如果是这种情况,那么循环将是最合适的选择:
for login; do
printf '%s: %s\n' "$login" "$(grep "^$login" /etc/passwd)"
done
请注意,for
循环默认迭代传递给脚本$@
的参数列表。