<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LinuxSense &#187; shell编程</title>
	<atom:link href="http://www.linuxsense.org/archives/category/shell%e7%bc%96%e7%a8%8b/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxsense.org</link>
	<description>分享Linux技术的点点滴滴</description>
	<lastBuildDate>Sat, 01 Aug 2009 05:23:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>理解bash的case</title>
		<link>http://www.linuxsense.org/archives/9211.html</link>
		<comments>http://www.linuxsense.org/archives/9211.html#comments</comments>
		<pubDate>Thu, 26 Feb 2009 10:20:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[case]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9211</guid>
		<description><![CDATA[从网上找到的一段代码，对于学习bash的同学理解case想必很有帮助
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
#!/bin/bash
####################################################
# Program:
# File operation
# 1.) Open file 2.) Display file 3.) Edit file 4.) Delete file
# History:
# 2006/11/03 BianYuan First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8221;
echo &#8220;List of item to operate file -&#8221;
echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8221;

echo &#8220;1). Open a file -&#8221;
echo &#8220;2). Display a file -&#8221;
echo &#8220;3). Edit a file -&#8221;
echo &#8220;4). Delete a file -&#8221;
echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8221;
read select
case $select in
1)
echo [...]]]></description>
			<content:encoded><![CDATA[<p>从网上找到的一段代码，对于学习bash的同学理解case想必很有帮助<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
#!/bin/bash<br />
####################################################<br />
# Program:<br />
# File operation<br />
# 1.) Open file 2.) Display file 3.) Edit file 4.) Delete file<br />
# History:<br />
# 2006/11/03 BianYuan First release<br />
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin<br />
export PATH<br />
echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8221;<br />
echo &#8220;List of item to operate file -&#8221;<br />
echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8221;<br />
<span id="more-9211"></span><br />
echo &#8220;1). Open a file -&#8221;<br />
echo &#8220;2). Display a file -&#8221;<br />
echo &#8220;3). Edit a file -&#8221;<br />
echo &#8220;4). Delete a file -&#8221;<br />
echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8221;<br />
read select<br />
case $select in<br />
1)<br />
echo &#8220;do open file operation&#8221;<br />
;;<br />
2)<br />
echo &#8220;do display a file operation&#8221;<br />
;;<br />
3)<br />
echo &#8220;do edit a file operation&#8221;<br />
;;<br />
4)<br />
echo &#8220;do delete a file operation&#8221;<br />
;;<br />
*)<br />
echo &#8220;There is nothing to do!&#8221;<br />
exit 1<br />
;;<br />
esac</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9211.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ldd命令的原理极其用法</title>
		<link>http://www.linuxsense.org/archives/363.html</link>
		<comments>http://www.linuxsense.org/archives/363.html#comments</comments>
		<pubDate>Sat, 06 Sep 2008 09:27:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>
		<category><![CDATA[ldd]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=363</guid>
		<description><![CDATA[本文通过部分事例讲述linux shell的ldd命令的原理极其用法,ldd显示可执行模块的dependency的工作原理
其实质是通过ld-linux.so（elf动态库的装载器）来实现的。
我们知道，ld-linux.so模块会先于executable模块程序工作并获得控制权，
因此当上述的那些环境变量被设置时，ld-linux.so选择了显示可执行模块的dependency
1、首先ldd不是一个可执行程序，而只是一个shell脚本
2、ldd能够显示可执行模块的dependency，其原理是通过设置一系列的环境变量，
如下：LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。
当LD_TRACE_LOADED_OBJECTS环境变量不为空时，任何可执行程序在运行时，它都会只显示模块的dependency，
而程序并不真正执行。要不你可以在shell终端测试一下，如下：
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再执行任何的程序，如ls等，看看程序的运行结果
$ export LD_TRACE_LOADED_OBJECTS=1

$ ls
libc.so.1 =&#62;　　 /usr/lib/libc.so.1
libdl.so.1 =&#62;　　/usr/lib/libdl.so.1
$ man
libgen.so.1 =&#62;　 /usr/lib/libgen.so.1
libc.so.1 =&#62;　　 /usr/lib/libc.so.1
libdl.so.1 =&#62;　　/usr/lib/libdl.so.1
$
3、ldd显示可执行模块的dependency的工作原理，其实质是通过ld-linux.so（elf动态库的装载器）来实现的。我们知道，ld-linux.so模块会先于executable模块程序工作，并获得控制权，因此当上述的那些环境变量被设置时，ld-linux.so选择了显示可执行模块的dependency。
4、实际上可以直接执行ld-linux.so模块，如: /lib/ld-linux.so.2 &#8211;list program（这相当于ldd
program）
ldd命令使用方法(摘自ldd &#8211;help)
名称　　ldd &#8211; 打印共享库的依赖关系
大纲　　ldd [选项]&#8230;　文件&#8230;
描述　　ldd 输出在命令行上指定的每个程序或共享库需要的共享库。
选项
&#8211;version
打印ldd的版本号
-v &#8211;verbose
打印所有信息，例如包括符号的版本信息
-d &#8211;data-relocs
执行符号重部署，并报告缺少的目标对象（只对ELF格式适用）
-r &#8211;function-relocs
对目标对象和函数执行重新部署，并报告缺少的目标对象和函数（只对ELF格式适用）
&#8211;help 用法信息
注意:
ldd的标准版本与glibc2一起提供。Libc5与老版本以前提供，在一些系统中还存在。在libc5版本中长选项不支持。另一方面，glibc2版本不支持-V选项，只提供等价的&#8211;version选项。
如果命令行中给定的库名字包含&#8217;/'，这个程序的libc5版本将使用它作为库名字；否则它将在标准位置搜索库。运行一个当前目录下的共享库，加前缀&#8221;./&#8221;。
错误:
ldd不能工作在a.out格式的共享库上。
ldd不能工作在一些非常老的a.out程序上，这些程序在支持ldd的编译器发行前已经创建。如果你在这种类型的程序上使用ldd，程序将尝试argc =
0的运行方式，其结果不可预知。

]]></description>
			<content:encoded><![CDATA[<div>本文通过部分事例讲述linux shell的ldd命令的原理极其用法,ldd显示可执行模块的dependency的工作原理</div>
<div class="article_c">其实质是通过ld-linux.so（elf动态库的装载器）来实现的。</div>
<div class="article_c">我们知道，ld-linux.so模块会先于executable模块程序工作并获得控制权，</div>
<div class="article_c">因此当上述的那些环境变量被设置时，ld-linux.so选择了显示可执行模块的dependency</div>
<div id="fontsize" class="article_c">1、首先ldd不是一个可执行程序，而只是一个shell脚本</div>
<p>2、ldd能够显示可执行模块的dependency，其原理是通过设置一系列的环境变量，</p>
<p>如下：LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。</p>
<p>当LD_TRACE_LOADED_OBJECTS环境变量不为空时，任何可执行程序在运行时，它都会只显示模块的dependency，</p>
<p>而程序并不真正执行。要不你可以在shell终端测试一下，如下：</p>
<p>(1) export LD_TRACE_LOADED_OBJECTS=1</p>
<p>(2) 再执行任何的程序，如ls等，看看程序的运行结果</p>
<p>$ export LD_TRACE_LOADED_OBJECTS=1</p>
<p><span id="more-363"></span><br />
$ ls</p>
<p>libc.so.1 =&gt;　　 /usr/lib/libc.so.1</p>
<p>libdl.so.1 =&gt;　　/usr/lib/libdl.so.1</p>
<p>$ man</p>
<p>libgen.so.1 =&gt;　 /usr/lib/libgen.so.1</p>
<p>libc.so.1 =&gt;　　 /usr/lib/libc.so.1</p>
<p>libdl.so.1 =&gt;　　/usr/lib/libdl.so.1</p>
<p>$</p>
<p>3、ldd显示可执行模块的dependency的工作原理，其实质是通过ld-linux.so（elf动态库的装载器）来实现的。我们知道，ld-linux.so模块会先于executable模块程序工作，并获得控制权，因此当上述的那些环境变量被设置时，ld-linux.so选择了显示可执行模块的dependency。</p>
<p>4、实际上可以直接执行ld-linux.so模块，如: /lib/ld-linux.so.2 &#8211;list program（这相当于ldd<br />
program）</p>
<p>ldd命令使用方法(摘自ldd &#8211;help)</p>
<p>名称　　ldd &#8211; 打印共享库的依赖关系</p>
<p>大纲　　ldd [选项]&#8230;　文件&#8230;</p>
<p>描述　　ldd 输出在命令行上指定的每个程序或共享库需要的共享库。</p>
<p>选项</p>
<p>&#8211;version</p>
<p>打印ldd的版本号</p>
<p>-v &#8211;verbose</p>
<p>打印所有信息，例如包括符号的版本信息</p>
<p>-d &#8211;data-relocs</p>
<p>执行符号重部署，并报告缺少的目标对象（只对ELF格式适用）</p>
<p>-r &#8211;function-relocs</p>
<p>对目标对象和函数执行重新部署，并报告缺少的目标对象和函数（只对ELF格式适用）</p>
<p>&#8211;help 用法信息</p>
<p>注意:</p>
<p>ldd的标准版本与glibc2一起提供。Libc5与老版本以前提供，在一些系统中还存在。在libc5版本中长选项不支持。另一方面，glibc2版本不支持-V选项，只提供等价的&#8211;version选项。</p>
<p>如果命令行中给定的库名字包含&#8217;/'，这个程序的libc5版本将使用它作为库名字；否则它将在标准位置搜索库。运行一个当前目录下的共享库，加前缀&#8221;./&#8221;。</p>
<p>错误:</p>
<p>ldd不能工作在a.out格式的共享库上。</p>
<p>ldd不能工作在一些非常老的a.out程序上，这些程序在支持ldd的编译器发行前已经创建。如果你在这种类型的程序上使用ldd，程序将尝试argc =<br />
0的运行方式，其结果不可预知。</p>
<p><!-- 分页 --><!-- 分页end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/363.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用的shell程序</title>
		<link>http://www.linuxsense.org/archives/338.html</link>
		<comments>http://www.linuxsense.org/archives/338.html#comments</comments>
		<pubDate>Mon, 01 Sep 2008 05:04:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=338</guid>
		<description><![CDATA[



shell的普遍作用 
UNIX的shell程序解释用户的命令，不管是用户直接输入的或者从一个称作Shell脚本或者Shell程序文件读入。Shell脚本是解释型的，而不是编译型的。Shell从脚本行的每行读取命令并在系统中搜索这些命令，当编译器把一个程序转化为可供机器读取的形式时，那么它就可以被以一个可执行文件用在shell脚本当中。 
除了向内核传送命令之外，shell的主要任务是提供一个可单独配置的使用shell资源配置文件的用户环境。




Shell常用类型 
就像一个人会知道不同的语言和方言一样，你的UNIX系统通常提供多种shell类型：



sh 或者称作 Bourne Shell: 最初的shell并且仍然在UNIX系统和UNIX相关系统中使用。它是基本的shell，是一个特性不多的小程序。虽然不是一个标准的shell，但是为了UNIX程序的兼容性在每个Linux系统上仍然存在。 

bash 或者称作 Bourne Again shell: 标准的GNU shell，直观而又灵活。或许是初学者的最明智选择同时对高级和专业用户来说也是一个强有力的工具。在Linux上，bash 是普通用户的标准shell。这个shell因此称为Bourne shell的超集，一套附件和插件。意味着bash和sh是兼容的：在sh中可以工作的命令，在bash中也能工作，反之则不然。本书所有的例子和练习均使用bash。 

csh 或者称作 C shell: 语法了类似于C语言，某些时候程序员会使用。 

tcsh 或者称作 Turbo C shell: 普通C shell的超集，加强了的用户友好度和速度。 

ksh 或者称作 Korn shell: 某些时候被有UNIX背景的人所赏识。Bourne shell的一个超集，有着对初学者来说就是一场恶梦的标准配置。 
文件 /etc/shells 给出了Linux系统上所有的已知shell的概览: mia:~&#62; cat /etc/shells
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh

你默认的shell设置在 /etc/passwd 文件中，象下面这行对用户 mia 的设置: mia:L2NOfqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash

要从一个shell转换到另外一个，只要在活动的终端里输入新shell的的名字。系统在PATH设置的目录里面寻找是否包含着个名字，既然一个shell就是一个可执行的文件（程序），当前的shell激活它使它运行起来，新的提示符出现，因为每个shell都有自己典型的外观： mia:~&#62; tcsh
[mia@post21 ~]$

]]></description>
			<content:encoded><![CDATA[<p><DIV class=sect2 lang=zh-cn><br />
<DIV class=titlepage><br />
<DIV><br />
<DIV><br />
<H3 class=title><A name=sect_01_01_01></A>shell的普遍作用 </H3></DIV></DIV></DIV><br />
<P>UNIX的shell程序解释用户的命令，不管是用户直接输入的或者从一个称作Shell脚本或者Shell程序文件读入。Shell脚本是解释型的，而不是编译型的。Shell从脚本行的每行读取命令并在系统中搜索这些命令，当编译器把一个程序转化为可供机器读取的形式时，那么它就可以被以一个可执行文件用在shell脚本当中。 </P><br />
<P>除了向内核传送命令之外，shell的主要任务是提供一个可单独配置的使用shell资源配置文件的用户环境。</P></DIV><br />
<DIV class=sect2 lang=zh-cn><br />
<DIV class=titlepage><br />
<DIV><br />
<DIV><br />
<H3 class=title><A name=sect_01_01_02></A>Shell常用类型 </H3></DIV></DIV></DIV><br />
<P>就像一个人会知道不同的语言和方言一样，你的UNIX系统通常提供多种shell类型：</P><br />
<DIV class=itemizedlist><br />
<UL type=disc><br />
<LI><br />
<P><SPAN><STRONG class=command>sh</STRONG></SPAN> 或者称作 Bourne Shell: 最初的shell并且仍然在UNIX系统和UNIX相关系统中使用。它是基本的shell，是一个特性不多的小程序。虽然不是一个标准的shell，但是为了UNIX程序的兼容性在每个Linux系统上仍然存在。 </P><br />
<LI><br />
<P><SPAN><STRONG class=command>bash</STRONG></SPAN> 或者称作 Bourne Again shell: 标准的GNU shell，直观而又灵活。或许是初学者的最明智选择同时对高级和专业用户来说也是一个强有力的工具。在Linux上，<SPAN><STRONG class=command>bash</STRONG></SPAN> 是普通用户的标准shell。这个shell因此称为Bourne shell的<SPAN class=emphasis><EM>超集</EM></SPAN>，一套附件和插件。意味着bash和sh是兼容的：在<SPAN><STRONG class=command>sh</STRONG></SPAN>中可以工作的命令，在<SPAN><STRONG class=command>bash</STRONG></SPAN>中也能工作，反之则不然。本书所有的例子和练习均使用<SPAN><STRONG class=command>bash</STRONG></SPAN>。 </P><br />
<LI><br />
<P><SPAN><STRONG class=command>csh</STRONG></SPAN> 或者称作 C shell: 语法了类似于C语言，某些时候程序员会使用。 </P><br />
<LI><br />
<P><SPAN><STRONG class=command>tcsh</STRONG></SPAN> 或者称作 Turbo C shell: 普通C shell的超集，加强了的用户友好度和速度。 </P><br />
<LI><br />
<P><SPAN><STRONG class=command>ksh</STRONG></SPAN> 或者称作 Korn shell: 某些时候被有UNIX背景的人所赏识。Bourne shell的一个超集，有着对初学者来说就是一场恶梦的标准配置。 </P></LI></UL></DIV><br />
<P>文件 <CODE class=filename><FONT face=NSimsun>/etc/shells</FONT></CODE> 给出了Linux系统上所有的已知shell的概览: </P><PRE class=screen><CODE class=prompt>mia:~&gt;</CODE> <SPAN><STRONG class=command>cat <CODE class=filename>/etc/shells</CODE></STRONG></SPAN><br />
/bin/bash<br />
/bin/sh<br />
/bin/tcsh<br />
/bin/csh<br />
</PRE><br />
<P>你默认的shell设置在 <CODE class=filename><FONT face=NSimsun>/etc/passwd</FONT></CODE> 文件中，象下面这行对用户 <SPAN class=emphasis><EM>mia</EM></SPAN> 的设置: </P><PRE class=screen>mia:L2NOfqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash<br />
</PRE><br />
<P>要从一个shell转换到另外一个，只要在活动的终端里输入新shell的的名字。系统在<CODE class=varname><FONT face=NSimsun>PATH</FONT></CODE>设置的目录里面寻找是否包含着个名字，既然一个shell就是一个可执行的文件（程序），当前的shell激活它使它运行起来，新的提示符出现，因为每个shell都有自己典型的外观： </P><PRE class=screen><CODE class=prompt>mia:~&gt;</CODE> <SPAN><STRONG class=command>tcsh</STRONG></SPAN><br />
[mia@post21 ~]$<br />
</PRE></DIV></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/338.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash新手指南 chm文档提供下载</title>
		<link>http://www.linuxsense.org/archives/333.html</link>
		<comments>http://www.linuxsense.org/archives/333.html#comments</comments>
		<pubDate>Wed, 27 Aug 2008 02:09:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=333</guid>
		<description><![CDATA[			Bash新手指南 chm文档提供下载
书&#160;&#160;&#160; 名: 《Bash新手指南》语&#160;&#160;&#160; 言:&#160; 中文文件名:&#160; Bash新手指南.chm大&#160;&#160;&#160; 小:&#160; 354K
点击下载 Bash新手指南
]]></description>
			<content:encoded><![CDATA[<p>			Bash新手指南 chm文档提供下载<span style="font-weight: bold;"></p>
<p>书&nbsp;&nbsp;&nbsp; 名: </span>《Bash新手指南》<br /><span style="font-weight: bold;">语&nbsp;&nbsp;&nbsp; 言:</span>&nbsp; 中文<br /><span style="font-weight: bold;">文件名:&nbsp; </span>Bash新手指南.chm<br /><span style="font-weight: bold;">大&nbsp;&nbsp;&nbsp; 小:&nbsp; </span>354K<br /><span style="font-weight: bold;"></span></p>
<p><font size="4"><a style="font-weight: bold;" href="books/Bash-newbie-guide.chm" target="_blank">点击下载 Bash新手指南</a></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/333.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bash中对变量的操作</title>
		<link>http://www.linuxsense.org/archives/271.html</link>
		<comments>http://www.linuxsense.org/archives/271.html#comments</comments>
		<pubDate>Mon, 11 Aug 2008 03:53:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=271</guid>
		<description><![CDATA[Bash中对变量的操作
1.条件变量替换:Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换条件放在{}中.(1) ${value:-word}当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.(2) ${value:=word}与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将word赋值给value(3) ${value:?message}若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若此替换出现在Shell程序中,那么该程序将终止运行)(4) ${value:+word}若变量以赋值的话,其值才用word替换,否则不进行任何替换(5) ${value:offset}${value:offset:length}从变量中提取子串,这里offset和length可以是算术表达式.(6) ${#value}变量的字符个数 (变量的字符个数，并不是变量个数）(7) ${value#pattern}${value##pattern}去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.(8) ${value%pattern}${value%%pattern}于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样(9) ${value/pattern/string}${value//pattern/string}进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同
注意:上述条件变量替换中,除(2)外,其余均不影响变量本身的值
2.变量的算术运算在Bash Shell中,只能进行两个整数间的运算,其结果仍为整数.要进行算术运算,需要使用let命令,语法为:let exprexpr是一个包含项和操作符的表达式,项可以是一个变量或是一个整数常数,当使用整数常数时,其默认为十进制整数,用户可以用radio#number来指定其它形式的整数,其中radio定义了整数是几进制表示的,number是该整数的值.若radio&#62;10,那么数字字符可从0-9和A-Z.在表达式中支持的操作符及其含义为:+,-,*,/,% 加,减,乘,除,取模&#62;&#62;,&#60;&#60;,&#38;,^,&#124; 左移,右移,位与,位异或,位或?: 三元运算符.与C语言中的定义一致~ 取补码!,&#62;=,&#60;=,&#62;,&#60;,==,!=,&#38;&#38;,&#124;&#124;=,+=,-=,*=,/=,%=,&#60;&#60;=,&#62;&#62;=,&#38;=,^=,&#124;=表达式式中也可以使用括号.括号或运算优先级的定义与一般计算机语言中的相同.let命令具有返回值.当计算结果(若有多个表达式时,以最后一个为准)为0时,返回值为1,否则为0.当表达式中含有shell的特殊字符(如&#124;)时,需要用引用符(&#8216;或&#8221;)将其引用起来.使用let时还需要注意的时,对于let x+y这样的式子,shell虽然计算了x+y的值但却将结果丢弃,若不想这样,可以使用let sum=x+y将x+y的结果保存在变量sum中另外还可以使用((和))操作符取代let命令,而且这样的话,还可以省去对算术表达式的引用,如果想返回表达式的值,则需用$(())的格式.
if的条件中，“＝”用于比较字符串；“－eq”用于比较整型数。
Bash内建参数===========
PPID : 该bash的呼叫者process ID. PWD : 目前的工作目录。 OLDPWD : 上一个工作目录。 REPLY : 当read命令没有参数时，直接设在REPLY上。 UID : User ID。 EUID : Effective User ID。 BASH : Bash的完整路径。 BASH_VERSION : Bash版本。 SHLVL : 每次有Bash执行时，数字加一。 RANDOM : 每次这个参数被用到时，就会产生一个乱数在RANDOM上。 SECONDS : [...]]]></description>
			<content:encoded><![CDATA[<p>Bash中对变量的操作<br />
<P>1.条件变量替换:<BR>Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换<BR>条件放在{}中.<BR>(1) ${value:-word}<BR>当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.<BR>(2) ${value:=word}<BR>与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将<BR>word赋值给value<BR>(3) ${value:?message}<BR>若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若<BR>此替换出现在Shell程序中,那么该程序将终止运行)<BR>(4) ${value:+word}<BR>若变量以赋值的话,其值才用word替换,否则不进行任何替换<BR>(5) ${value:offset}<BR>${value:offset:length}<BR>从变量中提取子串,这里offset和length可以是算术表达式.<BR>(6) ${#value}<BR>变量的字符个数 (变量的字符个数，并不是变量个数）<BR>(7) ${value#pattern}<BR>${value##pattern}<BR>去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配<BR>#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.<BR>(8) ${value%pattern}<BR>${value%%pattern}<BR>于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样<BR>(9) ${value/pattern/string}<BR>${value//pattern/string}<BR>进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区<BR>别与上同</P><br />
<P>注意:上述条件变量替换中,除(2)外,其余均不影响变量本身的值</P><br />
<P>2.变量的算术运算<BR>在Bash Shell中,只能进行两个整数间的运算,其结果仍为整数.要进行算术<BR>运算,需要使用let命令,语法为:<BR>let expr<BR>expr是一个包含项和操作符的表达式,项可以是一个变量或是一个整数常数,<BR>当使用整数常数时,其默认为十进制整数,用户可以用radio#number来指定其它<BR>形式的整数,其中radio定义了整数是几进制表示的,number是该整数的值.若<BR>radio&gt;10,那么数字字符可从0-9和A-Z.<BR>在表达式中支持的操作符及其含义为:<BR>+,-,*,/,% 加,减,乘,除,取模<BR>&gt;&gt;,&lt;&lt;,&amp;,^,| 左移,右移,位与,位异或,位或<BR>?: 三元运算符.与C语言中的定义一致<BR>~ 取补码<BR>!,&gt;=,&lt;=,&gt;,&lt;,==,!=,&amp;&amp;,||<BR>=,+=,-=,*=,/=,%=,&lt;&lt;=,&gt;&gt;=,&amp;=,^=,|=<BR>表达式式中也可以使用括号.括号或运算优先级的定义与一般计算机语言中的<BR>相同.<BR>let命令具有返回值.当计算结果(若有多个表达式时,以最后一个为准)为0时,<BR>返回值为1,否则为0.<BR>当表达式中含有shell的特殊字符(如|)时,需要用引用符(&#8216;或&#8221;)将其引用起来.<BR>使用let时还需要注意的时,对于let x+y这样的式子,shell虽然计算了x+y的值<BR>但却将结果丢弃,若不想这样,可以使用let sum=x+y将x+y的结果保存在变量sum中<BR>另外还可以使用((和))操作符取代let命令,而且这样的话,还可以省去对算术<BR>表达式的引用,如果想返回表达式的值,则需用$(())的格式.</P><br />
<P>if的条件中，“＝”用于比较字符串；“－eq”用于比较整型数。</P><br />
<P>Bash内建参数<BR>===========</P><br />
<P>PPID : 该bash的呼叫者process ID. <BR>PWD : 目前的工作目录。 <BR>OLDPWD : 上一个工作目录。 <BR>REPLY : 当read命令没有参数时，直接设在REPLY上。 <BR>UID : User ID。 <BR>EUID : Effective User ID。 <BR>BASH : Bash的完整路径。 <BR>BASH_VERSION : Bash版本。 <BR>SHLVL : 每次有Bash执行时，数字加一。 <BR>RANDOM : 每次这个参数被用到时，就会产生一个乱数在RANDOM上。 <BR>SECONDS : 从这个Shell一开始启动後的时间。 <BR>LINENO : Script的行数。 <BR>HISTCMD : 历史记录数。 <BR>OPTARG : getopts处理的最後一个选项参数。 <BR>OPTIND : 下一个要由getopts所处理的参数号码。 <BR>HOSTTYPE : 机器种类。 <BR>OSTYPE : 作业系统名称。 <BR>IFS : Internal Field Separator。 <BR>PATH : 命令搜寻路径。 <BR>PATH=&#8221;/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.&#8221; <BR>HOME : 目前使用者的home directory; <BR>CDPATH : cd命令的搜寻路径。 <BR>ENV : 如果这个参数被设定，每次有shell script被执行时，将会执行它所设定的档名做为环境设定。 <BR>MAIL : 如果这个参数被设定，而且MAILPATH没有被设定，那麽有信件进来时，bash会通知使用者。 <BR>MAILCHECK : 设定多久时间检查邮件一次。 <BR>MAILPATH : 一串的邮件检查路径。 <BR>MAIL_WARNING : 如果有设定的话，邮件被读取後，将会显示讯息。 <BR>PS1 : 提示讯息设定，内定为&#8221;bash$ &#8220;。(请详见提示讯息一节。) <BR>PS2 : 第二提示讯息设定，内定为&#8221;&gt; &#8220;。 <BR>PS3 : select命令所使用的提示讯息。 <BR>PS4 : 执行追踪时用的提示讯息设定，内定为&#8221;+ &#8220;。 <BR>HISTSIZE : 命令历史记录量，内定为500。 <BR>HISTFILE : 历史记录档，内定~/.bash_history。 <BR>HISTFILESIZE : 历史记录档行数最大值，内定500。 <BR>OPTERR : 如果设为1，bash会显示getopts的错误。 <BR>PROMPT_COMMAND : 如果设定的话，该值会在每次执行命令前都显示。 <BR>IGNOREEOF : 将EOF值当成输入，内定为10。 <BR>TMOUT : 如果设为大於零，该值被解译为输入等待秒数。若无输入，当成没有输入。 <BR>FCEDIT : fc命令的内定编辑器。 <BR>FIGNORE : 请详见READLINE。 <BR>INPUTRC : readline的startup file，内定~/.inputrc <BR>notify : 如果设定了，bash立即报告被终结的背景程式。 <BR>history_control, HISTCONTROL : history使用。 <BR>command_oriented_history : 存入多行指令。 <BR>glob_dot_filenames : 如果设定了，bash将会把&#8221;.&#8221;包含入档案路径中。 <BR>allow_null_glob_expansion : 如果设定了，bash允许路径明称为null string。 <BR>histchars : history使用。 <BR>nolinks : 如果设定了，执行指令时，不会跟随symbolic links。 <BR>hostname_completion_file, HOSTFILE : 包含与/etc/hosts相同格式的档名。 <BR>noclobber : 如果设定了，Bash不会覆写任何由&#8221;&gt;&#8221;、&#8221;&gt;&amp;&#8221;及&#8221;&lt;&gt;&#8221;所操作的档案。 <BR>auto_resume : 请见任务控制一节。 <BR>no_exit_on_failed_exec : 如果该值存在，非互动的shell不会因为exec失败而跳出。 <BR>cdable_vars : 如果启动，而cd命令找不到目录，可切换到参数形态指定的目录下。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/271.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>expr的用法</title>
		<link>http://www.linuxsense.org/archives/270.html</link>
		<comments>http://www.linuxsense.org/archives/270.html#comments</comments>
		<pubDate>Mon, 11 Aug 2008 03:45:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=270</guid>
		<description><![CDATA[本文使用一些具体的计算实例来阐述expr的用法, 希望对大家有所帮助
请问我以下这些语句为什么是错误的？
sum=0
sum=`expr $sum + ${sale[1]}`
运行时提示：expr: syntax error
sale[1]是已经赋过值的数组。
我运行了一下，没有错啊
你用的是什么平台？什么shell？
我运行了一下，也没有错啊
HP-UX KSH
请问$sum和${sale[1]}的值必须是整数吗？
HP-UX上提供的ksh不支持数组, 所以sale[1]是无效的。
我的环境是HP-UX ksh
我测试如下,可以通过
[/billing/hwh]num=0
[/billing/hwh]sale[1]=3
[/billing/hwh]num=`expr $num + ${sale[1]}`
[/billing/hwh]echo $num
3
我的测试结果与楼上的完全一致。
ksh是有数组的，可以这样试验一下：
[/export/binary]$ sale[1]=3
[/export/binary]$ sale[2]=4
[/export/binary]$ sale[3]=5
[/export/binary]$ echo ${sale[*]}
3 4 5
关于expr的用法，我将《LINUX与UNIX Shell编程指南》中的相关文字贴于此，作了一点修正，基本用法大概就是这些了。
===========================
17.5 expr用法
expr命令一般用于整数值，但也可用于字符串。一般格式为：
expr argument operator argument
expr也是一个手工命令行计数器。
$expr 10 + 10
20
$expr 1500 + 900
2500
$expr 30 / 3
10
$expr 30 / 3 / 2
5
(注意运算符左右都有空格)
使用乘号时，必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
$expr 30 * 3
90
17.5.1 增量计数
expr在循环中用于增量计算。首先，循环初始化为0，然后循环值加1，反引号的用法意
即替代命令。最基本的一种是从（expr）命令接受输出并将之放入循环变量。
$LOOP=0
$LOOP=`expr $LOOP + 1`
17.5.2 数值测试
可以用expr测试一个数。如果试图计算非整数，将返回错误。
$rr=1.1
$expr $rr + 1
expr: non-numeric argument
$rr=2
$expr $rr + [...]]]></description>
			<content:encoded><![CDATA[<p><P>本文使用一些具体的计算实例来阐述expr的用法, 希望对大家有所帮助</P><br />
<P>请问我以下这些语句为什么是错误的？</P><br />
<P>sum=0</P><br />
<P>sum=`expr $sum + ${sale[1]}`</P><br />
<P>运行时提示：expr: syntax error</P><br />
<P>sale[1]是已经赋过值的数组。</P><br />
<P>我运行了一下，没有错啊</P><br />
<P>你用的是什么平台？什么shell？</P><br />
<P>我运行了一下，也没有错啊</P><br />
<P>HP-UX KSH</P><br />
<P>请问$sum和${sale[1]}的值必须是整数吗？</P><br />
<P>HP-UX上提供的ksh不支持数组, 所以sale[1]是无效的。</P><br />
<P>我的环境是HP-UX ksh</P><br />
<P>我测试如下,可以通过</P><br />
<P>[/billing/hwh]num=0</P><br />
<P>[/billing/hwh]sale[1]=3</P><br />
<P>[/billing/hwh]num=`expr $num + ${sale[1]}`</P><br />
<P>[/billing/hwh]echo $num</P><br />
<P>3</P><br />
<P>我的测试结果与楼上的完全一致。</P><br />
<P>ksh是有数组的，可以这样试验一下：</P><br />
<P>[/export/binary]$ sale[1]=3</P><br />
<P>[/export/binary]$ sale[2]=4</P><br />
<P>[/export/binary]$ sale[3]=5</P><br />
<P>[/export/binary]$ echo ${sale[*]}</P><br />
<P>3 4 5</P><br />
<P>关于expr的用法，我将《LINUX与UNIX Shell编程指南》中的相关文字贴于此，作了一点修正，基本用法大概就是这些了。</P><br />
<P>===========================</P><br />
<P>17.5 expr用法</P><br />
<P>expr命令一般用于整数值，但也可用于字符串。一般格式为：</P><br />
<P>expr argument operator argument</P><br />
<P>expr也是一个手工命令行计数器。</P><br />
<P>$expr 10 + 10</P><br />
<P>20</P><br />
<P>$expr 1500 + 900</P><br />
<P>2500</P><br />
<P>$expr 30 / 3</P><br />
<P>10</P><br />
<P>$expr 30 / 3 / 2</P><br />
<P>5</P><br />
<P>(注意运算符左右都有空格)</P><br />
<P>使用乘号时，必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。</P><br />
<P>$expr 30 * 3</P><br />
<P>90</P><br />
<P>17.5.1 增量计数</P><br />
<P>expr在循环中用于增量计算。首先，循环初始化为0，然后循环值加1，反引号的用法意</P><br />
<P>即替代命令。最基本的一种是从（expr）命令接受输出并将之放入循环变量。</P><br />
<P>$LOOP=0</P><br />
<P>$LOOP=`expr $LOOP + 1`</P><br />
<P>17.5.2 数值测试</P><br />
<P>可以用expr测试一个数。如果试图计算非整数，将返回错误。</P><br />
<P>$rr=1.1</P><br />
<P>$expr $rr + 1</P><br />
<P>expr: non-numeric argument</P><br />
<P>$rr=2</P><br />
<P>$expr $rr + 1</P><br />
<P>3</P><br />
<P>(注意：这个例子与原文不同)</P><br />
<P>这里需要将一个值赋予变量（不管其内容如何），进行数值运算，并将输出导入dev/null，</P><br />
<P>然后测试最后命令状态，如果为0，证明这是一个数，其他则表明为非数值。</P><br />
<P>$value=12</P><br />
<P>$expr $value + 10 &gt; /dev/null 2&gt;&amp;1</P><br />
<P>$echo $?</P><br />
<P>0</P><br />
<P>这是一个数。</P><br />
<P>$value=hello</P><br />
<P>$expr $value + 10 &gt; /dev/null 2&gt;&amp;1</P><br />
<P>$echo $?</P><br />
<P>2</P><br />
<P>这是一个非数值字符。</P><br />
<P>expr也可以返回其本身的退出状态，不幸的是返回值与系统最后退出命令刚好相反，成</P><br />
<P>功返回1，任何其他值为无效或错误。下面的例子测试两个字符串是否相等，这里字符串为</P><br />
<P>“hello”和“hello”。</P><br />
<P>$value=hello</P><br />
<P>$expr $value = &#8220;hello&#8221;</P><br />
<P>1</P><br />
<P>$echo $?</P><br />
<P>0</P><br />
<P>expr返回1。不要混淆了，这表明成功。现在检验其最后退出状态，返回0表示测试成功，</P><br />
<P>“hello”确实等于“hello”。</P><br />
<P>17.5.3 模式匹配</P><br />
<P>expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任</P><br />
<P>何字符重复0次或多次。</P><br />
<P>$value=accounts.doc</P><br />
<P>$expr $value : &#8216;.*&#8217;</P><br />
<P>12</P><br />
<P>在expr中可以使用字符串匹配操作，这里使用模式. d o c抽取文件附属名。</P><br />
<P>$expr $value : &#8216;(.*).doc&#8217;</P><br />
<P>accounts</P><br />
<P>=============================</P><br />
<P>请问各位大虾：shell 中有数组吗？</P><br />
<P>当然有,用</P><br />
<P>$varname[0]=value1</P><br />
<P>$varname[1]=value2</P><br />
<P>&#8230;.</P><br />
<P>来定义</P><br />
<P>用</P><br />
<P>$echo ${varname[0]}</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/270.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash的环境变量</title>
		<link>http://www.linuxsense.org/archives/236.html</link>
		<comments>http://www.linuxsense.org/archives/236.html#comments</comments>
		<pubDate>Sat, 02 Aug 2008 04:59:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[环境变量]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=236</guid>
		<description><![CDATA[进入bash后，系统可根据你的配置生成一系列的环境变量，这些环境变量可用export命令显示。下面是一些常用的bash环境变量：
$LOGNAME，当前登录的用户名。
$HOME，当前用户的主目录。
$PATH，当前用户的命令搜索路径。
$LANG，当前系统的语言环境。
$TZ，时区
$MAILCHECK，检查新邮件的间隔，单位是秒。
$PS1，命令行提示符。
$PS2，二级命令行提示符，也就是当你的命令行很长，在一行写不下，转到第二行时出现的提示符。
$PWD，当前目录。
]]></description>
			<content:encoded><![CDATA[<p><P>进入bash后，系统可根据你的配置生成一系列的环境变量，这些环境变量可用export命令显示。下面是一些常用的bash环境变量：</P><br />
<P>$LOGNAME，当前登录的用户名。</P><br />
<P>$HOME，当前用户的主目录。</P><br />
<P>$PATH，当前用户的命令搜索路径。</P><br />
<P>$LANG，当前系统的语言环境。</P><br />
<P>$TZ，时区</P><br />
<P>$MAILCHECK，检查新邮件的间隔，单位是秒。</P><br />
<P>$PS1，命令行提示符。</P><br />
<P>$PS2，二级命令行提示符，也就是当你的命令行很长，在一行写不下，转到第二行时出现的提示符。</P><br />
<P>$PWD，当前目录。<BR></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/236.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash的用户交互接口</title>
		<link>http://www.linuxsense.org/archives/235.html</link>
		<comments>http://www.linuxsense.org/archives/235.html#comments</comments>
		<pubDate>Sat, 02 Aug 2008 04:58:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=235</guid>
		<description><![CDATA[Bash的用户接口也就是我们经常说的字符界面，这是我们与系统交互的主要环境，我们可通过这个接口管理我们的系统。
在系统引导时，第一个需要运行的进程是init，由init再衍生出一个getty终端进程，该进程打开一个终端窗口，提供标准输入、标准输出和标准错误。然后执行程序/bin/login，login程序提示输入密码，加密并验证密码。通过验证后系统进入登录shell，也就是bash。
不同的登录shell可在passwd文件设置。bash会通过几个配置文件来初始化用户环境。首先bash会查找/etc/profile，并执行其中的命令，初始化系统级别环境。然后在用户目录下查找.bash_profile文件，并执行里d面的命令，初始化用户级别的环境。用户级别的设置可覆盖系统级别设置。最后会执行.bashrc用户环境设置文件，这时，默认提示符美元符号将显示在屏幕上。
]]></description>
			<content:encoded><![CDATA[<p><P>Bash的用户接口也就是我们经常说的字符界面，这是我们与系统交互的主要环境，我们可通过这个接口管理我们的系统。</P><br />
<P>在系统引导时，第一个需要运行的进程是init，由init再衍生出一个getty终端进程，该进程打开一个终端窗口，提供标准输入、标准输出和标准错误。然后执行程序/bin/login，login程序提示输入密码，加密并验证密码。通过验证后系统进入登录shell，也就是bash。</P><br />
<P>不同的登录shell可在passwd文件设置。bash会通过几个配置文件来初始化用户环境。首先bash会查找/etc/profile，并执行其中的命令，初始化系统级别环境。然后在用户目录下查找.bash_profile文件，并执行里d面的命令，初始化用户级别的环境。用户级别的设置可覆盖系统级别设置。最后会执行.bashrc用户环境设置文件，这时，默认提示符美元符号将显示在屏幕上。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/235.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bash下的控制键</title>
		<link>http://www.linuxsense.org/archives/242.html</link>
		<comments>http://www.linuxsense.org/archives/242.html#comments</comments>
		<pubDate>Sat, 02 Aug 2008 05:08:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=242</guid>
		<description><![CDATA[通过控制键可以控制shell的行为，下面是一些常用的控制键。
&#160;
&#160;
&#160;
&#160;
&#160;
&#160;

Table&#160;2.2.&#160;控制键






控制键
描述


Ctrl_C
中止当前命令

Ctrl_D
输入结束

Ctrl_\
如果Ctrl_C无效，则中止当前命令

Ctrl_S
禁止屏幕输出

Ctrl_Q
开启屏幕输出

DEL或CTRL_?
删除最后的字符

Ctrl_U
删除整个命令行

Ctrl_Z
暂停当前命令
]]></description>
			<content:encoded><![CDATA[<p><P>通过控制键可以控制shell的行为，下面是一些常用的控制键。</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<DIV class=table><A name=id2826280></A><br />
<P class=title><B>Table&nbsp;2.2.&nbsp;控制键</B></P><br />
<TABLE summary=控制键 border=1><br />
<COLGROUP><br />
<COL><br />
<COL></COLGROUP><br />
<THEAD><br />
<TR><br />
<TH>控制键</TH><br />
<TH>描述</TH></TR></THEAD><br />
<TBODY><br />
<TR><br />
<TD>Ctrl_C</TD><br />
<TD>中止当前命令</TD></TR><br />
<TR><br />
<TD>Ctrl_D</TD><br />
<TD>输入结束</TD></TR><br />
<TR><br />
<TD>Ctrl_\</TD><br />
<TD>如果Ctrl_C无效，则中止当前命令</TD></TR><br />
<TR><br />
<TD>Ctrl_S</TD><br />
<TD>禁止屏幕输出</TD></TR><br />
<TR><br />
<TD>Ctrl_Q</TD><br />
<TD>开启屏幕输出</TD></TR><br />
<TR><br />
<TD>DEL或CTRL_?</TD><br />
<TD>删除最后的字符</TD></TR><br />
<TR><br />
<TD>Ctrl_U</TD><br />
<TD>删除整个命令行</TD></TR><br />
<TR><br />
<TD>Ctrl_Z</TD><br />
<TD>暂停当前命令</TD></TR></TBODY></TABLE></DIV></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/242.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bash中的特殊字符</title>
		<link>http://www.linuxsense.org/archives/241.html</link>
		<comments>http://www.linuxsense.org/archives/241.html#comments</comments>
		<pubDate>Sat, 02 Aug 2008 05:06:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[shell编程]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=241</guid>
		<description><![CDATA[在bash中，有很多有特殊含义的特殊字符，下面是一个完整的列表：
&#160;
&#160;
&#160;
&#160;
&#160;

Table&#160;2.1.&#160;特殊字符






字符
含义


~
主目录

`
命令替换

#
注释

$
变量表达式

&#38;
后台作业

*
字符通配符

(
启动子shell

)
停止子shell

\
转义或续行

&#124;
管道操作符

[]
通配符集

{}
命令块

;
shell命令分隔符，作用是可在一行输入多条shell命令。

&#8216;
强引用，引号内所有内容保持字面意思。

&#8220;
弱引用，引号内某些内容保持字面意思。

&#60;
输入重定向

&#62;
输出重定向

/
路径分隔符

?
通配符，匹配单个任意字符

!
取反操作
]]></description>
			<content:encoded><![CDATA[<p><P>在bash中，有很多有特殊含义的特殊字符，下面是一个完整的列表：</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<P>&nbsp;</P><br />
<DIV class=table><A name=id2825963></A><br />
<P class=title><B>Table&nbsp;2.1.&nbsp;特殊字符</B></P><br />
<TABLE summary=特殊字符 border=1><br />
<COLGROUP><br />
<COL><br />
<COL></COLGROUP><br />
<THEAD><br />
<TR><br />
<TH>字符</TH><br />
<TH>含义</TH></TR></THEAD><br />
<TBODY><br />
<TR><br />
<TD>~</TD><br />
<TD>主目录</TD></TR><br />
<TR><br />
<TD>`</TD><br />
<TD>命令替换</TD></TR><br />
<TR><br />
<TD>#</TD><br />
<TD>注释</TD></TR><br />
<TR><br />
<TD>$</TD><br />
<TD>变量表达式</TD></TR><br />
<TR><br />
<TD>&amp;</TD><br />
<TD>后台作业</TD></TR><br />
<TR><br />
<TD>*</TD><br />
<TD>字符通配符</TD></TR><br />
<TR><br />
<TD>(</TD><br />
<TD>启动子shell</TD></TR><br />
<TR><br />
<TD>)</TD><br />
<TD>停止子shell</TD></TR><br />
<TR><br />
<TD>\</TD><br />
<TD>转义或续行</TD></TR><br />
<TR><br />
<TD>|</TD><br />
<TD>管道操作符</TD></TR><br />
<TR><br />
<TD>[]</TD><br />
<TD>通配符集</TD></TR><br />
<TR><br />
<TD>{}</TD><br />
<TD>命令块</TD></TR><br />
<TR><br />
<TD>;</TD><br />
<TD>shell命令分隔符，作用是可在一行输入多条shell命令。</TD></TR><br />
<TR><br />
<TD>&#8216;</TD><br />
<TD>强引用，引号内所有内容保持字面意思。</TD></TR><br />
<TR><br />
<TD>&#8220;</TD><br />
<TD>弱引用，引号内某些内容保持字面意思。</TD></TR><br />
<TR><br />
<TD>&lt;</TD><br />
<TD>输入重定向</TD></TR><br />
<TR><br />
<TD>&gt;</TD><br />
<TD>输出重定向</TD></TR><br />
<TR><br />
<TD>/</TD><br />
<TD>路径分隔符</TD></TR><br />
<TR><br />
<TD>?</TD><br />
<TD>通配符，匹配单个任意字符</TD></TR><br />
<TR><br />
<TD>!</TD><br />
<TD>取反操作</TD></TR></TBODY></TABLE></DIV></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/241.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
