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

📄 ch05_04.htm

📁 unix基础教程
💻 HTM
字号:
<html><head><title>Expressions (UNIX in a Nutshell: System V Edition)</title><link rel="stylesheet" type="text/css" href="../style/style1.css" /><meta name="DC.Creator" content="Arnold Robbins" /><meta name="DC.Format" content="text/xml" scheme="MIME" /><meta name="DC.Language" content="en-US" /><meta name="DC.Publisher" content="O'Reilly &amp; Associates, Inc." /><meta name="DC.Source" scheme="ISBN" content="1-56592-427-4" /><meta name="DC.Subject.Keyword" content="stuff" /><meta name="DC.Title" content="UNIX in a Nutshell: System V Edition" /><meta name="DC.Type" content="Text.Monograph" /></head><body bgcolor="#ffffff"><img src="gifs/smbanner.gif" usemap="#banner-map" border="0" alt="Book Home" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Book Title" /><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch05_03.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228" /><td align="right" valign="top" width="228"><a href="ch05_05.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr></table></div><h2 class="sect1">5.4. Expressions</h2><p><a name="unut-ch-5-ix-expressions-c-shell" /><a name="unut-ch-5-ix-csh-c-shell-expressions" /><a name="unut-ch-5-ix-arithmetic-expressions-csh-shell" />Expressions are used in <tt class="literal">@</tt> (the C shell math operator),<tt class="literal">if</tt>, and <tt class="literal">while</tt> statements to perform arithmetic, string comparisons, file testing, etc.<tt class="literal">exit</tt> and <tt class="literal">set</tt> can also specify expressions.Expressions are formed by combining variables and constants withoperators that resemble those in the C programming language.Operator precedence is the same as in C.It is easiest to just remember the following precedence rules:</p><ul><li><p><tt class="literal">* / %</tt></p></li><li><p><tt class="literal">+ -</tt></p></li><li><p>Group all other expressions inside <tt class="literal">()</tt> s; parentheses are required if the expression contains<tt class="literal">&lt;</tt>,<tt class="literal">&lt;</tt>,<tt class="literal">&amp;</tt>,or<tt class="literal">|</tt></p></li></ul><a name="unut-ch-5-sect-4.1" /><div class="sect2"><h3 class="sect2">5.4.1. Operators</h3><p><a name="IXT-5-122971" />Operators can be one of the following types.</p><a name="unut-ch-5-sect-4.1.1" /><div class="sect3"><h3 class="sect3">5.4.1.1. Assignment operators</h3><p><a name="IXT-5-122972" /></p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Operator</em></th><th><em class="emphasis">Description</em></th></tr><tr><td><tt class="literal">=</tt></td><td>Assign value.</td></tr><tr><td><tt class="literal">+=  -=</tt></td><td>Reassign after addition/subtraction.<a name="IXT-5-122973" /><a name="IXT-5-122974" /><a name="IXT-5-122975" /></td></tr><tr><td><tt class="literal">*=  /=  %=</tt></td><td>Reassign after multiplication/division/remainder.<a name="IXT-5-122976" /><a name="IXT-5-122977" /><a name="IXT-5-122978" /></td></tr><tr><td><tt class="literal">&amp;= ^= |=</tt></td><td>Reassign after bitwise AND/XOR/OR.<a name="IXT-5-122979" /><a name="IXT-5-122980" /><a name="IXT-5-122981" /></td></tr><tr><td><tt class="literal">++</tt></td><td>Increment.<a name="IXT-5-122982" /></td></tr><tr><td><tt class="literal">--</tt></td><td>Decrement.<a name="IXT-5-122983" /></td></tr></table><p></div><a name="unut-ch-5-sect-4.1.2" /><div class="sect3"><h3 class="sect3">5.4.1.2. Arithmetic operators</h3><p><a name="IXT-5-122984" /></p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Operator</em></th><th><em class="emphasis">Description</em></th></tr><tr><td><tt class="literal">*  /  %</tt></td><td>Multiplication; integer division; modulus (remainder).</td></tr><tr><td><tt class="literal">+  -</tt></td><td>Addition; subtraction.<a name="IXT-5-122985" /><a name="IXT-5-122986" /><a name="IXT-5-122987" /><a name="IXT-5-122988" /><a name="IXT-5-122989" /></td></tr></table><p></div><a name="unut-ch-5-sect-4.1.3" /><div class="sect3"><h3 class="sect3">5.4.1.3. Bitwise and logical operators</h3><p><a name="IXT-5-122990" /><a name="IXT-5-122991" /></p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Operator</em></th><th><em class="emphasis">Description</em></th></tr><tr><td><tt class="literal">~</tt></td><td>Binary inversion (one's complement).</td></tr><tr><td><tt class="literal">!</tt></td><td>Logical negation.<a name="IXT-5-122992" /><a name="IXT-5-122993" /></td></tr><tr><td><tt class="literal">&lt;&lt;  &gt;&gt;</tt></td><td>Bitwise left shift; bitwise right shift.<a name="IXT-5-122994" /><a name="IXT-5-122995" /></td></tr><tr><td><tt class="literal">&amp;</tt></td><td>Bitwise AND.<a name="IXT-5-122996" /></td></tr><tr><td><tt class="literal">^</tt></td><td>Bitwise exclusive OR.<a name="IXT-5-122997" /></td></tr><tr><td><tt class="literal">|</tt></td><td>Bitwise OR.<a name="IXT-5-122998" /></td></tr><tr><td><tt class="literal">&amp;&amp;</tt></td><td>Logical AND (short-circuit).<a name="IXT-5-122999" /></td></tr><tr><td><tt class="literal">||</tt></td><td>Logical OR (short-circuit).<a name="IXT-5-123000" /></td></tr><tr><td><tt class="literal">{</tt> <em class="replaceable"><tt>command</tt></em> <tt class="literal">}</tt></td><td><p>Return 1 if command is successful; 0 otherwise.Note that this is the opposite of <em class="emphasis">command</em>'s normalreturn code.The <tt class="literal">$status</tt> variable may be more practical.</p></td></tr></table><p></div><a name="unut-ch-5-sect-4.1.4" /><div class="sect3"><h3 class="sect3">5.4.1.4. Comparison operators</h3><p><a name="IXT-5-123001" /></p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Operator</em></th><th><em class="emphasis">Description</em></th></tr><tr><td><tt class="literal">==  !=</tt></td><td>Equality; inequality.</td></tr><tr><td><tt class="literal">&lt;=  &gt;=</tt></td><td>Less than or equal to; greater than or equal to.<a name="IXT-5-123002" /><a name="IXT-5-123003" /><a name="IXT-5-123004" /><a name="IXT-5-123005" /></td></tr><tr><td><tt class="literal">&lt;  &gt;</tt></td><td>Less than; greater than.<a name="IXT-5-123006" /><a name="IXT-5-123007" /></td></tr><tr><td><tt class="literal">=~</tt></td><td><p>String on left matches a filename patterncontaining <tt class="literal">*</tt>, <tt class="literal">?</tt>,or <tt class="literal">[...]</tt>.<a name="IXT-5-123008" /></p></td></tr><tr><td><tt class="literal">!~</tt></td><td><p>String on left does not match a filename patterncontaining <tt class="literal">*</tt>, <tt class="literal">?</tt>,or <tt class="literal">[...]</tt>.<a name="IXT-5-123009" /></p></td></tr></table><p></div><a name="unut-ch-5-sect-4.1.5" /><div class="sect3"><h3 class="sect3">5.4.1.5. File inquiry operators</h3><p>Command substitution and filename expansion are performed on<a name="IXT-5-123010" /><em class="emphasis">file</em> before the test is performed.</p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Operator</em></th><th><em class="emphasis">Description</em></th></tr><tr><td><tt class="literal">-d</tt> <em class="replaceable"><tt>file</tt></em></td><td>The file is a directory.</td></tr><tr><td><tt class="literal">-e</tt> <em class="replaceable"><tt>file</tt></em></td><td>The file exists.</td></tr><tr><td><tt class="literal">-f</tt> <em class="replaceable"><tt>file</tt></em></td><td>The file is a plain file.</td></tr><tr><td><tt class="literal">-o</tt> <em class="replaceable"><tt>file</tt></em></td><td>The user owns the file.</td></tr><tr><td><tt class="literal">-r</tt> <em class="replaceable"><tt>file</tt></em></td><td>The user has read permission.</td></tr><tr><td><tt class="literal">-w</tt> <em class="replaceable"><tt>file</tt></em></td><td>The user has write permission.</td></tr><tr><td><tt class="literal">-x</tt> <em class="replaceable"><tt>file</tt></em></td><td>The user has execute permission.</td></tr><tr><td><tt class="literal">-z</tt> <em class="replaceable"><tt>file</tt></em></td><td>The file has zero size.</td></tr><tr><td><tt class="literal">!</tt></td><td>Reverse the sense of any inquiry above.</td></tr></table><p></div></div><a name="unut-ch-5-sect-4.2" /><div class="sect2"><h3 class="sect2">5.4.2. Examples</h3><p>The following examples show <tt class="literal">@</tt> commands and assume <tt class="literal">n</tt> = 4.</p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Expression</em></th><th><em class="emphasis">Value of $x</em></th></tr><tr><td><tt class="literal">@ x = ($n &gt; 10 || $n &lt; 5)</tt></td><td>1</td></tr><tr><td><tt class="literal">@ x = ($n &gt;= 0 &amp;&amp; $n &lt; 3)</tt></td><td>0</td></tr><tr><td><tt class="literal">@ x = ($n &lt;&lt; 2)</tt></td><td>16</td></tr><tr><td><tt class="literal">@ x = ($n &gt;&gt; 2)</tt></td><td>1</td></tr><tr><td><tt class="literal">@ x = $n % 2</tt></td><td>0</td></tr><tr><td><tt class="literal">@ x = $n % 3</tt></td><td>1</td></tr></table><p><p>The following examples show the first line of<tt class="literal">if</tt> or <tt class="literal">while</tt> statements.</p><table border="1" cellpadding="3"><tr><th><em class="emphasis">Expression</em></th><th><em class="emphasis">Meaning</em></th></tr><tr><td><tt class="literal">while ($#argv != 0)</tt></td><td>While there are arguments ...</td></tr><tr><td><tt class="literal">if ($today[1] == "Fri")</tt></td><td>If the first word is &#8220;Fri&#8221;...</td></tr><tr><td><tt class="literal">if ($file !~ *.[zZ])</tt></td><td><p>If the file doesn't end with <tt class="literal">.z</tt>or <tt class="literal">.Z</tt> ...</p></td></tr><tr><td><tt class="literal">if ($argv[1] =~ chap?)</tt></td><td><p>If the first argument is <tt class="literal">chap</tt> followedby a single character ...</p></td></tr><tr><td><tt class="literal">if (-f $argv[1])</tt></td><td>If the first argument is a plain file ...</td></tr><tr><td><tt class="literal">if (! -d $tmpdir)</tt></td><td>If <tt class="literal">$tmpdir</tt> is not a directory ...</td></tr></table><p><a name="IXT-5-123011" /><a name="IXT-5-123012" /><a name="IXT-5-123013" /></div><hr width="684" align="left" /><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch05_03.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228"><a href="index.htm"><img src="../gifs/txthome.gif" alt="Home" border="0" /></a></td><td align="right" valign="top" width="228"><a href="ch05_05.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr><tr><td align="left" valign="top" width="228">5.3. Variables</td><td align="center" valign="top" width="228"><a href="index/index.htm"><img src="../gifs/index.gif" alt="Book Index" border="0" /></a></td><td align="right" valign="top" width="228">5.5. Command History</td></tr></table></div><hr width="684" align="left" /><img src="../gifs/navbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links" /><p><p><font size="-1"><a href="copyrght.htm">Copyright &copy; 2003</a> O'Reilly &amp; Associates. All rights reserved.</font></p><map name="library-map"><area shape="rect" coords="1,0,88,96" href="../index.htm"><area shape="rect" coords="90,0,165,96" href="../upt/index.htm"><area shape="rect" coords="168,1,253,107" href="../mac/index.htm"><area shape="rect" coords="255,0,335,97" href="../korn/index.htm"><area shape="rect" coords="337,0,415,109" href="../unixnut/index.htm"><area shape="rect" coords="417,0,512,122" href="../sedawk/index.htm"><area shape="rect" coords="514,0,605,105" href="../lunix/index.htm"><area shape="rect" coords="611,2,694,121" href="../vi/index.htm"></map></body></html>

⌨️ 快捷键说明

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