⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch45_03.htm

📁 the unix power tools
💻 HTM
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 45] 45.3 Don't Need a Shell for Your Script?  Don't Use One </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly &amp; Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:54:21Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-260-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch45_01.htm"TITLE="45. Shell Programming for the Initiated"><LINKREL="prev"HREF="ch45_02.htm"TITLE="45.2 The Story of  : #  #! "><LINKREL="next"HREF="ch45_04.htm"TITLE="45.4 Fun with #! "></HEAD><BODYBGCOLOR="#FFFFFF"TEXT="#000000"><DIVCLASS="htmlnav"><H1><IMGSRC="gifs/smbanner.gif"ALT="UNIX Power Tools"USEMAP="#srchmap"BORDER="0"></H1><MAPNAME="srchmap"><AREASHAPE="RECT"COORDS="0,0,466,58"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="467,0,514,18"HREF="jobjects/fsearch.htm"ALT="Search this book"></MAP><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch45_02.htm"TITLE="45.2 The Story of  : #  #! "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 45.2 The Story of  : #  #! "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 45<BR>Shell Programming for the Initiated</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch45_04.htm"TITLE="45.4 Fun with #! "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 45.4 Fun with #! "BORDER="0"></A></TD></TR></TABLE>&nbsp;<HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-0182">45.3 Don't Need a Shell for Your Script?  Don't Use One </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-52295"></A><ACLASS="indexterm"NAME="AUTOID-52299"></A><ACLASS="indexterm"NAME="AUTOID-52302"></A><ACLASS="indexterm"NAME="AUTOID-52305"></A>If your UNIX<SPANCLASS="link">understands (<ACLASS="linkend"HREF="ch44_04.htm"TITLE="Testing How Your System Executes Files ">44.4</A>)</SPAN>files that start with:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">#!<CODECLASS="replaceable"><I>/interpreter/program</I></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">you don't have to use those lines to start a shell, such as <CODECLASS="literal">#!/bin/sh</CODE>.If your script is just starting a program like <EMCLASS="emphasis">awk</EM>, UNIX can start theprogram directly and save execution time.This is especially useful on small or overloaded computers, or when yourscript has to be called over and over (such as in a loop).</P><PCLASS="para">First, here are two scripts.Both scripts print the second word from each line of text files.One uses a shell; the other runs <EMCLASS="emphasis">awk</EM> directly:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>cat with_sh</B></CODE>#!/bin/shawk '{ print $2 }' $*% <CODECLASS="userinput"><B>cat no_sh</B></CODE>#!/usr/bin/awk -f{ print $2 }% <CODECLASS="userinput"><B>cat afile</B></CODE>one two three four five</PRE></BLOCKQUOTE></P><PCLASS="para">Let's run both commands and<SPANCLASS="link"><EMCLASS="emphasis">time</EM> (<ACLASS="linkend"HREF="ch39_02.htm"TITLE="Timing Programs ">39.2</A>)</SPAN>them:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>time with_sh afile</B></CODE>two0.1u 0.2s 0:00 26%% <CODECLASS="userinput"><B>time no_sh afile</B></CODE>two0.0u 0.1s 0:00 13%</PRE></BLOCKQUOTE></P><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-52330"></A><ACLASS="indexterm"NAME="AUTOID-52333"></A><ACLASS="indexterm"NAME="AUTOID-52336"></A>One of the things that's really important to understand here is thatwhen the kernel runs the program on the interpreter line, it is giventhe script's filename as an argument.If the intepreter program understands afile directly, like <EMCLASS="emphasis">/bin/sh</EM> does, nothing special needs to bedone.But a program like <EMCLASS="emphasis">awk</EM> or <EMCLASS="emphasis">sed</EM> requires the<EMCLASS="emphasis">-f</EM> option if it is to read its script from a file.This leadsto the seemingly odd syntax in the example above, with a call to <EMCLASS="emphasis">awk -f</EM> with no following filename.The script itself isthe input file!</P><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-52345"></A>One implication of this usage is that the interpreter program needsto understand <CODECLASS="literal">#</CODE> as a comment, or that first interpreter-selection line itself will be acted upon (and probably rejected by) the interpreter.(Fortunately, the shells, <EMCLASS="emphasis">perl</EM>, <EMCLASS="emphasis">sed</EM>, and <EMCLASS="emphasis">awk</EM> dorecognize this comment character.)</P><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">JP</SPAN></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch45_02.htm"TITLE="45.2 The Story of  : #  #! "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 45.2 The Story of  : #  #! "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="book"HREF="index.htm"TITLE="UNIX Power Tools"><IMGSRC="gifs/txthome.gif"SRC="gifs/txthome.gif"ALT="UNIX Power Tools"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch45_04.htm"TITLE="45.4 Fun with #! "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 45.4 Fun with #! "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">45.2 The Story of  : #  #! </TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="index"HREF="index/idx_0.htm"TITLE="Book Index"><IMGSRC="gifs/index.gif"SRC="gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172">45.4 Fun with #! </TD></TR></TABLE><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><IMGSRC="gifs/smnavbar.gif"SRC="gifs/smnavbar.gif"USEMAP="#map"BORDER="0"ALT="The UNIX CD Bookshelf Navigation"><MAPNAME="map"><AREASHAPE="RECT"COORDS="0,0,73,21"HREF="../index.htm"ALT="The UNIX CD Bookshelf"><AREASHAPE="RECT"COORDS="74,0,163,21"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="164,0,257,21"HREF="../unixnut/index.htm"ALT="UNIX in a Nutshell"><AREASHAPE="RECT"COORDS="258,0,321,21"HREF="../vi/index.htm"ALT="Learning the vi Editor"><AREASHAPE="RECT"COORDS="322,0,378,21"HREF="../sedawk/index.htm"ALT="sed &amp; awk"><AREASHAPE="RECT"COORDS="379,0,438,21"HREF="../ksh/index.htm"ALT="Learning the Korn Shell"><AREASHAPE="RECT"COORDS="439,0,514,21"HREF="../lrnunix/index.htm"ALT="Learning the UNIX Operating System"></MAP></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -