How to make “if not true condition”?

后端 未结 6 1071
夕颜
夕颜 2020-12-22 15:56

I would like to have the echo command executed when cat /etc/passwd | grep \"sysa\" is not true.

What am I doing wrong?

if          


        
6条回答
  •  天涯浪人
    2020-12-22 16:27

    On Unix systems that supports it (not macOS it seems):

    if getent passwd "$username" >/dev/null; then
        printf 'User %s exists\n' "$username"
    else
        printf 'User %s does not exist\n' "$username"
    fi 
    

    This has the advantage that it will query any directory service that may be in use (YP/NIS or LDAP etc.) and the local password database file.


    The issue with grep -q "$username" /etc/passwd is that it will give a false positive when there is no such user, but something else matches the pattern. This could happen if there is a partial or exact match somewhere else in the file.

    For example, in my passwd file, there is a line saying

    build:*:21:21:base and xenocara build:/var/empty:/bin/ksh
    

    This would provoke a valid match on things like cara and enoc etc., even though there are no such users on my system.

    For a grep solution to be correct, you will need to properly parse the /etc/passwd file:

    if cut -d ':' -f 1 /etc/passwd | grep -qxF "$username"; then
        # found
    else
        # not found
    fi
    

    ... or any other similar test against the first of the :-delimited fields.

提交回复
热议问题