提高Bash的知识

时间:2016-11-15 13:38:04

标签: bash input passwords

这更多是针对学习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。

2 个答案:

答案 0 :(得分:0)

你会:

  1. 从用户接受(读取)用户名

  2. 使用grep

  3. 检查记录,检查用户名是否存在
  4. 如果结果为阳性(即您有数据),请根据需要显示

  5. 否则,显示错误消息(或您需要的任何内容)。

  6. 你几乎就在那里(如何获得输入,如何使用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循环默认迭代传递给脚本$@的参数列表。