Deutsch   English   Français   Italiano  
<vk41eb$1uvhe$1@news.xmission.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!xmission!nnrp.xmission!.POSTED.shell.xmission.com!not-for-mail
From: gazelle@shell.xmission.com (Kenny McCormack)
Newsgroups: comp.unix.shell
Subject: Checking for right # of args in a shell script (Was: a sed question)
Date: Fri, 20 Dec 2024 15:11:07 -0000 (UTC)
Organization: The official candy of the new Millennium
Message-ID: <vk41eb$1uvhe$1@news.xmission.com>
References: <874j304vv3.fsf@example.com> <vk40gi$3g9sm$1@dont-email.me>
Injection-Date: Fri, 20 Dec 2024 15:11:07 -0000 (UTC)
Injection-Info: news.xmission.com; posting-host="shell.xmission.com:166.70.8.4";
	logging-data="2063918"; mail-complaints-to="abuse@xmission.com"
X-Newsreader: trn 4.0-test77 (Sep 1, 2010)
Originator: gazelle@shell.xmission.com (Kenny McCormack)
Bytes: 2423
Lines: 32

In article <vk40gi$3g9sm$1@dont-email.me>,
Janis Papanagnou  <janis_papanagnou+ng@hotmail.com> wrote:
>On 18.12.2024 20:46, Salvador Mirzo wrote:
>> (*) Summary
>> 
>> I wrote a sed script that makes a line replacement after it finds the
>> right spot.  So far so good.  Then I added quit command after the
>> change, but the quit does not seem to take effect---violating my
>> expectation.  I'll appreciate any help on understanding what's going on.
>
>First (before I forget it) change your string comparison '<' to the
>numerical comparison operator '-lt' as in:   test $# -lt 2 && usage
>Otherwise, if you get used to using the wrong operator, you may get
>subtle errors in future if you continue that habit.

Agreed, in general, but in practice, the need rarely arises.

The idiomatic way to do this is just:

    [ $# = 2 ] || usage()

Also, when I need to do more complex arg verification, I use bash's [[ ]]
mechanism (Yes, I know OP is using /bin/sh, but there is no reason nowadays
not to use bash).  Say I want there to be 2 or 3 args (no other # is
acceptable and the 2nd arg must be numeric.  Like this:

    [[ $#,$2 =~ ^[23],[0-9]+$ ]] || { echo "Arg error!"; exit; }

-- 
On the subject of racism being depicted in the media, the far right and the far left have
met up in agreement (sort of like how plus infinity meets up with minus infinity).
The far left doesn't want it, because they are afraid it will make people racist.
The far right doesn't want it, because they are afraid it will make people feel bad about being racist.