[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Adduser only one or. two users



On Fri, Aug 05, 2022 at 11:05:50AM +0530, Ishaan Mahajan wrote:
> Sorry for another email but this is what it looks like now - RUN sudo
> adduser --shell $USERSHELLPATH --disabled-password $USERNAME && \
> However, I am still running into the same problem.

You need to listen to what people have already said.

We need to know what's IN THOSE VARIABLES.

You need to double-quote all variable expansions.  "$USERNAME" with quotes
instead of $USERNAME without quotes.

And, as Cindy pointed out, you need to proofread for missing dollar signs
and other typos.

Finally, SHOW US the actual problem, in context.  Don't just describe it
or paraphrase it.  Actually COPY the text from your terminal, showing
your shell prompt, the command you typed, and the full output of the
script.

In fact, for short scripts, what I like to do is run "cat thescript"
as a shell command, and then run the script as a second shell command.
Then I copy the entire thing, from the "cat" all the way down to the
bottom of the script's output, and include all of that in the message.
That way people can see the script, and see its output, all together at
one time.

Here's an example.  Let's say I have a script that's supposed to divide
a number by 2, and write the result.  And suppose it's got a couple
bugs in it.  I might ask for help like this:



"My script doesn't work.  If I enter an odd number, I don't get the right
answer.  And if I enter more than one number, it only divides the first
one.  Why?"

unicorn:~$ cat foo
#!/bin/bash

half() {
  echo $(( $1 / 2 ))
}

read -r -p "Enter a number: " number
half $number
unicorn:~$ ./foo
Enter a number: 15
7
unicorn:~$ ./foo
Enter a number: 6 8
3



Here, you can see the whole script, and the results of running it twice,
DEMONSTRATING the problem.  So now, you can see what I'm seeing.  You
know exactly what I gave as input.  You know exactly what the script
wrote as output.  Now you can actually try to point out the bugs in my
script.

There are at least three:

1) The / operator is integer division, not floating point.  If the
   expected result of the first run is 7.5 then I need to use bc or awk or
   something to do the floating point division.

2) Failure to quote $number means the input gets split into multiple
   words when it's passed to the function.  $1 will contain the first
   word, and $2 the second word, etc.  Of course, there's more to it than
   that.  You can't rely on this to do ONLY word splitting.  If the user
   types * then the function will receive a bunch of filenames as its
   arguments.  Shells SUCK.

   unicorn:~$ ./foo
   Enter a number: *
   ./foo: line 4: 00INDEX: value too great for base (error token is "00INDEX")

3) There is no part of my script that handles multiple inputs as multiple
   divisions.  It just isn't WRITTEN to do it.  The entire thing needs to
   be redone, with proper and safe input word splitting, and a loop.

Sorry for the small tangent, but since bug number 2 in my script is also
present in yours, despite our previous warnings which you ignored, maybe
seeing it in action might help you.


Reply to: