Technical Articles => Operating System =>  Linux/Unix

Concise bash programming skills

Source : sonic0002    Date : 2012-11-06 10:38:42  

The following are some concise bash programming skills which we may need in our daily programming work.

1. Check status of command execution

The usual way:

echo abcdee | grep -q abcd
 
if [ $? -eq 0 ]; then
    echo "Found"
else
    echo "Not found"
fi

Concise way:

if echo abcdee | grep -q abc; then
    echo "Found"
else
    echo "Not found"
fi

Of course you can remove if...else with following code

[Sun Nov 04 05:58 AM] [kodango@devops] ~/workspace 
$ echo abcdee | grep -q abc && echo "Found" || echo "Not found"
Found

2. Redirect standard out and standard error to /dev/null

The usual way:

grep"abc" test.txt 1>/dev/null 2>&1

The wrong way:

grep"abc" test.txt 2>&11>/dev/null

The concise way:

grep"abc" test.txt &>/dev/null

3. Use of awk

Take an actual example. Get Xen DomU's ID.

The usual way:

sudo xm li |grep vm_name |awk'{print $2}'

The concise way:

sudo xm li |awk'/vm_name/{print $2}'

4. Concatenate all lines of a file with comma(,)

Assume file contents are

[Sat Nov 03 10:04 PM] [kodango@devops] ~/workspace 
$ cat /tmp/test.txt 
1
2
3

Using sed command:

[Sat Nov 03 10:14 PM] [kodango@devops] ~/workspace 
$ sed ':a;$!N;s/\n/,/;ta' /tmp/test.txt 
1,2,3

The concise way:

[Sat Nov 03 10:04 PM] [kodango@devops] ~/workspace 
$ paste -sd, /tmp/test.txt 
1,2,3

5. Filter duplicated line

Assume file contents are:

[Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace 
$ sort /tmp/test.txt 
1
1
2
3

The usual way:

[Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace 
$ sort /tmp/test.txt | uniq
1
2
3

The concise way:

[Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace 
$ sort /tmp/test.txt -u
1
2
3

6. grep to search a word

Assume each line of a file contains an IP address. For example:

[Sat Nov 03 10:20 PM] [kodango@devops] ~/workspace 
$ cat /tmp/ip.list 
10.0.0.1
10.0.0.12
10.0.0.123

Using grep to find the IP 10.0.0.1, the usual way:

[Sat Nov 03 10:22 PM] [kodango@devops] ~/workspace 
$ grep '10.0.0.1\>' /tmp/ip.list 
10.0.0.1

The concise way(Actually this way is not necessary more concise, just want to explain that -w is useful)

[Sat Nov 03 10:23 PM] [kodango@devops] ~/workspace 
$ grep -w '10.0.0.1' /tmp/ip.list 
10.0.0.1

7. Use of $1,$2...

Assume we just want to use $2,$3, not $1, the usual way:

shift

echo"$@"

The concise way:

echo"${@:2}"

8. Default value of a parameter

If we don't provide a value for one one parameter, we may give it a default value, we can do it like:

arg=$1
 
if [ -z "$arg" ]; then
   arg=0
fi

The concise way:

arg=${1:-0}

9. Use of - in bash

If we want to search whether a string contains -i, we may use:

[Sat Nov 03 10:45 PM] [kodango@devops] ~/workspace 
$ echo 'abc-i' | grep "-i"
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
 
[Sat Nov 03 10:45 PM] [kodango@devops] ~/workspace 
$ echo 'abc-i' | grep "\-i"
abc-i

The concise way:

[Sat Nov 03 10:45 PM] [kodango@devops] ~/workspace 
$ echo 'abc-i' | grep -- -i
abc-i

10. Assign formatted output of printf to an variable

If we want to convert a decimal number to its hex format, the usual way:

[Sat Nov 03 10:55 PM] [kodango@devops] ~/workspace 
$ var=$(printf '%%%02x' 111)

The concise way:

[Sat Nov 03 10:54 PM] [kodango@devops] ~/workspace 
$ printf -v var '%%%02x' 111

Here is the help of printf

[Sat Nov 03 10:53 PM] [kodango@devops] ~/workspace 
$ help printf | grep -A 1 -B 1 -- -v
printf: printf [-v var] format [arguments]
    Formats and prints ARGUMENTS under control of the FORMAT.
--
    Options:
      -v var	assign the output to shell variable VAR rather than
    		display it on the standard output

11. Print some lines of a file

Print the first line:

head-1 test.txt

Print the second line:

sed-n'2p' test.txt

Print 2nd to 5th line

sed -n '2,5p' test.txt

Print the ;ast second line

$ tail-2 test.txt |head-1

$ tac test.txt |sed-n'2p'

12. Use let and (( )) to do arithmatic calculation

Do ++ operation,the usual way:

a=1

a=`expr a + 1`

The concise way:

a=1
let a++
let a+=2

13. Get real filename of a softlink

You may do it like :

[Sat Nov 03 11:12 PM] [kodango@devops] ~/workspace 
$ ls -l /usr/bin/python | awk -F'->' '{print $2}' | tr -d ' '
/usr/bin/python2

If you know a command named readlink. Then

[Sat Nov 03 11:13 PM] [kodango@devops] ~/workspace 
$ readlink /usr/bin/python
/usr/bin/python2

14. Get ASCII code of a character

[Sat Nov 03 11:14 PM] [kodango@devops] ~/workspace 
$ printf '%02x' "'+"
2b
[Sat Nov 03 11:30 PM] [kodango@devops] ~/workspace 
$ echo -n '+' | od -tx1 -An | tr -d ' '
2b

15. Clear contents of a file

The usual way:

echo""> test.txt

The concise way:

> test.txt

More to come...

Source : http://kodango.me/simple-bash-programming-skills

Save as PDF Mark as read Mark as important
By clicking the "Mark as read" button, this article will be marked as read. It will be removed from the homepage's latest news and the article list on the "Technical article" page in following visits and it will be put to your read list which you can find in "Amin->Article read list". There you can unmark the read articles.
By clicking the "Mark as important" button, this article will be put to your important article list which you can find in "Amin->Article important list". Later when you want reread this article, it's easier for you to find it by checking the "Article important list".

Tags:bash, skill,tip   Read(4762) Comment(1)

Share on Facebook  Share on Twitter  Share on Google+  Share on Weibo  Share on Digg  Share on Tumblr    Delicious 

 Previous : Password-less login
 Next : Chrome 23 supports Do Not Track now

  ::Related Articles

  ::Comment List

moncler jackets (btwmvfqvgta@gmail.com) [Reply]@ 2012-11-12 13:28:22
Please let me know if you’re looking for a article author for your blog. You have some really good articles and I think I would be a good asset. If you ever want to take some of the load off, I’d really like to write some material for your blog in exchange for a link back to mine. Please shoot me an e-mail if interested. Thank you! moncler jackets http://monclerjackets2013.webnode.fr/

  ::Comment

Nickname  
Email 
Comment

:: Users edited this page

:: Recent articles

:: Most read

:: Most commented

:: Find us

Back to top