2

我正在寻找读取文件的用户名和密码并输入这些以添加用户或删除用户的方法。

EG:我有一个名为“userlist”的文件,其内容如下:

user1 pass1
user2 pass2
user3 pass3

我完全不明白的是如何使用 BASH 脚本添加这些帐户。

我到目前为止是这样的:

if [[ whoami -ne "root" ]]
then
exit
else
echo "wish to add or delete? a/d"
read uArg
echo "enter file name"
read uFile
if [ $uArg = "a" -o $uArg = "A" ]
then
    IDK WHAT TO DO HERE.
elif [ $uArg = "d" -o $uArg = "D" ]
then
   IDK WHAT TO DO HERE.
fi
fi

好吧,我不明白的是如何逐行读取每个单词并输入用户名和密码以添加新用户或删除现有用户。

该程序用于读取整个文件并为每个用户添加相应的密码。如果选择删除,则它会删除文件中的每个用户。

我是 BASH 的新手,所以任何帮助都将不胜感激。

4

3 回答 3

3

awk完美满足您的需求。

看这个例子:

$ awk '{print "Hi! my name is " $1 ", and my pass is " $2}' ./userpass.txt 
Hi! my name is user1, and my pass is pass1
Hi! my name is user2, and my pass is pass2
Hi! my name is user3, and my pass is pass3

awk 将用户名存储在 $1 中,密码存储在 $2 中(第一列和第二列)。

您可以使用管道来执行从 awk 获得的字符串作为命令:

$ awk '{print "echo " $1}' ./userpass.txt | /bin/bash
user1
user2
user3
于 2012-09-13T11:47:56.113 回答
0

类似于...的东西

if [[ whoami -ne "root" ]]
    then
    exit
else
    echo "wish to add or delete? a/d"
    read uArg
    echo "enter file name"
    read uFile
    if [ $uArg = "a" -o $uArg = "A" ]
    then
        while read user passwd rest
        do
            if [ ! -z $rest ]; then
                echo "Bad data"
            else
                useradd -m $user
                passwd $user <<EOP
$passwd
$passwd
EOP
            fi
        done < $uFile
    elif [ $uArg = "d" -o $uArg = "D" ]
    then
        while read user passwd rest
        do
            if [ ! -z $rest ]; then
                echo "Bad data"
            else
                userdel $user
            fi
        done < $uFile
    fi
fi
于 2012-09-13T06:37:55.747 回答
0

第一条评论:

  • 学习并习惯基本命令,如 grep、sed、echo,通常与文件操作有关,如果你想了解 bash 基础知识,awk 也是一个不错的选择,你会遇到很多关于文件操作的知识
  • 代码可以使用更多的错误测试,它只是一个基本的骨架
  • 小心字符串和变量,尽可能引用它们,字符串中的空格可能会造成很多坏事

可能是这样的:

echo "wish to add or delete? a/d"
read uArg
echo "enter username"
read uName
grep "^$uName " password-file
RET=$?

if [ "$uArg" == "a" -o "$uArg" == "A" ]
then
    [ $RET -eq 0 ] && echo "User is already in file"

    if [ $RET -ne 0 ]
    then
        echo "enter password"
        read uPass
        echo "$uName $uPass" >> password-file
    fi

elif [ "$uArg" == "d" -o "$uArg" == "D" ]
then
    [ $RET -ne 0 ] && echo "User is not file"

    if [ $RET -eq 0 ]
    then
        sed -i "/^$uName /d" password-file
        echo "User deleted"

    fi
fi
于 2012-09-13T06:38:16.463 回答