All of lore.kernel.org
 help / color / mirror / Atom feed
* [iproute PATCH v2 0/2] Covscan: Shell script fixes
@ 2017-08-17 17:09 Phil Sutter
  2017-08-17 17:09 ` [iproute PATCH v2 1/2] examples: Some shell fixes to cbq.init Phil Sutter
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Phil Sutter @ 2017-08-17 17:09 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev

This series collects patches from v1 which deal with programming
mistakes in shell scripts.

No changes to the actual patches, just splitting into smaller series.

Phil Sutter (2):
  examples: Some shell fixes to cbq.init
  ifcfg: Quote left-hand side of [ ] expression

 examples/cbq.init-v0.7.3 | 24 ++++++++++++------------
 ip/ifcfg                 |  2 +-
 2 files changed, 13 insertions(+), 13 deletions(-)

-- 
2.13.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [iproute PATCH v2 1/2] examples: Some shell fixes to cbq.init
  2017-08-17 17:09 [iproute PATCH v2 0/2] Covscan: Shell script fixes Phil Sutter
@ 2017-08-17 17:09 ` Phil Sutter
  2017-08-17 17:09 ` [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression Phil Sutter
  2017-08-18 16:12 ` [iproute PATCH v2 0/2] Covscan: Shell script fixes Stephen Hemminger
  2 siblings, 0 replies; 7+ messages in thread
From: Phil Sutter @ 2017-08-17 17:09 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev

This addresses the following issues:

- $@ is an array, so don't use it in quoted strings - use $* instead.

- Add missing quotes to components of [ ] expressions. These are not
  strictly necessary since the output of 'wc -l' should be a single word
  only, but in case of errors, bash prints "integer expression expected"
  instead of "too many arguments".

- Use -print0/-0 when piping from find to xargs to allow for filenames
  which contain whitespace.

- Quote arguments to 'eval' to prevent word-splitting.

Signed-off-by: Phil Sutter <phil@nwl.cc>
---
 examples/cbq.init-v0.7.3 | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/examples/cbq.init-v0.7.3 b/examples/cbq.init-v0.7.3
