Unix script 12 - extrnal programs 外部程序

来源:互联网 发布:c指针编程之道 编辑:程序博客网 时间:2024/06/05 10:30

External programs are often used within shell scripts; there are a fewbuiltin commands (echo,which, andtestare commonly builtin), but many useful commands are actually Unix utilities,such astr,grep, expr and cut.

The backtick (`)is also often associated with external commands. Because of this, we will discuss the backtick first.
The backtick is used to indicate that the enclosed text is to be executedas a command. This is quite simple to understand. First, use aninteractive shell to read your full name from/etc/passwd:

$ grep "^${USER}:" /etc/passwd | cut -d: -f5Steve Parker

Now we will grab this output into a variable which we can manipulate more easily:

$ MYNAME=`grep "^${USER}:" /etc/passwd | cut -d: -f5`$ echo $MYNAMESteve Parker

So we see that the backtick simply catches the standard output from anycommand or set of commands we choose to run. It can also improve performanceif you want to run a slow command or set of commands and parse various bits of its output:


#!/bin/shfind / -name "*.html" -print | grep "/index.html$"find / -name "*.html" -print | grep "/contents.html$"

This code could take a long time to run, and we are doing it twice!
A better solution is:


#!/bin/shHTML_FILES=`find / -name "*.html" -print`echo "$HTML_FILES" | grep "/index.html$"echo "$HTML_FILES" | grep "/contents.html$"
Note: the quotes around $HTML_FILES are essential to preserve the newlines between each file listed. Otherwise,grep will see one huge long line of text, and not one line per file.

This way, we are only running the slow find once, roughlyhalving the execution time of the script.

We discuss specific examples further in the Hints and Tips section of this tutorial.


原创粉丝点击