📄 ch44_05.htm
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 44] 44.5 Test String Values with Bourne Shell case </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly & Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:53:35Z"><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="ch44_01.htm"TITLE="44. Shell Programming for the Uninitiated"><LINKREL="prev"HREF="ch44_04.htm"TITLE="44.4 Testing How Your System Executes Files "><LINKREL="next"HREF="ch44_06.htm"TITLE="44.6 Pattern Matching in case Statements "></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="ch44_04.htm"TITLE="44.4 Testing How Your System Executes Files "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 44.4 Testing How Your System Executes Files "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 44<BR>Shell Programming for the Uninitiated</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch44_06.htm"TITLE="44.6 Pattern Matching in case Statements "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 44.6 Pattern Matching in case Statements "BORDER="0"></A></TD></TR></TABLE> <HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-7090">44.5 Test String Values with Bourne Shell case </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-50410"></A><ACLASS="indexterm"NAME="AUTOID-50413"></A><ACLASS="indexterm"NAME="AUTOID-50416"></A><ACLASS="indexterm"NAME="AUTOID-50418"></A><ACLASS="indexterm"NAME="AUTOID-50421"></A><ACLASS="indexterm"NAME="AUTOID-50424"></A><ACLASS="indexterm"NAME="AUTOID-50427"></A><ACLASS="indexterm"NAME="AUTOID-50430"></A><ACLASS="indexterm"NAME="AUTOID-50433"></A><ACLASS="indexterm"NAME="AUTOID-50436"></A><ACLASS="indexterm"NAME="AUTOID-50439"></A>Each time you type a command line at a shell prompt, you can see whathappens and decide what command to run next.But a shell script needs to make decisions like that itself.A <EMCLASS="emphasis">case</EM> statement helps the script make decisions.A <EMCLASS="emphasis">case</EM> statement compares a string (usually taken from a<SPANCLASS="link">shell or environment variable (<ACLASS="linkend"HREF="ch06_08.htm"TITLE="Shell Variables ">6.8</A>, <ACLASS="linkend"HREF="ch06_01.htm#UPT-ART-1170"TITLE="What Environment Variables Are Good For ">6.1</A>)</SPAN>)to one or more patterns.The patterns can be simple strings (words, digits, etc.) or they can be<SPANCLASS="link"><EMCLASS="emphasis">case</EM> wildcard expressions (<ACLASS="linkend"HREF="ch44_06.htm"TITLE="Pattern Matching in case Statements ">44.6</A>)</SPAN>.When the <EMCLASS="emphasis">case</EM> finds a pattern that matches the string, it executes oneor more commands.</P><PCLASS="para">Here's an example.It tests your<SPANCLASS="link"><EMCLASS="emphasis">TERM</EM> (<ACLASS="linkend"HREF="ch05_10.htm"TITLE="Finding What Terminal Names You Can Use ">5.10</A>)</SPAN>environment variable.If you're using a vt100 or tk4023 terminal, it runs a commandto send some characters to your terminal.If you aren't on either of those, it prints an error and quits:</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist"> <ACLASS="co"HREF="ch45_35.htm"TITLE="45.35 Using a Control Character in a Script ">echo...\027'</A> <ACLASS="co"HREF="ch08_06.htm"TITLE="8.6 Output Command-Line Arguments ">1>&2</A> <ACLASS="co"HREF="ch44_11.htm"TITLE="44.11 Set Exit Status of a Shell (Script) ">exit</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen">case "$TERM" invt100) echo 'ea[w' | tr 'eaw' '\033\001\027' ;;tk4023) echo "*[p23" ;;*) # Not a VT100 or tk4023. Print error message: echo "progname: quitting: you aren't on a VT100 or tk4023." 1>&2 exit ;;esac</PRE></TD></TR></TABLE></P><PCLASS="para">Here are more details about how this works.The statement compares the string between the words<CODECLASS="literal">case</CODE> and <CODECLASS="literal">in</CODE> to the strings at the left-hand edge of thelines ending with a <CODECLASS="literal">)</CODE> (right parenthesis) character.If it matches the first case (in this example, if it's the <CODECLASS="literal">vt100</CODE>),the command up to the <CODECLASS="literal">;;</CODE> is executed.The <CODECLASS="literal">;;</CODE> means "jump to the <CODECLASS="literal">esac</CODE>" (<EMCLASS="emphasis">esac</EM> is "case"spelled backwards).You can put as many commands as you want before each <CODECLASS="literal">;;</CODE>, butput each command on a separate line (or separate commands on a line with<SPANCLASS="link">semicolons (<ACLASS="linkend"HREF="ch08_05.htm"TITLE="Command-Line Evaluation ">8.5</A>)</SPAN>).</P><PCLASS="para">If the first pattern doesn't match, the shell tries the nextcase - here, <EMCLASS="emphasis">tk4023</EM>.As above, a match runs the command and jumps to the <EMCLASS="emphasis">esac</EM>.No match?The next pattern is the wildcard <CODECLASS="literal">*</CODE>.It matches any answer other than <EMCLASS="emphasis">vt100</EM> or <EMCLASS="emphasis">tk4023</EM>(such as <EMCLASS="emphasis">xterm</EM> or an empty string).</P><PCLASS="para">You can use as many patterns as you want to.The first one that matches is used.It's okay if none of them match.The style doesn't matter much.Pick one that's readable and be consistent.</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="ch44_04.htm"TITLE="44.4 Testing How Your System Executes Files "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 44.4 Testing How Your System Executes Files "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="ch44_06.htm"TITLE="44.6 Pattern Matching in case Statements "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 44.6 Pattern Matching in case Statements "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">44.4 Testing How Your System Executes Files </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">44.6 Pattern Matching in case Statements </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 & 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 + -