2012-09-13 49 views
1

我正在看一個閱讀文件的用戶名和密碼並輸入這些文件以添加用戶或刪除用戶。從文件中讀取用戶名和密碼

EG:我有一個名爲「用戶列表」,內容如下與此格式文件:

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的新手,所以任何幫助我都會很感激。

回答

2

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 
+0

謝謝你們,非常感謝幫助。最後,我將ns-keip的想法納入其中,使用awk通過while循環從文件中獲取信息,並將每個信息存儲在一個變量中,然後將其傳遞到adduser命令中。再一次感謝你的幫助。 –

+0

不客氣:)也有本地的awk system()函數,它似乎在shell中執行命令,但坦率地說,我沒有得到它如何使用它。 –

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 
+0

哇,小心,這涉及與系統用戶,不喜歡在運提到的一些用戶輸入的文本文件 – vvondra

+0

博覽會點。錯誤的問題。 – TaninDirect

+0

他需要什麼根,比? – fork0

0

最早評論:

  • 學習和習慣,如grep基本命令,sed的,回聲,一般以文件操作,是AWK一個很好的選擇,以及如果你想知道bash的基本知識,你會遇到很多關於文件操作
  • 代碼可以使用更多的錯誤測試,它只是一個基本的骨架
  • 小心串和變量,引用他們只要有可能,在串空間可以做很多的壞

可能是一些沿着這些路線:

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 
+1

從終端讀取密碼時,最好使用'read -s'。 – cdarke

相關問題