Bash脚本验证/ etc / passwd中是否存在用户名

时间:2012-06-21 14:52:37

标签: bash unix cat

我想创建一个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"

3 个答案:

答案 0 :(得分: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的输出(即uid $username的输出(如果存在),或用户的错误消息不)。

答案 1 :(得分:0)

#!/bin/bash   
read -p "Enter a username: " username
getUser=$(cat /etc/passwd | grep $username | cut -d":" -f1)
echo $getUser >> users.txt

并不是真的需要一个循环,好像它不存在它不会#39;添加任何东西到文件。

答案 2 :(得分: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