index 1bc0d446f8983..66448d88f0053 100644
--- a/examples/cbq.init-v0.7.3
+++ b/examples/cbq.init-v0.7.3
@@ -532,7 +532,7 @@ cbq_off () {
 
 ### Prefixed message
 cbq_message () {
-	echo -e "**CBQ: $@"
+	echo -e "**CBQ: $*"
 } # cbq_message
 
 ### Failure message
@@ -560,15 +560,15 @@ cbq_time2abs () {
 ### Display CBQ setup
 cbq_show () {
 	for dev in `cbq_device_list`; do
-		[ `tc qdisc show dev $dev| wc -l` -eq 0 ] && continue
+		[ "`tc qdisc show dev $dev| wc -l`" -eq 0 ] && continue
 		echo -e "### $dev: queueing disciplines\n"
 		tc $1 qdisc show dev $dev; echo
 
-		[ `tc class show dev $dev| wc -l` -eq 0 ] && continue
+		[ "`tc class show dev $dev| wc -l`" -eq 0 ] && continue
 		echo -e "### $dev: traffic classes\n"
 		tc $1 class show dev $dev; echo
 
-		[ `tc filter show dev $dev| wc -l` -eq 0 ] && continue
+		[ "`tc filter show dev $dev| wc -l`" -eq 0 ] && continue
 		echo -e "### $dev: filtering rules\n"
 		tc $1 filter show dev $dev; echo
 	done
@@ -585,7 +585,7 @@ cbq_init () {
 
 	### Gather all DEVICE fields from $1/cbq-*
 	DEVFIELDS=`find $1 -maxdepth 1 \( -type f -or -type l \) -name 'cbq-*' \
-		  -not -name '*~' | xargs sed -n 's/#.*//; \
+		  -not -name '*~' -print0 | xargs -0 sed -n 's/#.*//; \
 		  s/[[:space:]]//g; /^DEVICE=[^,]*,[^,]*\(,[^,]*\)\?/ \
 		  { s/.*=//; p; }'| sort -u`
 	[ -z "$DEVFIELDS" ] &&
@@ -593,7 +593,7 @@ cbq_init () {
 
 	### Check for different DEVICE fields for the same device
 	DEVICES=`echo "$DEVFIELDS"| sed 's/,.*//'| sort -u`
-	[ `echo "$DEVICES"| wc -l` -ne `echo "$DEVFIELDS"| wc -l` ] &&
+	[ "`echo "$DEVICES"| wc -l`" -ne "`echo "$DEVFIELDS"| wc -l`" ] &&
 		cbq_failure "different DEVICE fields for single device!\n$DEVFIELDS"
 } # cbq_init
 
@@ -618,7 +618,7 @@ cbq_load_class () {
 	PRIO_MARK=$PRIO_MARK_DEFAULT
 	PRIO_REALM=$PRIO_REALM_DEFAULT
 
-	eval `echo "$CFILE"| grep -E "^($CBQ_WORDS)="`
+	eval "`echo "$CFILE"| grep -E "^($CBQ_WORDS)="`"
 
 	### Require RATE/WEIGHT
 	[ -z "$RATE" -o -z "$WEIGHT" ] &&
@@ -661,7 +661,7 @@ if [ "$1" = "compile" ]; then
 
 	### echo-only version of "tc" command
 	tc () {
-		echo "$TC $@"
+		echo "$TC $*"
 	} # tc
 
 elif [ -n "$CBQ_DEBUG" ]; then
@@ -669,13 +669,13 @@ elif [ -n "$CBQ_DEBUG" ]; then
 
 	### Logging version of "ip" command
 	ip () {
-		echo -e "\n# ip $@" >> $CBQ_DEBUG
+		echo -e "\n# ip $*" >> $CBQ_DEBUG
 		$IP "$@" 2>&1 | tee -a $CBQ_DEBUG
 	} # ip
 
 	### Logging version of "tc" command
 	tc () {
-		echo -e "\n# tc $@" >> $CBQ_DEBUG
+		echo -e "\n# tc $*" >> $CBQ_DEBUG
 		$TC "$@" 2>&1 | tee -a $CBQ_DEBUG
 	} # tc
 else
@@ -711,8 +711,8 @@ if [ "$1" != "compile" -a "$2" != "nocache" -a -z "$CBQ_DEBUG" ]; then
 	### validate the cache
 	[ "$2" = "invalidate" -o ! -f $CBQ_CACHE ] && VALID=0
 	if [ $VALID -eq 1 ]; then
-		[ `find $CBQ_PATH -maxdepth 1 -newer $CBQ_CACHE| \
-		  wc -l` -gt 0 ] && VALID=0
+		[ "`find $CBQ_PATH -maxdepth 1 -newer $CBQ_CACHE| \
+		  wc -l`" -gt 0 ] && VALID=0
 	fi
 
 	### compile the config if the cache is invalid
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression
  2017-08-17 17:09 [iproute PATCH v2 0/2] Covscan: Shell script fixes Phil Sutter
  2017-08-17 17:09 ` [iproute PATCH v2 1/2] examples: Some shell fixes to cbq.init Phil Sutter
@ 2017-08-17 17:09 ` Phil Sutter
  2017-08-18  9:32   ` David Laight
  2017-08-18 16:12 ` [iproute PATCH v2 0/2] Covscan: Shell script fixes Stephen Hemminger
  2 siblings, 1 reply; 7+ messages in thread
From: Phil Sutter @ 2017-08-17 17:09 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev

This prevents word-splitting and therefore leads to more accurate error
message in case 'grep -c' prints something other than a number.

Signed-off-by: Phil Sutter <phil@nwl.cc>
---
 ip/ifcfg | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ip/ifcfg b/ip/ifcfg
index 083d9df36742f..30a2dc49816cd 100644
--- a/ip/ifcfg
+++ b/ip/ifcfg
@@ -131,7 +131,7 @@ noarp=$?
 
 ip route add unreachable 224.0.0.0/24 >& /dev/null
 ip route add unreachable 255.255.255.255 >& /dev/null
-if [ `ip link ls $dev | grep -c MULTICAST` -ge 1 ]; then
+if [ "`ip link ls $dev | grep -c MULTICAST`" -ge 1 ]; then
   ip route add 224.0.0.0/4 dev $dev scope global >& /dev/null
 fi
 
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* RE: [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression
  2017-08-17 17:09 ` [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression Phil Sutter
@ 2017-08-18  9:32   ` David Laight
  2017-08-18 11:24     ` Phil Sutter
  0 siblings, 1 reply; 7+ messages in thread
From: David Laight @ 2017-08-18  9:32 UTC (permalink / raw)
  To: 'Phil Sutter', Stephen Hemminger; +Cc: netdev@vger.kernel.org

From: Phil Sutter
> Sent: 17 August 2017 18:10
> This prevents word-splitting and therefore leads to more accurate error
> message in case 'grep -c' prints something other than a number.
> 
> Signed-off-by: Phil Sutter <phil@nwl.cc>
> ---
>  ip/ifcfg | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/ip/ifcfg b/ip/ifcfg
> index 083d9df36742f..30a2dc49816cd 100644
> --- a/ip/ifcfg
> +++ b/ip/ifcfg
> @@ -131,7 +131,7 @@ noarp=$?
> 
>  ip route add unreachable 224.0.0.0/24 >& /dev/null
>  ip route add unreachable 255.255.255.255 >& /dev/null
> -if [ `ip link ls $dev | grep -c MULTICAST` -ge 1 ]; then
> +if [ "`ip link ls $dev | grep -c MULTICAST`" -ge 1 ]; then

You could drag all these scripts into the 1990's by using $(...)
instead of `...`.

	David

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression
  2017-08-18  9:32   ` David Laight
@ 2017-08-18 11:24     ` Phil Sutter
  2017-08-18 16:38       ` David Laight
  0 siblings, 1 reply; 7+ messages in thread
From: Phil Sutter @ 2017-08-18 11:24 UTC (permalink / raw)
  To: David Laight; +Cc: Stephen Hemminger, netdev@vger.kernel.org

On Fri, Aug 18, 2017 at 09:32:52AM +0000, David Laight wrote:
> From: Phil Sutter
> > Sent: 17 August 2017 18:10
> > This prevents word-splitting and therefore leads to more accurate error
> > message in case 'grep -c' prints something other than a number.
> > 
> > Signed-off-by: Phil Sutter <phil@nwl.cc>
> > ---
> >  ip/ifcfg | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/ip/ifcfg b/ip/ifcfg
> > index 083d9df36742f..30a2dc49816cd 100644
> > --- a/ip/ifcfg
> > +++ b/ip/ifcfg
> > @@ -131,7 +131,7 @@ noarp=$?
> > 
> >  ip route add unreachable 224.0.0.0/24 >& /dev/null
> >  ip route add unreachable 255.255.255.255 >& /dev/null
> > -if [ `ip link ls $dev | grep -c MULTICAST` -ge 1 ]; then
> > +if [ "`ip link ls $dev | grep -c MULTICAST`" -ge 1 ]; then
> 
> You could drag all these scripts into the 1990's by using $(...)
> instead of `...`.

That's a different kettle of fish IMO, using $() doesn't change the
situation this addresses:

| $ [ $(echo foo bar) -eq 0 ] && echo ok
| bash: [: too many arguments
| $ [ "$(echo foo bar)" -eq 0 ] && echo ok
| bash: [: foo bar: integer expression expected

Cheers, Phil

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [iproute PATCH v2 0/2] Covscan: Shell script fixes
  2017-08-17 17:09 [iproute PATCH v2 0/2] Covscan: Shell script fixes Phil Sutter
  2017-08-17 17:09 ` [iproute PATCH v2 1/2] examples: Some shell fixes to cbq.init Phil Sutter
  2017-08-17 17:09 ` [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression Phil Sutter
@ 2017-08-18 16:12 ` Stephen Hemminger
  2 siblings, 0 replies; 7+ messages in thread
From: Stephen Hemminger @ 2017-08-18 16:12 UTC (permalink / raw)
  To: Phil Sutter; +Cc: netdev

On Thu, 17 Aug 2017 19:09:30 +0200
Phil Sutter <phil@nwl.cc> wrote:

> This series collects patches from v1 which deal with programming
> mistakes in shell scripts.
> 
> No changes to the actual patches, just splitting into smaller series.
> 
> Phil Sutter (2):
>   examples: Some shell fixes to cbq.init
>   ifcfg: Quote left-hand side of [ ] expression
> 
>  examples/cbq.init-v0.7.3 | 24 ++++++++++++------------
>  ip/ifcfg                 |  2 +-
>  2 files changed, 13 insertions(+), 13 deletions(-)
> 

Applied.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression
  2017-08-18 11:24     ` Phil Sutter
@ 2017-08-18 16:38       ` David Laight
  0 siblings, 0 replies; 7+ messages in thread
From: David Laight @ 2017-08-18 16:38 UTC (permalink / raw)
  To: 'Phil Sutter'; +Cc: Stephen Hemminger, netdev@vger.kernel.org

From: Phil Sutter
> Sent: 18 August 2017 12:24
...
> > > -if [ `ip link ls $dev | grep -c MULTICAST` -ge 1 ]; then
> > > +if [ "`ip link ls $dev | grep -c MULTICAST`" -ge 1 ]; then
> >
> > You could drag all these scripts into the 1990's by using $(...)
> > instead of `...`.
> 
> That's a different kettle of fish IMO, using $() doesn't change the
> situation this addresses:
> 
> | $ [ $(echo foo bar) -eq 0 ] && echo ok
> | bash: [: too many arguments
> | $ [ "$(echo foo bar)" -eq 0 ] && echo ok
> | bash: [: foo bar: integer expression expected

I didn't say it would.
IFS=
set -o noglob
would though - not that I'd suggest it here.
protecting the 'eval' is somewhat harder.

	David

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-08-18 16:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-17 17:09 [iproute PATCH v2 0/2] Covscan: Shell script fixes Phil Sutter
2017-08-17 17:09 ` [iproute PATCH v2 1/2] examples: Some shell fixes to cbq.init Phil Sutter
2017-08-17 17:09 ` [iproute PATCH v2 2/2] ifcfg: Quote left-hand side of [ ] expression Phil Sutter
2017-08-18  9:32   ` David Laight
2017-08-18 11:24     ` Phil Sutter
2017-08-18 16:38       ` David Laight
2017-08-18 16:12 ` [iproute PATCH v2 0/2] Covscan: Shell script fixes Stephen Hemminger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.