Sponsored Content
Full Discussion: if statement problem
Top Forums Shell Programming and Scripting if statement problem Post 302578504 by Corona688 on Thursday 1st of December 2011 06:05:43 PM
Old 12-01-2011
Code:
if [[ 'grep -c "$username" /etc/passwd' = "1" ]]

'grep -c "$username" /etc/passwd' will never equal "1", because it's a string, containing the letters grep -c "$username" /etc/passwd". Single-quotes never run what's inside them.

Even if you did run it by putting it in backticks instead of single quotes, you'd still be doing it rather the long way around, making it count and checking its output string instead of just checking the return value grep and any other shell program gives you every time they finish. If grep succeeds, it'll trigger like 'true' in an if-statement, if it fails, it'll be like 'false'.

How about:

Code:
if grep -q "^$username:" /etc/passwd
then
...
fi

The "^" at the beginning of the string has a special meaning to grep, "must start at the beginning of the line". The : at the end just means :, so we know it matched the entire username part of "username:x:uid:gid:..." and not just part of it like "usernamezzz:x:uid:gid:..."

---------- Post updated at 05:05 PM ---------- Previous update was at 04:54 PM ----------

You also don't need to nest things 9 if-statements deep to check more than one thing in a row. Do that for more than 3 things and your code will become unreadable. If something's wrong, just quit early and spare yourself the mess.

You shouldn't depend on the $HOME variable. In some situations that's not even set. Try UID, that'll be 0 for root.

Code:
function die
{
        echo "$@" >&2
        exit 1
}

[ "$UID" -eq 0 ] || die "Not root"
[ -f /etc/passwd ] || die "/etc/passwd missing"

read USERNAME

until [ "$USERNAME" = "done" ]
do
        if grep -q "^${USERNAME}:" /etc/passwd
        then
                ...
        else
                echo "$USERNAME not found"
        fi

        read USERNAME
done

This User Gave Thanks to Corona688 For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

if statement problem

I keep getting an error at line 21, it doesn't like my if statement. Previously I have tried using (( )), but still get errors. The current error is that server_busy is not found. This is the script: #! /bin/ksh server_busy="na" for file in $1 $2 $3 $4 $5 $6 do echo " ${file}\t\c" ... (1 Reply)
Discussion started by: coughlin74
1 Replies

2. Shell Programming and Scripting

problem with an IF statement

I need an IF statement that will compare the contents of the variable CX with the actual string "CP". ie. If the contents of $CX are NOT equal to the actual string "CP" then blah blah blah. I have tried a number of things including the following....... if ]; then if ]; then if ];... (2 Replies)
Discussion started by: hcclnoodles
2 Replies

3. UNIX for Dummies Questions & Answers

if statement problem

hi all. i just have a very small problem. i have a menu of 7 choices. i want an if statement so that if the user chooses anything except inside the 1 to 7 range, i can handle the error for it. i tried this: if ] then ....... fi (but it dont work) ...any suggestions? ... (4 Replies)
Discussion started by: djt0506
4 Replies

4. Shell Programming and Scripting

If Statement Problem..

The problem I am having here is that only the 1st option is executed, no matter if I pick yes or no. What am I doing wrong? How can I get this working right without resorting to a case statement? echo "This is the max size your lvol can be:" echo $MAXSIZE echo echo Do you want to max out... (2 Replies)
Discussion started by: LinuxRacr
2 Replies

5. UNIX for Dummies Questions & Answers

if statement problem

See https://www.unix.com/shell-programming-scripting/96846-if-statement-problem.html (0 Replies)
Discussion started by: f_o_555
0 Replies

6. Shell Programming and Scripting

if statement problem

Hi I have a bash script like this if then echo "A" else echo "B" fi $1 is something like 02350 (there is always a trailing '0') and I would like to have an if based on the value of the digits after the 0. Can anybody help? Thanks, Sarah (3 Replies)
Discussion started by: f_o_555
3 Replies

7. UNIX for Dummies Questions & Answers

Having problem with if statement

Could someone help me out with this if statement? It's supposed to get a person's website, but it isn't working when I run it. website="" echo "Would you like to enter a website? Enter Yes/No" read choice if then while do echo "Please enter a website:"; read... (4 Replies)
Discussion started by: Sotau
4 Replies

8. Shell Programming and Scripting

while statement problem

Hi, Here is a big head scratcher for me.... I'm creating a loop with while reading lines from a file called example.txt: #!/bin/sh while read line do some command > another file ----- output to another file done < example.txt I would like that another file to be unique for every... (5 Replies)
Discussion started by: svetoslav_sj
5 Replies

9. Shell Programming and Scripting

Problem if statement

echo "Enter the variable: " " read var1 echo " " for i in ib eb atm do if ; then mv properties environment.properties break else echo "No changes to $var1 " fi done When i run and enter the eb it's not working.Any suggestions please.. (7 Replies)
Discussion started by: bhas85
7 Replies

10. UNIX for Beginners Questions & Answers

Problem with If statement

Hi All, I am writing an if statement to check multiple conditions, but when I try to execute the script it is breaking at the point of if statement by showing the issue below. Code I am using is given below. if -a ] then .... else ... fi I am not understanding... (3 Replies)
Discussion started by: ginrkf
3 Replies
partimaged-passwd(8)				       Partition Image Server Configuration				      partimaged-passwd(8)

NAME
partimaged-passwd - Manage partimaged user accounts SYNTAX
partimaged-passwd [-Dhl] username password partimaged-passwd [-Dhl] username DESCRIPTION
partimaged can either authenticate against local user accounts (This needs access to /etc/shadow. As this is a potential security risk this method is not recommended) or its own password database in /etc/partimaged/passwd.db. To simplify the management of the partimaged user database this tool was written. It allows to easily add and remove users or list the users in the database. All users in this database are allowed to access the partimaged server. OPTIONS
-D username Delete the specified user from the password file. -l List users in password file and exit. -h Output help information and exit. FILES
/etc/partimaged/passwd.db AUTHORS
Michael Biebl <biebl@debian.org> SEE ALSO
partimaged(8), partimagedusers(5), partimage(1) Michael Biebl <;biebl@teco.edu> 0.1 partimaged-passwd(8)
All times are GMT -4. The time now is 01:55 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy