my problem I have to write on a single line a command to launch a script only if the number of users on the system is less than ten.
This is what I have so far.
grep | who "* < 10 " $Users-on
I always get confused about quotes and brackets

Hello,

Grep is a filter, meaning that you have to send something to grep before grep can do anything. For example:

ps -aux | grep kc0arf

on a *nix machine will list out all of the processes that have kc0arf on the output of the ps command.

So, you need to use the who command to find out how many users are logged onto your machine. That is done by:

who

And you see all of the users. But let's look further:

man who

and you will see some options. Looking, we see who -- count.

Take a look at that, and you should find what you are looking for.

Unfortunately, I do not know further on how to do a conditional at the command prompt... I usually write a short bash script that has if/then/else logic nice and neatly formatted.

Let us know.

Christian


Unfortunately, I do not know further on how to do a conditional at the command prompt... I usually write a short bash script that has if/then/else logic nice and neatly formatted.

You'd just write the same thing at the prompt, just use semicolons instead of carriage returns:

bash-2.05# [b]if [ foo ] ; then bar ; else echo "not foo or bar" ; fi[/b]

The syntax is different according for each shell, but if you are using the bash shell you could try the following:

if [ `who | wc -l` -lt 10 ]; then
echo "less than";
else
echo " more than";
fi

which can be written as one line as well, but i don't know what difference that would make.

if [ `who | wc -l` -lt 10 ]; then echo "less than"; else echo " more than"; fi

the point is that you need two programs, one that lists the users: who and one that counts lines wc.

wc is actually a word counting program, but with the -l flag it counts lines

The execution inverted comma's '`' mean to take the textual result and use it as a variable. That is the number that is returned from word count should be used as a variable.

The if statement uses the -lt flag, which stands for less than
so if [ `who | wc -l` -lt 10 ]
means if the the number of lines of the who output is less than 10, then perform the following action ...
in our case just echoing out to the screen, but you will want to run your program there

l8a
profhof

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.