-1

でユーザー名の存在を確認する Bash スクリプトを作成したいと考えています/etc/passwd。存在する場合は、ファイルに追加しusers.txtます。

私は UNIX プログラミングがあまり得意ではないので、誰かが助けてくれることを願っています。

while(get to the end of /etc/passwd){

  name=$(cat /etc/passwd | cut -d: -f1);
  num1=$(cat /etc/passwd | cut -d: -f3);
  num2=$(cat /etc/passwd | cut -d: -f4);

  if(num1==num2)
   /*i compare argv[0] with $name */
   /* if true i=1 */

}

if(i==1)
  save following string "argv[0]=agrv[1]"
else
  "error message"
4

3 に答える 3

4
#!/bin/bash
read -p "Username: " username
egrep -q "^$username:" /etc/passwd && echo $username >> users.txt

注: ユーザー名の存在のみをテストしようとしている場合は、次を使用することをお勧めしますid

if id -u $username >/dev/null 2>&1;
then
    echo $username >> users.txt
fi

は、表示さ> /dev/null 2>&1れる出力を停止するためだけに存在しますid(つまり、uidof$usernameが存在する場合、またはユーザーが存在しない場合はエラー メッセージ)。

于 2012-06-21T15:12:39.073 に答える
0
#!/bin/bash

found=false

while IFS=: read -r name _ num1 num2 _
do
    if (( num1 == num2 ))
    then
        if [[ $name == $1 ]]
        then
            printf '%s\n' "$1=$2"
            found=true
        fi
    fi
done < /etc/passwd > users.txt

if ! found
then
    printf '%s\n' "error message" >&2
    if [[ -e users.txt && ! -s users.txt ]]
    then
        rm users.txt
    fi
fi
于 2012-06-21T16:18:14.750 に答える
0
#!/bin/bash   
read -p "Enter a username: " username
getUser=$(cat /etc/passwd | grep $username | cut -d":" -f1)
echo $getUser >> users.txt

ループが存在しないかのようにループする必要はありません。ファイルには何も追加されません。

于 2012-06-21T15:07:08.920 に答える