Thursday, May 08, 2008

Using expr

http://www.faqs.org/docs/abs/HTML/moreadv.html

Example 12-6. Using expr

   1 #!/bin/bash
2
3 # Demonstrating some of the uses of 'expr'
4 # =======================================
5
6 echo
7
8 # Arithmetic Operators
9 # ---------- ---------
10
11 echo "Arithmetic Operators"
12 echo
13 a=`expr 5 + 3`
14 echo "5 + 3 = $a"
15
16 a=`expr $a + 1`
17 echo
18 echo "a + 1 = $a"
19 echo "(incrementing a variable)"
20
21 a=`expr 5 % 3`
22 # modulo
23 echo
24 echo "5 mod 3 = $a"
25
26 echo
27 echo
28
29 # Logical Operators
30 # ------- ---------
31
32 # Returns 1 if true, 0 if false,
33 #+ opposite of normal Bash convention.
34
35 echo "Logical Operators"
36 echo
37
38 x=24
39 y=25
40 b=`expr $x = $y` # Test equality.
41 echo "b = $b" # 0 ( $x -ne $y )
42 echo
43
44 a=3
45 b=`expr $a \> 10`
46 echo 'b=`expr $a \> 10`, therefore...'
47 echo "If a > 10, b = 0 (false)"
48 echo "b = $b" # 0 ( 3 ! -gt 10 )
49 echo
50
51 b=`expr $a \< 10`
52 echo "If a < 10, b = 1 (true)"
53 echo "b = $b" # 1 ( 3 -lt 10 )
54 echo
55 # Note escaping of operators.
56
57 b=`expr $a \<= 3`
58 echo "If a <= 3, b = 1 (true)"
59 echo "b = $b" # 1 ( 3 -le 3 )
60 # There is also a "\>=" operator (greater than or equal to).
61
62
63 echo
64 echo
65
66 # Comparison Operators
67 # ---------- ---------
68
69 echo "Comparison Operators"
70 echo
71 a=zipper
72 echo "a is $a"
73 if [ `expr $a = snap` ]
74 # Force re-evaluation of variable 'a'
75 then
76 echo "a is not zipper"
77 fi
78
79 echo
80 echo
81
82
83
84 # String Operators
85 # ------ ---------
86
87 echo "String Operators"
88 echo
89
90 a=1234zipper43231
91 echo "The string being operated upon is \"$a\"."
92
93 # length: length of string
94 b=`expr length $a`
95 echo "Length of \"$a\" is $b."
96
97 # index: position of first character in substring
98 # that matches a character in string
99 b=`expr index $a 23`
100 echo "Numerical position of first \"2\" in \"$a\" is \"$b\"."
101
102 # substr: extract substring, starting position & length specified
103 b=`expr substr $a 2 6`
104 echo "Substring of \"$a\", starting at position 2,\
105 and 6 chars long is \"$b\"."
106
107
108 # The default behavior of the 'match' operations is to
109 #+ search for the specified match at the ***beginning*** of the string.
110 #
111 # uses Regular Expressions
112 b=`expr match "$a" '[0-9]*'` # Numerical count.
113 echo Number of digits at the beginning of \"$a\" is $b.
114 b=`expr match "$a" '\([0-9]*\)'` # Note that escaped parentheses
115 # == == + trigger substring match.
116 echo "The digits at the beginning of \"$a\" are \"$b\"."
117
118 echo
119
120 exit 0

Important

The : operator can substitute for match. For example, b=`expr $a : [0-9]*` is the exact equivalent of b=`expr match $a [0-9]*` in the above listing.

   1 #!/bin/bash
2
3 echo
4 echo "String operations using \"expr \$string : \" construct"
5 echo "==================================================="
6 echo
7
8 a=1234zipper5FLIPPER43231
9
10 echo "The string being operated upon is \"`expr "$a" : '\(.*\)'`\"."
11 # Escaped parentheses grouping operator. == ==
12
13 # ***************************
14 #+ Escaped parentheses
15 #+ match a substring
16 # ***************************
17
18
19 # If no escaped parentheses...
20 #+ then 'expr' converts the string operand to an integer.
21
22 echo "Length of \"$a\" is `expr "$a" : '.*'`." # Length of string
23
24 echo "Number of digits at the beginning of \"$a\" is `expr "$a" : '[0-9]*'`."
25
26 # ------------------------------------------------------------------------- #
27
28 echo
29
30 echo "The digits at the beginning of \"$a\" are `expr "$a" : '\([0-9]*\)'`."
31 # == ==
32 echo "The first 7 characters of \"$a\" are `expr "$a" : '\(.......\)'`."
33 # ===== == ==
34 # Again, escaped parentheses force a substring match.
35 #
36 echo "The last 7 characters of \"$a\" are `expr "$a" : '.*\(.......\)'`."
37 # ==== end of string operator ^^
38 # (actually means skip over one or more of any characters until specified
39 #+ substring)
40
41 echo
42
43 exit 0

No comments:

Blog Archive