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

さて、私が理解できないのは、各単語を1行ずつ読み、ユーザー名とパスワードを入力して新しいユーザーを追加したり、既存のユーザーを削除したりする方法です。

プログラムは、ファイル全体を読み取り、対応するパスワードを使用して各ユーザーを追加するように構成されています。削除を選択すると、ファイル内の各ユーザーが削除されます。

私は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 に格納します (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 などの基本的なコマンドを学び、慣れる
  • コードは、より多くのエラー テストを使用できます。これは単なる基本的なスケルトンです。
  • 文字列と変数に注意し、可能な限り引用符で囲みます。文字列内のスペースは多くの悪影響を与える可能性があります

これらの行に沿ったものである可能性があります:

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 に答える