<?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>陈志伟博客 &#187; 默认分类</title>
	<atom:link href="http://chenzhiwei.net/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://chenzhiwei.net</link>
	<description>善始者实繁，克终者盖寡。</description>
	<lastBuildDate>Tue, 03 Jan 2012 09:14:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>写博客获80童年大礼包</title>
		<link>http://chenzhiwei.net/2011/12/blog-hongluotuo-act/</link>
		<comments>http://chenzhiwei.net/2011/12/blog-hongluotuo-act/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 05:36:07 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[默认分类]]></category>
		<category><![CDATA[80]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[活动]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30448</guid>
		<description><![CDATA[今天邮箱中收到了一封标题为“邀请您参加写博客获80童年大礼包 ”的邮件，最近两年很少接到此类活动邮件了。随着微博的兴起，很多博主的博客几乎都不再更新了，在08年时认识的很多博主的博客现在都已经不存在了，我博客最近一年更新也非常少了，但是我不会关闭自己的博客。我是一个怀旧的人，我想用博客记录下来自己的一些事情，等到某年某月某日再回首查看。 简单介绍一下红骆驼网 红骆驼网成立于2010年10月，我们是一群怀有梦想的80后，如今的80后已经步入社会，成为社会中流砥柱，红骆驼网将为80后提供一份特别的礼物，童真。回想童年，会因为一块糖果，一个铁皮青蛙而玩得不亦乐乎。成年的80后，更需要一份童真支持他们走得更好，更远，为社会做出更多的贡献。 活动介绍： 只要您有一个博客，符合我们活动要求，就可以免费拿到红骆驼提供价值109元怀旧大礼包一份，不需要任何费用。 此次活动红骆驼希望可以为更多的80后，带来一份纯洁的童真。希望80后无论在生活中、工作中遇到困难了，没关系，红骆驼网的一件铁皮小青蛙、一块糖果为你带来一丝童真、一丝喜悦，让80后朋友带着童真继续前进。 活动时间： 2011年12月14日 ～ 12月26日，2012年1月3日统一发奖品。 活动规则： 中文博客用户，有无独立域名不限。 有至少1年以上的写博客历史，最后一次更新在本次活动前60天内。 有固定读者，读者数量不限。 对红骆驼产品有兴趣，愿意在博客上为红骆驼的产品或服务写一篇评价文章。 活动详情：http://blog.hongluotuo.com/?p=145 &#169; 2011, chenzhiwei.net. 版权所有. 本文永久链接：http://chenzhiwei.net/2011/12/blog-hongluotuo-act/相关日志博客最近的更新]]></description>
			<content:encoded><![CDATA[<p>今天邮箱中收到了一封标题为“邀请您参加写博客获80童年大礼包 ”的邮件，最近两年很少接到此类活动邮件了。随着微博的兴起，很多博主的博客几乎都不再更新了，在08年时认识的很多博主的博客现在都已经不存在了，我博客最近一年更新也非常少了，但是我不会关闭自己的博客。我是一个怀旧的人，我想用博客记录下来自己的一些事情，等到某年某月某日再回首查看。<img title="更多..." src="http://chenzhiwei.net/wordpress/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><span id="more-30448"></span></p>
<p><strong>简单介绍一下红骆驼网</strong></p>
<p><a href="http://www.hongluotuo.com/" target="_blank">红骆驼网</a>成立于2010年10月，我们是一群怀有梦想的80后，如今的80后已经步入社会，成为社会中流砥柱，红骆驼网将为80后提供一份特别的礼物，童真。回想童年，会因为一块糖果，一个铁皮青蛙而玩得不亦乐乎。成年的80后，更需要一份童真支持他们走得更好，更远，为社会做出更多的贡献。</p>
<h3>活动介绍：</h3>
<p>只要您有一个博客，符合我们活动要求，就可以免费拿到红骆驼提供价值109元怀旧大礼包一份，不需要任何费用。</p>
<p>此次活动红骆驼希望可以为更多的80后，带来一份纯洁的童真。希望80后无论在生活中、工作中遇到困难了，没关系，红骆驼网的一件铁皮小青蛙、一块糖果为你带来一丝童真、一丝喜悦，让80后朋友带着童真继续前进。</p>
<p><img title="hongluotuo" src="http://blog.hongluotuo.com/wp-content/uploads/2011/12/blog.jpg" alt="" width="600" height="250" /><br />
<strong>活动时间：</strong><br />
2011年12月14日 ～ 12月26日，2012年1月3日统一发奖品。<br />
<strong>活动规则：</strong></p>
<ol>
<li>中文博客用户，有无独立域名不限。</li>
<li>有至少1年以上的写博客历史，最后一次更新在本次活动前60天内。</li>
<li>有固定读者，读者数量不限。</li>
<li>对红骆驼产品有兴趣，愿意在博客上为红骆驼的产品或服务写一篇评价文章。</li>
</ol>
<p><strong>活动详情：</strong><a href="http://blog.hongluotuo.com/?p=145">http://blog.hongluotuo.com/?p=145</a></p>
<p style="font-weight: bold;">&copy; 2011, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="写博客获80童年大礼包" href="http://chenzhiwei.net/2011/12/blog-hongluotuo-act/">http://chenzhiwei.net/2011/12/blog-hongluotuo-act/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/01/recently-blog-update/" title="博客最近的更新">博客最近的更新</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2011/12/blog-hongluotuo-act/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>内网IP和公网IP的区别</title>
		<link>http://chenzhiwei.net/2010/09/intranet-ip-and-public-ip-networks/</link>
		<comments>http://chenzhiwei.net/2010/09/intranet-ip-and-public-ip-networks/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 07:51:15 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[互联网络]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IPv4]]></category>
		<category><![CDATA[NAT]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30375</guid>
		<description><![CDATA[什么是内网IP： 一些小型企业或者学校，通常都是申请一个固定的IP地址，然后通过IP共享（IP Sharing），使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP，内网IP是在规划IPv4协议时，考虑到IP地址资源可能不足，就专门为内部网设计私有IP地址（或称之为保留地址），一般常用内网IP地址都是这种形式的：10.X.X.X、172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是，内网的计算机可向Internet上的其他计算机发送连接请求，但Internet上其他的计算机无法向内网的计算机发送连接请求。我们平时可能在内网机器上搭建过网站或者FTP服务器，而在外网是不能访问该网站和FTP服务器的，原因就在于此。 什么是公网IP（外网IP）： 公网IP就是除了保留IP地址以外的IP地址，可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址，其实就是指的公网IP。互联网上的每台计算机都有一个独立的IP地址，该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。 怎样理解互联网上的每台计算机都有一个唯一的IP地址： 其实，互联网上的计算机是通过“公网IP＋内网IP”来唯一确定的，就像很多大楼都是201房间一样，房间号可能一样，但是大楼肯定是唯一的。公网IP地址和内网IP地址也是同样，不同企业或学校的机器可能有相同的内网IP地址，但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样IP地址共享的呢？这就需要使用NAT（Network Address Translation,网络地址转换）功能。当内部计算机要连接互联网时，首先需要通过NAT技术，将内部计算机数据包中有关IP地址的设置都设成NAT主机的公共IP地址，然后再传送到Internet，虽然内部计算机使用的是私有IP地址，但在连接Internet时，就可以通过NAT主机的NAT技术，将内网我IP地址修改为公网IP地址，如此一来，内网计算机就可以向Internet请求数据了。 什么是NAT（Network Address Translation,网络地址转换）： 网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单，NAT不仅完美地解决了lP地址不足的问题，而且还能够有效地避免来自网络外部的攻击，隐藏并保护网络内部的计算机。 虽然NAT可以借助于某些代理服务器来实现，但考虑到运算成本和网络性能，很多时候都是在路由器上来实现的。 随着接入Internet的计算机数量的不断猛增，IP地址资源也就愈加显得捉襟见肘。事实 上，除了中国教育和科研计算机网(CERNET)外，一般用户几乎申请不到整段的C类IP地址。在其他ISP那里，即使是拥有几百台计算机的大型局域网用户，当他们申请IP地址时，所分配的地址也不过只有几个或十几个IP地址。显然，这样少的IP地址根本无法满足网络用户的需求，于是也就产生了NAT技 术。 参考资料： 1. 《鸟哥的Linux私房菜》 2. 百度百科词条：http://baike.baidu.com/view/16102.htm &#169; 2010, chenzhiwei.net. 版权所有. 本文永久链接：http://chenzhiwei.net/2010/09/intranet-ip-and-public-ip-networks/相关日志TCP/IP协议简介]]></description>
			<content:encoded><![CDATA[<p><strong>什么是内网IP：</strong></p>
<p>一些小型企业或者学校，通常都是申请一个固定的IP地址，然后通过IP共享（IP Sharing），使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP，内网IP是在规划IPv4协议时，考虑到IP地址资源可能不足，就专门为内部网设计私有IP地址（或称之为保留地址），一般常用内网IP地址都是这种形式的：10.X.X.X、172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是，内网的计算机可向Internet上的其他计算机发送连接请求，但Internet上其他的计算机无法向内网的计算机发送连接请求。我们平时可能在内网机器上搭建过网站或者FTP服务器，而在外网是不能访问该网站和FTP服务器的，原因就在于此。<span id="more-30375"></span></p>
<p><strong>什么是公网IP（外网IP）：</strong></p>
<p>公网IP就是除了保留IP地址以外的IP地址，可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址，其实就是指的公网IP。互联网上的每台计算机都有一个独立的IP地址，该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。</p>
<p><strong>怎样理解互联网上的每台计算机都有一个唯一的IP地址：</strong></p>
<p>其实，互联网上的计算机是通过“公网IP＋内网IP”来唯一确定的，就像很多大楼都是201房间一样，房间号可能一样，但是大楼肯定是唯一的。公网IP地址和内网IP地址也是同样，不同企业或学校的机器可能有相同的内网IP地址，但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样IP地址共享的呢？这就需要使用NAT（Network Address Translation,网络地址转换）功能。当内部计算机要连接互联网时，首先需要通过NAT技术，将内部计算机数据包中有关IP地址的设置都设成NAT主机的公共IP地址，然后再传送到Internet，虽然内部计算机使用的是私有IP地址，但在连接Internet时，就可以通过NAT主机的NAT技术，将内网我IP地址修改为公网IP地址，如此一来，内网计算机就可以向Internet请求数据了。</p>
<p><strong>什么是NAT（Network Address Translation,网络地址转换）：</strong></p>
<p>网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单，NAT不仅完美地解决了lP地址不足的问题，而且还能够有效地避免来自网络外部的攻击，隐藏并保护网络内部的计算机。</p>
<p>虽然NAT可以借助于某些代理服务器来实现，但考虑到运算成本和网络性能，很多时候都是在路由器上来实现的。</p>
<p>随着接入Internet的计算机数量的不断猛增，IP地址资源也就愈加显得捉襟见肘。事实 上，除了中国教育和科研计算机网(CERNET)外，一般用户几乎申请不到整段的C类IP地址。在其他ISP那里，即使是拥有几百台计算机的大型局域网用户，当他们申请IP地址时，所分配的地址也不过只有几个或十几个IP地址。显然，这样少的IP地址根本无法满足网络用户的需求，于是也就产生了NAT技 术。</p>
<p>参考资料：</p>
<p>1. 《鸟哥的Linux私房菜》</p>
<p>2. 百度百科词条：<a href="http://baike.baidu.com/view/16102.htm" target="_blank">http://baike.baidu.com/view/16102.htm</a></p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="内网IP和公网IP的区别" href="http://chenzhiwei.net/2010/09/intranet-ip-and-public-ip-networks/">http://chenzhiwei.net/2010/09/intranet-ip-and-public-ip-networks/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/01/tcp-and-ip-protocol/" title="TCP/IP协议简介">TCP/IP协议简介</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/09/intranet-ip-and-public-ip-networks/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>我所认识的android</title>
		<link>http://chenzhiwei.net/2010/08/google-android-operating-system/</link>
		<comments>http://chenzhiwei.net/2010/08/google-android-operating-system/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 12:55:39 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[默认分类]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30336</guid>
		<description><![CDATA[android（维基词条）是机器人的意思，也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称，该平台由操作系统、中间件、用户界面和应用软件组成，号称是首个为移动终端打造的真正开放和完整的移动软件。 今年3月份和4月份，有一段时间我在学习android手机应用开发，当时也写了一篇文章“android初体验-HelloGallery实例详解”，当时自己刚刚开始学习，也没有教材，只能一点点的阅读英文文档，按照文档上面写的例子一个个的练习，也在网上的一些关于android的论坛（如机锋网、eoeandroid）上看别人发的帖子。因为我对java和eclipse很熟悉，所以学习起来很轻松。 我从来没用过android手机，但是在我学习android应用开发的这段时间，我感受到了android系统的强大，在众多开发者的努力下，android系统正在变的越来越牛，在android系统上面甚至可以编写php，这不得不让人感到惊奇。借助于android模拟器，我感觉到了android系统界面的友好和功能操作的便利。 就目前来看，我还是觉得android手机有点贵，一般的学生都用不起，在我周围还没有发现用android手机的同学呢，很多同学都是用的摩托罗拉和诺基亚，而更多的同学用的是山寨机，包括我在内。去年年初，我看到一篇文章，说国产山寨机安装android操作系统只需要500-800元就可以买下了，可渐渐的我发现，这纯粹是乱说，根本不是这回事，从谷奥Android站点建立开始，我一直都在订阅，一直在关注android系统的消息，感觉android手机离500-800元还有很长很长的一段路要走，也许永远都不可能实现。 就目前来看，android发展前景应该相当不错，有不作恶的google来提供支持及广大android爱好者来开发应用程序，相信用不了多久，就能超越某果的封闭式手机。我没有用过，也没有见过某果的封闭式手机，虽然在网上很多人都对此评价很高，但是我是不会使用它的，不为别的，就因为它不开放，不开源。 PS:这也是之前写的一篇博客，没有写完，今天我又补充了一点内容，但是仍然感觉标题和内容有些出入，但我还是把它发表出来了。现在，我的博客草稿箱里面已经空了，没有什么草稿文章了。。。 &#169; 2010, chenzhiwei.net. 版权所有. 本文永久链接：http://chenzhiwei.net/2010/08/google-android-operating-system/相关日志Linux内核基本结构哥的CN域名注册的Google Apps悲剧了关于操作系统Chrome Web Store正式上线Linux内核代码中的Makefile文件]]></description>
			<content:encoded><![CDATA[<p>android（<a href="http://zh.wikipedia.org/zh-cn/Android" target="_blank">维基词条</a>）是机器人的意思，也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称，该平台由操作系统、中间件、用户界面和应用软件组成，号称是首个为移动终端打造的真正开放和完整的移动软件。</p>
<p>今年3月份和4月份，有一段时间我在学习android手机应用开发，当时也写了一篇文章“<a href="http://chenzhiwei.net/2010/03/android-hellogallery-app/" target="_blank">android初体验-HelloGallery实例详解</a>”，当时自己刚刚开始学习，也没有教材，只能一点点的阅读英文文档，按照文档上面写的例子一个个的练习，也在网上的一些关于android的论坛（如<a href="http://bbs.gfan.com/" target="_blank">机锋网</a>、<a href="http://www.eoeandroid.com/" target="_blank">eoeandroid</a>）上看别人发的帖子。因为我对java和eclipse很熟悉，所以学习起来很轻松。<span id="more-30336"></span></p>
<p>我从来没用过android手机，但是在我学习android应用开发的这段时间，我感受到了android系统的强大，在众多开发者的努力下，android系统正在变的越来越牛，在android系统上面甚至可以<a href="http://android.google.org.cn/posts/php-for-android-install-it-and-start-testing.html" target="_blank">编写php</a>，这不得不让人感到惊奇。借助于android模拟器，我感觉到了android系统界面的友好和功能操作的便利。</p>
<p>就目前来看，我还是觉得android手机有点贵，一般的学生都用不起，在我周围还没有发现用android手机的同学呢，很多同学都是用的摩托罗拉和诺基亚，而更多的同学用的是山寨机，包括我在内。去年年初，我看到一篇文章，说国产山寨机安装android操作系统只需要500-800元就可以买下了，可渐渐的我发现，这纯粹是乱说，根本不是这回事，从<a href="http://android.google.org.cn/" target="_blank">谷奥Android站点</a>建立开始，我一直都在订阅，一直在关注android系统的消息，感觉android手机离500-800元还有很长很长的一段路要走，也许永远都不可能实现。</p>
<p>就目前来看，android发展前景应该相当不错，有不作恶的google来提供支持及广大android爱好者来开发应用程序，相信用不了多久，就能超越某果的封闭式手机。我没有用过，也没有见过某果的封闭式手机，虽然在网上很多人都对此评价很高，但是我是不会使用它的，不为别的，就因为它不开放，不开源。</p>
<p>PS:这也是之前写的一篇博客，没有写完，今天我又补充了一点内容，但是仍然感觉标题和内容有些出入，但我还是把它发表出来了。现在，我的博客草稿箱里面已经空了，没有什么草稿文章了。。。</p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="我所认识的android" href="http://chenzhiwei.net/2010/08/google-android-operating-system/">http://chenzhiwei.net/2010/08/google-android-operating-system/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2010/12/the-basic-structure-of-linux-kernel/" title="Linux内核基本结构">Linux内核基本结构</a></li><li><a href="http://chenzhiwei.net/2010/12/google-apps-will-delete-dot-cn-apps/" title="哥的CN域名注册的Google Apps悲剧了">哥的CN域名注册的Google Apps悲剧了</a></li><li><a href="http://chenzhiwei.net/2010/12/about-operating-system/" title="关于操作系统">关于操作系统</a></li><li><a href="http://chenzhiwei.net/2010/12/chrome-web-store-is-now-launched/" title="Chrome Web Store正式上线">Chrome Web Store正式上线</a></li><li><a href="http://chenzhiwei.net/2010/12/makefile-in-linux-kernel/" title="Linux内核代码中的Makefile文件">Linux内核代码中的Makefile文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/08/google-android-operating-system/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>linux shell 学习笔记(四)</title>
		<link>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-4/</link>
		<comments>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-4/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 08:09:46 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[编程相关]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30329</guid>
		<description><![CDATA[九、linux中的函数 函数代表一种模块化的设计思想，可以将一些常用的、内聚度高的操作封装成函数，在需要时进行调用。 1. 函数原型 1 2 3 4 function 函数名() { 语句 } 在此，function可以不显示指定。函数应先定义后使用，在调用时只需指定函数名即可，不用写()。 示例： 1 2 3 4 5 6 #!/bin/bash function printAddress() { echo &#34;your address is: beijing&#34; } printAddress 2. 函数的参数和返回值 在shell函数中，有两种方法使用参数：一种是变量直接传递法，另一种采用位置参数。 变量直接传递法是通过直接在外部声明变量，在函数体里面通过操作这些变量，达到向函数传递参数的目的。 例如： 1 2 3 4 5 6 7 8 9 10 #!/bin/bash address=&#34;beijing&#34; function printAddress() { echo &#34;your address_1 [...]]]></description>
			<content:encoded><![CDATA[<p>九、linux中的函数</p>
<p>函数代表一种模块化的设计思想，可以将一些常用的、内聚度高的操作封装成函数，在需要时进行调用。<br />
<span id="more-30329"></span><br />
1. 函数原型</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">function 函数名()
{
	语句
}</pre></td></tr></table></div>

<p>在此，function可以不显示指定。函数应先定义后使用，在调用时只需指定函数名即可，不用写()。</p>
<p>示例：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
function printAddress()
{
	echo &quot;your address is: beijing&quot;
}
printAddress</pre></td></tr></table></div>

<p>2. 函数的参数和返回值</p>
<p>在shell函数中，有两种方法使用参数：一种是变量直接传递法，另一种采用位置参数。</p>
<p>变量直接传递法是通过直接在外部声明变量，在函数体里面通过操作这些变量，达到向函数传递参数的目的。</p>
<p>例如：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
address=&quot;beijing&quot;
function printAddress()
{
	echo &quot;your address_1 is: &quot;$address
	address=&quot;shanghai&quot;
	echo &quot;your address_2 is: &quot;$address
}
printAddress
echo &quot;your address_3 is: &quot;$address</pre></td></tr></table></div>

<p>由此可见，函数中进行变量修改也作全局使用，所以可以通过在函数中修改参数变量来达到函数返回目的，将这些参数作为返回值。</p>
<p>通过下面的例子可以更好的了解位置参数：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
function printAddress()
{
	echo $1
	echo $2
}
printAddress &quot;beijing&quot; &quot;shanghai&quot;</pre></td></tr></table></div>

<p>注：以前学习shell时写的笔记，没有拿到电脑前练习过。这次写在博客上的这些都是我在电脑上(ubuntu8.04)练习通过后贴出来的，单引号和双引号类似于php中的单引号和双引号的用法，在用echo进行标准输出时，如果不涉及变量的话双引号、单引号都是可有可无的，还有那个数组赋值与遍历也是让我琢磨不透，所以这些细微差别还是日后慢慢的在实践中掌握比较好。</p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="linux shell 学习笔记(四)" href="http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-4/">http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-4/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/08/shell-io-redirection/" title="Shell I/O重定向">Shell I/O重定向</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-shell/" title="几个简单的shell脚本">几个简单的shell脚本</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-2/" title="shell 脚本学习之判断条件">shell 脚本学习之判断条件</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes/" title="shell脚本学习">shell脚本学习</a></li><li><a href="http://chenzhiwei.net/2010/10/linux-shell-study-notes-part-5/" title="Linux Shell学习笔记（五）">Linux Shell学习笔记（五）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-4/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>linux shell 学习笔记(三)</title>
		<link>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-3/</link>
		<comments>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-3/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 07:31:58 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[编程相关]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30324</guid>
		<description><![CDATA[八、shell中的循环语句 shell中的循环语句有for循环语句、while循环语句和until循环语句。 1. for循环语句 原型一： 1 2 3 4 5 for 变量 in 取值集合 for 变量 in 取值集合 do 语句 done 原型二： 1 2 3 4 for 变量 in 文件正则表达式 do 语句 done 原型三： 1 2 3 4 for 变量 in $* do 语句 done 例： 1 2 3 4 5 6 #!/bin/bash address=(beijing tianjin [...]]]></description>
			<content:encoded><![CDATA[<p>八、shell中的循环语句</p>
<p>shell中的循环语句有for循环语句、while循环语句和until循环语句。<br />
<span id="more-30324"></span><br />
1. for循环语句</p>
<p>原型一：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">for 变量 in 取值集合
for 变量 in 取值集合
do
	语句
done</pre></td></tr></table></div>

<p>原型二：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">for 变量 in 文件正则表达式
do
	语句
done</pre></td></tr></table></div>

<p>原型三：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">for 变量 in $*
do
	语句
done</pre></td></tr></table></div>

<p>例：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
address=(beijing tianjin shandong)
for i in ${address[*]}
do
	echo $i
done</pre></td></tr></table></div>

<p>说明：<br />
循环输出数组中的值。</p>
<p>2. while循环语句</p>
<p>原型：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">while 条件测试语句
do
	语句
done</pre></td></tr></table></div>

<p>while语句的执行过程是：先测试测试语句是否为真，若为真则执行循环体，当执行完当前命令后，再进行条件测试，直到条件结果为假，循环结束。条件测试语句既可以是test语句也可以是运行命令的返回值，若返回值大于0，则表示条件为真，否则条件为假。</p>
<p>例：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
str=&quot;&quot;
echo &quot;input a str:&quot;
read str
while [ $str != &quot;quit&quot; ]
do
	echo &quot;your input is :&quot;$str
	echo &quot;input your str:&quot;
	read str
done</pre></td></tr></table></div>

<p>说明：</p>
<p>3. until循环语句</p>
<p>until语句是while语句的一种变形，原型如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">until 条件测试语句
do
	语句
done</pre></td></tr></table></div>

<p>如果条件为假则执行，否则不执行。</p>
<p>另外还有以下语句和循环语句合用。</p>
<p>①、break语句</p>
<p>break语句是一个退出循环的命令，主要用于多层循环的嵌套退出，一般用法如下：</p>
<p>break [n]</p>
<p>其中，n用来表示跳出几层循环，默认值为1，即退出本次循环。</p>
<p>②、continue语句</p>
<p>continue语句与break语句有相同之处，都用于终止本次循环，区别在于，bread语句是退出整个循环而continue语句只是退出本次循环，继续执行下一循环体。continue语句原型如下：</p>
<p>continue [n]</p>
<p>其中，n用来表示跳出几层循环，默认值为1，即退出本次循环。</p>
<p>③exit语句</p>
<p>exit语句是退出正在执行的shell脚本，可以主动指定返回值，其原型如下：</p>
<p>exit [n]</p>
<p>其中，n是主动设定的返回值。如果未显示给定n的值，则该值默认为最后一次命令的执行状态作为返回值。</p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="linux shell 学习笔记(三)" href="http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-3/">http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-3/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/08/shell-io-redirection/" title="Shell I/O重定向">Shell I/O重定向</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-shell/" title="几个简单的shell脚本">几个简单的shell脚本</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-2/" title="shell 脚本学习之判断条件">shell 脚本学习之判断条件</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes/" title="shell脚本学习">shell脚本学习</a></li><li><a href="http://chenzhiwei.net/2010/10/linux-shell-study-notes-part-5/" title="Linux Shell学习笔记（五）">Linux Shell学习笔记（五）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>linux shell学习笔记(二)</title>
		<link>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-2/</link>
		<comments>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-2/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 10:32:00 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[编程相关]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30318</guid>
		<description><![CDATA[接上篇日志：linux shell学习笔记(一) 这篇日志主要写shell中的控制语句，有两种判断语句，if语句和case语句，学过C语言的同学一定不会陌生，很简单的用法。 七、shell中的控制判断语句 1. if语句 原型一 1 2 3 if 测试条件 then 语句1 fi 原型二 1 2 3 4 if 测试条件 then 语句1 else 语句2 fi 原型三 1 2 3 4 5 6 if 测试条件1 then 语句1 elif 测试条件2 then 语句2 else 语句3 fi 在if语句中一个重要的环节是编写测试条件，也就是程序执行的判断条件。if语句中可以将命令执行结果当作测试条件。例如：若命令正常结束，则表示测试成功，其返回值为0，条件测试为真；否则条件测试为假。测试条件编写一般有以下3种形式： （1）. 用test命令 （2）. 用方括号把测试条件括起来。 （3）. 采用[[条件表达式]]方式，条件表达式用来测试文件的属性和进行字符串比较。 test命令原型如下： test 表达式 [...]]]></description>
			<content:encoded><![CDATA[<p>接上篇日志：<a href="http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-1/" target="_blank">linux shell学习笔记(一)</a></p>
<p>这篇日志主要写shell中的控制语句，有两种判断语句，if语句和case语句，学过C语言的同学一定不会陌生，很简单的用法。<span id="more-30318"></span></p>
<p><strong>七、shell中的控制判断语句</strong></p>
<p>1. if语句</p>
<p>原型一</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">if 测试条件
then 语句1
fi</pre></td></tr></table></div>

<p>原型二</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">if 测试条件
then 语句1
else 语句2
fi</pre></td></tr></table></div>

<p>原型三</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">if 测试条件1
then 语句1
elif 测试条件2
then 语句2
else 语句3
fi</pre></td></tr></table></div>

<p>在if语句中一个重要的环节是编写测试条件，也就是程序执行的判断条件。if语句中可以将命令执行结果当作测试条件。例如：若命令正常结束，则表示测试成功，其返回值为0，条件测试为真；否则条件测试为假。测试条件编写一般有以下3种形式：</p>
<p>（1）. 用test命令</p>
<p>（2）. 用方括号把测试条件括起来。</p>
<p>（3）. 采用[[条件表达式]]方式，条件表达式用来测试文件的属性和进行字符串比较。</p>
<p>test命令原型如下：</p>
<p>test 表达式</p>
<p>test一般与系统运算搭配起来使用，它可以与如下四类运算符共同使用。</p>
<p>第一类：字符测试运算符</p>
<p>字符测试运算符的作用是用于测试字符串操作的返回值，具体参数如下：</p>
<p>-z str1 ：如果字符串str1的长度为0，则测试条件为真<br />
-n str1 ：如果字符串str1的长度大于0，则测试条件为真<br />
str1       ：如果字符串str1不是空串，则测试条件为真<br />
str1 = str2 ：如果字符串str1等于字符串str2，则测试条件为真<br />
str1 != str2 ：如果字符串str1不等于字符串str2，则测试条件为真<br />
str1 &gt; str2 ：如果按字典顺序字符串str1排在str2之后，则测试条件为真<br />
str1 &lt; str2 ：如果按字典顺序字符串str1排在str2之前，则测试条件为真</p>
<p>注：=、!=、&lt;、&gt;，这些符号在使用时两边要加空格</p>
<p>例：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
echo &quot;input your address:&quot;
read address
if address
then
	echo &quot;your address is: &quot;$address
else
	echo &quot;your address is null&quot;
fi</pre></td></tr></table></div>

<p>以上程序意思是用户输入一字符串，如果输入字符串长度大于0，则输出用户输入的字符串，否则输出空。</p>
<p>第二类：数值测试运算符</p>
<p>数值测试运算符主要用于数值运算时的判断，具体参数如下：</p>
<p>num1 -eq num2 ：如果整数num1等于num2，则测试条件为真<br />
num1 -ne num2 ：如果整数num1不等于num2，则测试条件为真<br />
num1 -lt num2 ：如果整数num1小于num2，则测试条件为真<br />
num1 -le num2 ：如果整数num1小于或等于num2，则测试条件为真<br />
num1 -gt num2 ：如果整数num1大于num2，则测试条件为真<br />
num1 -ge num2 ：如果整数num1大于或等于num2，则测试条件为真</p>
<p>第三类：逻辑运算符</p>
<p>逻辑运算符用于逻辑语句的判断，常用的逻辑运算符如下：</p>
<p>! ：逻辑“非”，放在任意逻辑表达式的前面，全原来为真的表达式为假，原来为假的表达式为真<br />
-a ：逻辑“与”，放在两个逻辑表达式之间，表示只有两个表达式都为真时，结果才为真<br />
-o ：逻辑“或”，放在两个逻辑表达式之间，表示只有两个表达式都为假时，结果才为假<br />
() ：圆括号可以把逻辑表达式括起来，使用之成为一个整体，优先进行运算</p>
<p>注：逻辑表达式中运算符的优先关系如下：”()”&gt;”!”&gt;”-a”&gt;”-o”。</p>
<p>第四类：文件运算符</p>
<p>文件运算符用于测试文件或目录的操作，常用文件运算符如下：</p>
<p>-r 文件名：若文件存在并且是用户可读的，则测试条件为真<br />
-w 文件名：若文件存在并且是用户可写的，则测试条件为真<br />
-x 文件名：若文件存在并且是用户可执行的，则测试条件为真<br />
-f  文件名：若文件存在并且是普通文件，则测试条件为真<br />
-d 文件名：若文件存在并且是目录文件，则测试条件为真<br />
-p 文件名：若文件存在并且是命名的FIFO文件，则测试条件为真<br />
-b 文件名：若文件存在并且是块设备文件，则测试条件为真<br />
-c 文件名：若文件存在并且是字符设备文件，则测试条件为真<br />
-s 文件名：若文件存在并且长度大于0，则测试条件为真<br />
-t 文件描述字：若文件被打开并且文件描述字是与终端设备相关的，则测试条件为真，默认的文件描述字是1。</p>
<p>2. case语句</p>
<p>case语句是一种多重判断语句，类似于多个if elif语句，其原型如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">case 字符串 in
	模式表达式1) 语句1;;
	模式表达式2) 语句2;;
	模式表达式3) 语句3;;
	...
esac</pre></td></tr></table></div>

<p>case语句执行原理是将字符串与各个模式串顺次匹配，若满足则执行，否则继续查找，如果没有匹配成功的，则不执行任何语句，直接退出。</p>
<p>注：每个模式处理语句是以”;;”两个分号结束的，模式表达式应该唯一，一个模式表达式可以含有多个模式串，但它们之间要用”|”隔开。</p>
<p>例：</p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="linux shell学习笔记(二)" href="http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-2/">http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-2/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/08/shell-io-redirection/" title="Shell I/O重定向">Shell I/O重定向</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-shell/" title="几个简单的shell脚本">几个简单的shell脚本</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-2/" title="shell 脚本学习之判断条件">shell 脚本学习之判断条件</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes/" title="shell脚本学习">shell脚本学习</a></li><li><a href="http://chenzhiwei.net/2010/10/linux-shell-study-notes-part-5/" title="Linux Shell学习笔记（五）">Linux Shell学习笔记（五）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>linux shell学习笔记(一)</title>
		<link>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-1/</link>
		<comments>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-1/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 01:32:43 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[默认分类]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30311</guid>
		<description><![CDATA[昨天逛dengmin同学的博客，发现他把自己的php学习笔记都放在的博客上，我想了一下，感觉还是将我学习shell时做的笔记写在博客上吧，虽然很简单，但是毕竟写在纸上不如放在博客上，写在博客上自己随时都可以查看。 在计算机科学中，Shell俗称壳（用来区别于核），是指“提供使用者使用界面”的软件（命令解析器）。它类似于DOS下的command.com。它接收用户命令，然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言，它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令；作为程序设计语言，它定义了各种变量和参数，并提供了许多在高阶语言中才具有的控制结构，包括循环和分支。shell是一种解释型编程语言，这些都不重要，重要的是怎么使用它。 一、 执行shell脚本的方法 1. 输入重定向到shell脚本，具体来讲是利用输入重定向机制，让shell解释器顺序读取每一行脚本命令，进行执行，使用原型为bash&#62;脚本文件名，例如：bash&#62;test.sh。 2. 类似于方法1，不过它是以脚本文件名为参数来执行的，原型：bash test.sh 。 3. 将脚本文件设置成可执行文件，直接调用执行，./test.sh 。(用chmod +x test.sh将脚本文件加上可执行权限) 二、shell的基本语法 赋值一般采用以下形式：变量名=字符串 1. “=”号两边是不能有空格的，不然会出错的。 2. 若赋值语句中，“=”后面没有任何内容，则该变量为一个空字符串，若只声明而没赋值，则该变量默认也是一个空字符串。 3. 若一个变量中含有空格、制表符、换行符，则要用双引号括起来，不然会出错。 4. 在shell程序文件中，如果想引用已经定义的变量，一般要在变量名前加“$”符号，这个符号含义是告诉shell，后面是一个变量。 5. 单引号(&#8216;&#8230;&#8217;)：单引号也称为强引用，引用所有内容。在单引号中，没有字符拥有特殊含义。 6. 双引号(“&#8230;”)：双引号也称为弱引用，除了3个元字符$(美元符号)、`(反引号)和\(反斜线)外引用所有内容。在双引号中，这3个字符还保留它们各自的特殊含义。 7. 反引号(`&#8230;`)：命令替换，命令替换允许在一条命令中嵌入一条命令。shell首先执行嵌入的命令，并且用输出替换该命令。然后shell再执行整个命令。 8. 在shell变量引用中，一个变量与一个长字符串的组合，如果当前变量处在字符串的最后，可以利用直接引用的方式；如果处在中间或开头的位置，则可以用花括号将变量名包含起来。如下： 程序： 1 2 3 4 5 #!/bin/bash address=beijing echo $address echo ${address}test echo test$address 输出： 1 2 3 beijing beijingtest testbeijing 三、shell中的通配符(用于模式匹配) [...]]]></description>
			<content:encoded><![CDATA[<p>昨天逛<a href="http://www.iyouf.info/" target="_blank">dengmin</a>同学的博客，发现他把自己的php学习笔记都放在的博客上，我想了一下，感觉还是将我学习shell时做的笔记写在博客上吧，虽然很简单，但是毕竟写在纸上不如放在博客上，写在博客上自己随时都可以查看。</p>
<p>在计算机科学中，Shell俗称壳（用来区别于核），是指“提供使用者使用界面”的软件（命令解析器）。它类似于DOS下的command.com。它接收用户命令，然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言，它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令；作为程序设计语言，它定义了各种变量和参数，并提供了许多在高阶语言中才具有的控制结构，包括循环和分支。shell是一种解释型编程语言，这些都不重要，重要的是怎么使用它。<br />
<span id="more-30311"></span><br />
<strong>一、 执行shell脚本的方法</strong></p>
<p>1.<del datetime="2010-07-25T00:01:18+00:00"> 输入重定向到shell脚本，具体来讲是利用输入重定向机制，让shell解释器顺序读取每一行脚本命令，进行执行，使用原型为bash&gt;脚本文件名，例如：bash&gt;test.sh</del>。</p>
<p>2. 类似于方法1，不过它是以脚本文件名为参数来执行的，原型：bash test.sh 。</p>
<p>3. 将脚本文件设置成可执行文件，直接调用执行，./test.sh 。(用chmod +x test.sh将脚本文件加上可执行权限)</p>
<p><strong>二、shell的基本语法</strong></p>
<p>赋值一般采用以下形式：变量名=字符串</p>
<p>1. “=”号两边是不能有空格的，不然会出错的。</p>
<p>2. 若赋值语句中，“=”后面没有任何内容，则该变量为一个空字符串，若只声明而没赋值，则该变量默认也是一个空字符串。</p>
<p>3. 若一个变量中含有空格、制表符、换行符，则要用双引号括起来，不然会出错。</p>
<p>4. 在shell程序文件中，如果想引用已经定义的变量，一般要在变量名前加“$”符号，这个符号含义是告诉shell，后面是一个变量。</p>
<p>5. 单引号(&#8216;&#8230;&#8217;)：单引号也称为强引用，引用所有内容。在单引号中，没有字符拥有特殊含义。</p>
<p>6. 双引号(“&#8230;”)：双引号也称为弱引用，除了3个元字符$(美元符号)、`(反引号)和\(反斜线)外引用所有内容。在双引号中，这3个字符还保留它们各自的特殊含义。</p>
<p>7. 反引号(`&#8230;`)：命令替换，命令替换允许在一条命令中嵌入一条命令。shell首先执行嵌入的命令，并且用输出替换该命令。然后shell再执行整个命令。</p>
<p>8. 在shell变量引用中，一个变量与一个长字符串的组合，如果当前变量处在字符串的最后，可以利用直接引用的方式；如果处在中间或开头的位置，则可以用花括号将变量名包含起来。如下：<br />
程序：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
address=beijing
echo $address
echo ${address}test
echo test$address</pre></td></tr></table></div>

<p>输出：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">beijing
beijingtest
testbeijing</pre></td></tr></table></div>

<p><strong>三、shell中的通配符(用于模式匹配)</strong></p>
<p>1. “*”符号</p>
<p>“*”符号用于匹配字符串中0次或多次出现的字符，如：s*可以匹配shell、shanghai等。在使用“*”符号时要注意一点，在匹配文件名与路径名时，“.”符号与“\”必须显示匹配，如：*test不能匹配“.httest”文件，而要用“.*test”来匹配，同时“/home/test”需要用”/*/test”来匹配。</p>
<p>2. “?”符号</p>
<p>“?”符号仅匹配对应位置的一个字符。如：m?ke可匹配”mike”、”make”等，但不能匹配”mooke”。</p>
<p>3. “[]“符号</p>
<p>“[]“称号的作用是匹配该字符组所限定范围内的任何一个字符，方括号中的字符可以由直接级出的字符组成，如：[adehk]；也可以由表示限定范围的起始字符和终止字符及中间的连接字符”-”组成。如：[a-zA-H]、[0-9]等。</p>
<p>4. “!”符号</p>
<p>“!”符号是与”[]“符号配合使用的，”!”的作用是匹配不在方括号中列出的字符。例如：t[!a-h]st，则可表示tyst、t9st，但不能表示test。</p>
<p><strong>四、shell中的输入</strong></p>
<p>shell中输入是由函数read实现，原型为：read 变量1 [变量2]</p>
<p>利用read函数可以交互地为变量赋值，当然也可以通过制表符或空格为多变量赋值，说明如下：</p>
<p>1. 如果变量个数多于输入串中字符串个数，则依次赋值，剩下变量取空值。</p>
<p>2. 如果变量个数等于输入串中字符串个数，则一一对应赋值。</p>
<p>3. 如果变量个数少于输入串中字符串个数，刚除依次赋值外，最后一个变量接纳剩下的字符串。</p>
<p>例如：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
echo &quot;input your name and age:&quot;
read name age
echo &quot;your name is: &quot;$name
echo &quot;your age is: &quot;$age</pre></td></tr></table></div>

<p>如果你输入Jim 15 则输出：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">input your name and age:
your name is: Jim
your age is: 15</pre></td></tr></table></div>

<p><strong>五、shell中的输出</strong></p>
<p>shell中输出是由echo函数实现的，echo可直接输出其后面所跟变量的值或直接输出其后面的字符串。echo函数后面以空格隔开，以换行符终止。如果数据之间要保留多个空格，则要用双引号把它们括起来以便shell对它们进行正确的操作。另：echo函数还定义了一组转义字符，在使用转义字符时要加入”-e”选项。其转义字符如下：</p>
<p>“\a” ：响铃报警，”\b” ：后退一字符，”\f” ：换页，”\n” ：显示换行，”\t” ：制表符，”\v” ：垂直制表符，”\r” ：回车符，”\\” ：反斜线。<br />
例如：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
echo -e hello,'\n'world!
echo hello,'\n'world!
echo '-e' hello,'\n'world!
echo -e hello,&quot;\n&quot;world!
echo -e hello,\nworld!
echo hello,\nworld!</pre></td></tr></table></div>

<p>输出：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">hello,
world!
hello,\nworld!
hello,
world!
hello,
world!
hello,nworld!
hello,nworld!</pre></td></tr></table></div>

<p><strong>六、shell中的数组</strong></p>
<p>shell支持一维数组，但并不限定数组大小，数组下标从0开始。</p>
<p>在操作数组时，取值方式是：${数组名[下标]} ；赋值方式是：数组名[下标]=值 (为单个数组元素赋值)；如果要对整个数组的所有元素赋值，可以采用：数组名=(值1，值2，值3，&#8230;)，值与值之间要用空格隔开。</p>
<p>遍历数组除用循环外还可用：“数组名[*]”或“数组名[@]”，例如：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
array1[0]=beijing
array1[1]=shanghai
array2=(guangzhou,shenzhen,chengdu)
echo &quot;\${array1[0]} = &quot; ${array1[0]}
echo &quot;\$array1[1] = &quot;$array1[1]
echo &quot;\${array1[*]} = &quot;${array1[*]}
echo &quot;\$array1 = &quot;$array1
echo &quot;\${array2[*]} = &quot;${array2[*]}
echo &quot;\${array2[@]} = &quot;${array2[@]}
echo &quot;\$array2 = &quot;$array2
echo &quot;\$array2[1] = &quot;$array2[1]</pre></td></tr></table></div>

<p>输出：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">${array1[0]} =  beijing
$array1[1] = beijing[1]
${array1[*]} = beijing shanghai
$array1 = beijing
${array2[*]} = guangzhou,shenzhen,chengdu
${array2[@]} = guangzhou,shenzhen,chengdu
$array2 = guangzhou,shenzhen,chengdu
$array2[1] = guangzhou,shenzhen,chengdu[1]</pre></td></tr></table></div>

<p>注：数组的赋值与输出有点麻烦。<br />
对于数组修改操作，可以再对其重新赋值；但如果要删除一个已经赋值后的元素则需要借助一个外部命令：unset，如：unset array[0]可清空下标为0的元素，此时数组大小减一；unset array[@]可以清空整个数组元素所有元素。例如：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
address=(beijing,shanghai,shandong)
address[0]=nanjing
echo ${address[*]}
unset address[0]
echo ${address[*]}</pre></td></tr></table></div>

<p>输出：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">beijing shanghai shandong
shanghai shandong</pre></td></tr></table></div>

<p>注：关于数组输入与输出规则比较多，得多练习掌握。</p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="linux shell学习笔记(一)" href="http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-1/">http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-1/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/08/shell-io-redirection/" title="Shell I/O重定向">Shell I/O重定向</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-shell/" title="几个简单的shell脚本">几个简单的shell脚本</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes-2/" title="shell 脚本学习之判断条件">shell 脚本学习之判断条件</a></li><li><a href="http://chenzhiwei.net/2010/11/shell-script-study-notes/" title="shell脚本学习">shell脚本学习</a></li><li><a href="http://chenzhiwei.net/2010/10/linux-shell-study-notes-part-5/" title="Linux Shell学习笔记（五）">Linux Shell学习笔记（五）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>wordpress主题常用的代码</title>
		<link>http://chenzhiwei.net/2010/07/wordpress-useful-code/</link>
		<comments>http://chenzhiwei.net/2010/07/wordpress-useful-code/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 09:54:49 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[建站相关]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[博客]]></category>

		<guid isPermaLink="false">http://chenzhiwei.net/?p=30304</guid>
		<description><![CDATA[很多同学的wordpress博客主题侧边栏都有最新文章、随机文章、最新评论等等内容，而单篇文章下方也会加上版权信息，我之前添加版权信息就是在写每篇文章时，在最后加上，但是这样太麻烦，自己在网上搜索一下，然后又仿照一些知名博客的相应设置自己也在博客文章页面加上了版权信息，由于最近比较忙，一直没空写出来，今天就把它写出来与大家分享一下。 1. 最新/随机文章 1 2 3 4 5 6 7 global $post; $myposts = get_posts('numberposts=9&#38;offset=1&#38;orderby=rand'); foreach($myposts as $post) : setup_postdata($post); ?&#62; &#60;li&#62;&#60;a href=&#34;&#60;?php the_permalink&#40;&#41;; ?&#62;&#34; title=&#34;&#60;?php the_title&#40;&#41;; ?&#62;&#34;&#62;&#60;?php the_title&#40;&#41;; ?&#62;&#60;/a&#62;&#60;/li&#62; &#60;?php endforeach; 最新/随机文章用的是wordpress现成的函数调用，上述代码中的numberposts=9是指显示9篇文章，orderby=rand意思是随机显示，如果是orderby=date就是最新文章了，当然还得order=desc，意思是按日期降序排列，懂sql语言的同学很容易就能看明白，这里有更详细的官方介绍，不过是英文的。这个地方是获得最新文章的另一种方法。 2. 最新评论 1 2 3 4 5 6 7 $comments = get_comments('number=9&#38;$status=approve&#38;offset=1'); foreach($comments as $comm) : $comm-&#62;comment_content=mb_substr($comm-&#62;comment_content,0,20); ?&#62; &#60;li&#62;&#60;a href=&#34;&#60;?php echo&#40;get_permalink&#40;$comm-&#62;comment_post_ID&#41;&#41;; ?&#62;#comment-&#60;?php [...]]]></description>
			<content:encoded><![CDATA[<p>很多同学的wordpress博客主题侧边栏都有最新文章、随机文章、最新评论等等内容，而单篇文章下方也会加上版权信息，我之前添加版权信息就是在写每篇文章时，在最后加上，但是这样太麻烦，自己在网上搜索一下，然后又仿照一些知名博客的相应设置自己也在博客文章页面加上了版权信息，由于最近比较忙，一直没空写出来，今天就把它写出来与大家分享一下。<br />
<span id="more-30304"></span><br />
<strong>1. 最新/随机文章</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">global $post;
	 $myposts = get_posts('numberposts=9&amp;offset=1&amp;orderby=rand');
	 foreach($myposts as $post) :
	   setup_postdata($post);
	 ?&gt;
		&lt;li&gt;&lt;a href=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> the_permalink<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; title=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> the_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> the_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/a&gt;&lt;/li&gt;
	 <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>最新/随机文章用的是wordpress现成的函数调用，上述代码中的numberposts=9是指显示9篇文章，orderby=rand意思是随机显示，如果是orderby=date就是最新文章了，当然还得order=desc，意思是按日期降序排列，懂sql语言的同学很容易就能看明白，<a href="http://codex.wordpress.org/Function_Reference/get_posts" target="_blank">这里</a>有更详细的官方介绍，不过是英文的。这个<a href="http://codex.wordpress.org/Function_Reference/wp_get_recent_posts" target="_blank">地方</a>是获得最新文章的另一种方法。</p>
<p><strong>2. 最新评论</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">$comments = get_comments('number=9&amp;$status=approve&amp;offset=1');
		  foreach($comments as $comm) :
			$comm-&gt;comment_content=mb_substr($comm-&gt;comment_content,0,20);
		?&gt;
		  &lt;li&gt;&lt;a href=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span>get_permalink<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comm</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_post_ID</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>#comment-<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comm</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; title=&quot;view the entire comment by <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comm</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_author</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comm</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/a&gt;&lt;/li&gt;
		<span style="color: #000000; font-weight: bold;">&lt;?php</span>
		  <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>最新评论这个代码用了我很长时间才写好，一般网上的方法都是直接去查询数据库，写一大堆代码，太麻烦了，我在<a href="http://codex.wordpress.org/Function_Reference/get_comments" target="_blank">wordpress官方文档</a>上找到了这个方法，很好用，不过总是最后一条评论显示不出来，目前也没有找到原因。代码说明我就不写了，很简单的。</p>
<p><strong>3. 版权信息</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> insertNote<span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_single<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">||</span>is_feed<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$content</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'&lt;p style=&quot;font-weight: bold;&quot;&gt;&amp;copy; '</span><span style="color: #339933;">.</span> get_the_time<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">', &lt;a href=&quot;http://chenzhiwei.net&quot;&gt;chenzhiwei.net&lt;/a&gt;. 版权所有.  &lt;br /&gt;'</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$content</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$content</span><span style="color: #339933;">.=</span> <span style="color: #0000ff;">'本文永久链接：&lt;a title=&quot;'</span><span style="color: #339933;">.</span>get_the_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; href=&quot;'</span><span style="color: #339933;">.</span>get_permalink<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span><span style="color: #339933;">.</span>get_permalink<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/a&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_feed<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$content</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">&quot;&lt;hr /&gt;&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_filter <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'the_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'insertNote'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>版权信息是在主题支持函数里写一个函数，就可以了。也可以将feed里也加入版权信息。以上代码就是我博客里的用，可以参考一下。相关图片如下：</p>
<p><img class="alignnone" title="feed 版权信息" src="http://67.195.19.74/4119/4811292687_0da7d9b079_b.jpg" alt="single" width="590" height="280" /></p>
<p><img class="alignnone" title="single page 版权信息" src="http://67.195.19.74/4122/4811292695_8c31c8ac67_b.jpg" alt="single" width="563" height="145" /></p>
<p><strong>4. 存档页面</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">&lt;div class=&quot;archive&quot;&gt;
&nbsp;
	&lt;strong&gt;by page:&lt;/strong&gt;
		&lt;ul&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_list_pages<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title_li='</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/ul&gt;
&nbsp;
	&lt;strong&gt;by month:&lt;/strong&gt;
		&lt;ul&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_get_archives<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'type=monthly'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/ul&gt;
&nbsp;
	&lt;strong&gt;by category:&lt;/strong&gt;
		&lt;ul&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_list_categories<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sort_column=name&amp;title_li='</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/ul&gt;
&nbsp;
&lt;/div&gt;
&nbsp;
&lt;div class=&quot;archive&quot;&gt;
&nbsp;
	&lt;strong&gt;by post:&lt;/strong&gt;
		&lt;ul&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_get_archives<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'type=postbypost&amp;limit=100'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> 
		&lt;/ul&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>有些同学一直在用插件实现文档存档，不过，我认为博客里最好还是少用插件，这样可以减轻服务器负担，也减少了升级插件的麻烦，下面就是我存档页面用的代码。</p>
<p>以上就是我博客里用到的一些代码，以后再用其他代码时，我会及时补充上来。</p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="wordpress主题常用的代码" href="http://chenzhiwei.net/2010/07/wordpress-useful-code/">http://chenzhiwei.net/2010/07/wordpress-useful-code/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2011/01/recently-blog-update/" title="博客最近的更新">博客最近的更新</a></li><li><a href="http://chenzhiwei.net/2009/11/move-blog-again/" title="博客又一次搬家">博客又一次搬家</a></li><li><a href="http://chenzhiwei.net/2009/04/cannot-modify-header-information/" title="Cannot modify header information的问题">Cannot modify header information的问题</a></li><li><a href="http://chenzhiwei.net/2011/11/old-version-php-support-json/" title="让旧版本的PHP支持json">让旧版本的PHP支持json</a></li><li><a href="http://chenzhiwei.net/2011/10/write-write/" title="随写">随写</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/07/wordpress-useful-code/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>博客更换主题</title>
		<link>http://chenzhiwei.net/2010/02/change-blog-theme/</link>
		<comments>http://chenzhiwei.net/2010/02/change-blog-theme/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 14:52:51 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[默认分类]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chenzhiwei.cn/?p=30149</guid>
		<description><![CDATA[在放假前我紧张的将studiopress.com的church主题修改了一下就换上了，感觉这个主题很不错，整洁不失个性。我就喜欢这样的主题。 我去掉了主题上自带的首页，自己又制作了个博客页面外加一个single页面，总体上对自己的修改还算满意。该主题使用了三个插件：相关文章、分页插件和语法高亮插件。我觉得相关文章和分页插件不管在哪个主题里都是必不可少的，这是来实现一个博客的基本功能，而语法高亮插件对于普通博客是不必要的。 主题边栏全为自定义代码，哪天有时间了我会专门写一篇文章来介绍我博客上的插件的以及主题边栏自定义代码。 我比较喜欢这种整齐简洁的主题，于是自己断断续续花了很长时间才改成现在的样子，自我感觉很满意。 主题下载地址： http://themes.wopus.org/themes/english-lanuage/1062.html &#169; 2010, chenzhiwei.net. 版权所有. 本文永久链接：http://chenzhiwei.net/2010/02/change-blog-theme/相关日志不用插件实现wordpress分页导航的方法博客最近的更新wordpress主题常用的代码几款不错的在线HTML编辑器博客又一次搬家]]></description>
			<content:encoded><![CDATA[<p>在放假前我紧张的将studiopress.com的church主题修改了一下就换上了，感觉这个主题很不错，整洁不失个性。我就喜欢这样的主题。</p>
<p>我去掉了主题上自带的首页，自己又制作了个博客页面外加一个single页面，总体上对自己的修改还算满意。该主题使用了三个插件：相关文章、分页插件和语法高亮插件。我觉得相关文章和分页插件不管在哪个主题里都是必不可少的，这是来实现一个博客的基本功能，而语法高亮插件对于普通博客是不必要的。<span id="more-30149"></span></p>
<p>主题边栏全为自定义代码，哪天有时间了我会专门写一篇文章来介绍我博客上的插件的以及主题边栏自定义代码。</p>
<p>我比较喜欢这种整齐简洁的主题，于是自己断断续续花了很长时间才改成现在的样子，自我感觉很满意。</p>
<p>主题下载地址： <a href="http://themes.wopus.org/themes/english-lanuage/1062.html" target="_blank">http://themes.wopus.org/themes/english-lanuage/1062.html</a></p>
<p style="font-weight: bold;">&copy; 2010, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="博客更换主题" href="http://chenzhiwei.net/2010/02/change-blog-theme/">http://chenzhiwei.net/2010/02/change-blog-theme/</a></p><hr /><div  class="related_post_title">相关日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2010/12/display-pagination-without-plugin/" title="不用插件实现wordpress分页导航的方法">不用插件实现wordpress分页导航的方法</a></li><li><a href="http://chenzhiwei.net/2011/01/recently-blog-update/" title="博客最近的更新">博客最近的更新</a></li><li><a href="http://chenzhiwei.net/2010/07/wordpress-useful-code/" title="wordpress主题常用的代码">wordpress主题常用的代码</a></li><li><a href="http://chenzhiwei.net/2009/11/several-html-online-editor/" title="几款不错的在线HTML编辑器">几款不错的在线HTML编辑器</a></li><li><a href="http://chenzhiwei.net/2009/11/move-blog-again/" title="博客又一次搬家">博客又一次搬家</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2010/02/change-blog-theme/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>[转]一个程序员的奋斗历程</title>
		<link>http://chenzhiwei.net/2009/09/a-programmer-s-hard-struggle/</link>
		<comments>http://chenzhiwei.net/2009/09/a-programmer-s-hard-struggle/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 12:56:12 +0000</pubDate>
		<dc:creator>zhiwei</dc:creator>
				<category><![CDATA[个人日志]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[programmer]]></category>

		<guid isPermaLink="false">/2009/09/a-programmer-s-hard-struggle.html</guid>
		<description><![CDATA[PS：此文为多年前的一位程序员所写，相信很多人都看过，但是我知道肯定还有很多人没有看过，所以就让没看过这篇文章的同学看看这位前辈是怎么奋斗的吧！希望此文能对广大程序员有所启发，共勉！ 前几天我的一个老师把这篇文章发给了我，我一直都没有看，今天一口气把它看完了，自己太渺小了。。。 这些日子我一直在写一个实时操作系统内核，已有小成了，等写完我会全部公开，希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 ，所以把我的经历写出来与大家共勉，希望能给刚如行的朋友们一点点帮助。一转眼我在IT行业学习工作已经七年多了，这期间我做过网页，写过MIS、数据库，应用程序，做过通信软件、硬件驱动、协议栈，到现在做操作系统内核和 IC相关开发，这中间走了很多弯路，也吃了不少苦。 我上的是一个三流的高校，就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了，大一开学前的假期我就开始了学习，记得我买的第一本书是《计算机基础DOS3.0》，大家别吓着了，其实当时已经普及了DOS6.22了，只是我在书店里看到了DOS4.0，5.0，6.0的书，以为像英语那样是第四、五、六册，记得当时到处找DOS1.0，现在想想也幸好我没有找到：）开学前我学完了 PASCAL，那时既没有计算机也没有人可以请教，我连程序是什么的概念都没有，只好死记硬背代码，然后拿纸写，我一直到大三才有了一台486，在这之前用纸写了多少程序我也记不清楚了，只知道最长的一个我拿A4大小的草稿纸写了30 多页，我的C语言、C++ 、VC都是在这样的条件下入门的。所以说条件是可以克服的，希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房，我的心情激动的无与伦比，但是一上机我立刻傻了眼，他们用的是英文版的Win3.1，我的那点DOS知识都见了鬼，上机提心吊胆的一阵瞎摸，一不小心把Word弄成了全屏，怎么都还不了原，当时真是心急如焚，我以为机器被我弄坏了。第一个C语言程序，就是那个经典的HelloWorld，我调了几个星期，上机机会非常少，也没有书告诉我开发环境（TC2.0）需要设置，而且开始我都不知道有编译器，我甚至自作聪明把写好的程序扩展名从.c改成.exe，结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了，大一下四门课挂了彩，三类学校就是这点好，挂上一二十门也照样毕业。不过扯远点说，我那么刻苦都及不了格，可见我们国家的计算机教育有多死板。 大二准备学VC和BC，当时难以取舍，后来选了VC，不为别的，只为书店里两本书，VC 那本便宜6块钱。我的努力在班上无人能及，学的日夜不分，大三有了计算机后更是如此，很多次父亲半夜教训我说我不要命了，我一直觉得自己基础差，记忆又不行，条件也不好，所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算机的天赋，让我哭笑不得。我用的是486，16M内存，1G硬盘，当时同学们的配置都是P166MMX，我安装 一个Windows NT4.0需要一个通宵，编译一个BC5.0向导生成的程序需要近两个小时，我的显示器是个二手的，辐射非常大，开机屏幕冒火花，看起来很酷的：），有一次程序写的太久，觉得怎么白色的编辑器背景变成了紫色，以为显示器坏了，后来才发现眼睛不行了，不过说来也奇怪，到今天我的视力还能保持1.5，真是个奇迹。但是就是那台破机器陪伴了我两年，让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用，据她说一天她正打的开心，一股青烟夹着火苗从显示器钻出来，之后它才寿终正寝。 大三假期找了个机会在一个计算机研究所实习，与其说实习不如说是做义工，工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大，让我早一步了解了社会，刚去的时候我当然是一窍不通，在那里我熟悉了网络，学会了Delphi和Oracle。由于工作很认真，得到了比较好的评价，在一位长者的引荐下，我开始和他们一起做项目，这使我在大三大四就有了自己的收入，大四又找了两家MIS公司兼职，虽然钱不多，但是在学生期间有1000多的收入我已经非常满足了，我终于用自己赚的钱把计算机换了。大四下开始找工作，这时我的工作经验已经比较多（当然现在想想非常幼稚），开始听父母的想去那个研究所， 实习过那个部门也希望我能去，但是不知道为什么最后不了了之，这种单位就是比较官僚，我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间，做过了各种MIS，从煤气、烟厂、公安、铁路、饮食到高校，什么有钱做什么，工作也很辛苦，经常加班和熬通宵，从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感，觉得自己还不错，现在想想真是很肤浅。 刚走上工作岗位的学生很容易被误导，各种开发工具让人眼花缭乱，同时也觉得很受公司器重，但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要，多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗，国内又有几个公司能够做的很到位很规范？我是ISO9000内审员，也在Rational公司受过多次培训，拿了4个证书，还有一个公司让我去做 CMM。这些我听过很多，但是很多事情到国内就变了性质，一个公司不是通过了ISO9000或者CMM就能规范了，我现在在一家有几十年历史的外企工作，里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生，几乎不可能在很短的时间掌握系统分析和设计，面向对象、UML只是一个工具，关键是人本身的思想，不是说你熟悉了C++、Rose就能够做出好的设计，相反如果你具备了很高的素质，你可以用C写出比别人用C++更加模块化的程序。 话说远一些，国内软件开发行业有一个怪圈，很多人觉得VC &#62; Delphi &#62; VB，真是很搞笑。这几个软件我都做过开发，说白了他们都是工具，应该根据应用的需要选择采用哪个，而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话，只能说明你很浅薄。如果说层次，那么这些工具都不上层次，因为它们用来用去都是一些系统的API，微软的朋友不会因为你记住他们多少个 API或者多少个类就会觉得你很了不起，你永远只是他们的客户，他们看重的是你口袋里的银子。我也做过系统内核，我也封装过很多API，同样我也不会看重那些使用这些API做二次开发的客户，除非他能够作出自己独到的设计。 至于有人认为C++ &#62; C那更是让人笑掉大牙，不妨你去打听一下，现在有几个操作系统内核是用C++写的，又有几个实时系统用的是C++，当然我也不是说C++不好，但是目前的内核和实时系统中C++还无法与C匹敌，至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么工具和语言，而在于你干什么工作。你的设计体现了你的技术层次。 这样干了一年我觉得非常苦闷，做的大多 数都是熟练工种的活，个人技术上没有太多 的提高也看不到方向。所以决定离开这个城市去上海，寻求更好的发展，并且打算放弃我以前的MIS转到通信行业。 写到这里不能不提到我女朋友，我们是在来上海前半年认识的，她大四在我公司实习，公司派她给我写文档，我们的感情发展的很快。她告诉我很多事情，她家原本是改革开放的第一批暴发户，她母亲爱打牌，输掉了几百万，还欠了很多债，她有男朋友，但是她对他没有感情，只因为他给了她母亲两万多块钱，后来还强迫她写了四万块的借条，她男朋友背叛过她并且不止一次打她，现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师！她母亲把父亲给她的学费花了，因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱，我拿出了自己的一点积蓄并且跟朋友们接了一些，替她交了学费并给她母亲看病（后来才知道看病的钱又不知所终，就连她母亲是不是有病我都不知道，但她也是没有办法）。这个时候我家知道了一些事情，坚决反对我和她在一起，她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市，并且瞒着我们家。由于时间仓促，我只准备了4000块钱，她仅有的几百块钱也被她母亲要去了，我买了三张票，一张是中午的，两张是晚上的，中午我的家人把我送上船，他们一离开我就下了船，我和她乘坐晚上的船离开了这个我和她生活了很多年的城市，带走的只是一身债务。没有来过上海的我们两个性倔强，都不愿意去麻烦同学和朋友。来到上海是傍晚6点半，我们都不知道该去哪里，我们找了一个20块钱的旅馆，这个房间连窗户都没有，7月份的天气酷热难耐，房间里非常闷热。第二天我们开始租房子，因为身上的钱不多，我们基本都是步行，花了一个星期时间，不知道在浦东转了多少圈后找到了一个400块的房子，但是我们都不了解上海是付三压一，还要付半个月的中介费，买了一些锅碗瓢盆后，我们身上只有800块钱了，工作都还没有着落，这800块钱要支持到我们拿到第一个月工资，为了省钱我们自己做饭，每天买菜只花两块钱，她非常喜欢吃（也可能她在大学经常挨饿的愿意），看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她，经常打电话来骚扰，并且来上海看她，还说了不少恐吓她的话，她过于善良，说他以前毕竟帮助过她，叫我不要与他一般见识。以后的每天在家就是苦等面试通知，原本我想迅速找一家MIS公司解决眼前的困难，但是她坚持让我不要放弃自己的理想，终于功夫不负有心人，我找到了一家通信公司，4000块的工资虽然赶不上MIS公司给我开出的价位，但也够在上海生存。她也找到了工作，第一天上班她哭了，这是她来上海第一次流泪，我心里很难受也很感动。 由于是全新的行业，我把自己降到了零点，我学的VC、Delphi、数据库派不上用场，摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退路，于是拼命的学习，我把自己当做一个应届毕业生一样，一分努力一分收获，半年过去我终于熟悉了工作，并且得到了公司的表彰，薪水也加了一级。后面的日子里我们省吃俭用，把欠朋友的1万多块钱还了，日子终于上了正轨。这时女朋友告诉我她想考研究生，我也很支持，于是她辞职在家备考。 另外，在这里我要感谢我的ProjectManager，他原来是一个大通信公司的产品经理，对人非常和善，我从他那里学到了很多知识，而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件，由于代码量不算太小（5万行），资料和文档都不齐全，我维护起来非常吃力，所以想重新把它做一遍，公司领导不太支持，可能觉得工作量太大，但是他极力支持我，私下里他让我放手去做，我的维护工作他挤时间做。在他的支持下，我花了半年时间完成了接入服务器的软件，并且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统设计、驱动开发、TCP/IP和很多通信的知识，我花了一年时间终于使自己从MIS开发转到了通信行业，并且站稳了脚跟。我的开发大量是对硬件的直接操作，不再受微软的操作系统，VC、Delhpi这些开发工具的约束，我终于看到了另外一片天空。 我做事情喜欢追根问底，随着开发的深入，软件开发与硬件联系越来越紧密，硬件知识的匮乏又对我的发展产生了障碍，而且芯片技术基本上掌握在国外公司的手里，这对做系统级设计是一个非常大的制约，一个新产品出来，第一道利润（也往往是最丰厚的利润）常常都被IC公司如Intel、Motorola赚去了，国内的厂商只能喝点汤。所以我决心解决自己的硬件技术障碍，并打算离开通信行业，进入IC设计相关领域。 当然我明白如果我对硬件了解的非常少，没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础，学一些相关知识为以后做准备。就像我开始从MIS转到通信一样，我看过大量通信方面的书，并且给一个ISP做过RADIUS计费分拣台，在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的，有不少PCB Layout硬件人员，平常我就注意向他们学习，由于我做的是软件，在公司看硬件资料不好意思，所以开始只好在家看，刚来上海工作我连续一年都在加班，后来不加了，因为我要挤出时间学习，通常我12点左右睡，第二天5点半起，我上班比较早，地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的，有些实在不懂的问题就积累起来问硬件人员，他们的帮助使我学习进度快了很多，因为在没有人点拨的情况下自学，我的一半时间是花在解决疑难问题上，但这种问题经常是别人的一句话就可以让我豁然开朗，我非常庆幸我有这样的学习环境。在后面的一年里，我学会了看硬件原理图，学会了简单的硬件设计（模拟电路方面还有不小的差距），事情就是这样的，当你安安份份做软件，别人永远认为你是软件开发人员，在你开始学习硬件时别人未必会认同，有位中兴通讯的朋友还对我说过，一个人不可能把所有东西都学完。我也明白这一点，但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的，同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看，没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD（软交换的终端设备）系统方案，包含软硬件的选型、设计等内容，这个方案得到了公司和同事们的认同，让我感到非常欣慰。 技术是相辅相成的，当我的硬件有了一定的进步后，我的软件设计也有了很大的提高，我可以从更深层次理解问题，我做的接入服务器CPU是Motorola PowerPC860，熟悉的朋友都知道860 QMC与软件的批量数据传输通常采用BD表的方式，硬件人员做驱动的时候习惯采用固定BD表，每接收或发送数据都将数据从BD表拷贝到用户Buffer，或从用户Buffer拷贝到BD表，由于理解的比较深入，我自己重新实现了这个过程，采用动态BD表的方式，驱动从一个网口接收数据，提交给我的软件进 &#169; 2009, chenzhiwei.net. 版权所有. 本文永久链接：http://chenzhiwei.net/2009/09/a-programmer-s-hard-struggle/随机日志Ubuntu+WinXP双系统修复grub2引导的方法Linux下的NFS,VSFTP,Samba的简单配置[转]哈佛大学图书馆的20条经典训诫C语言中的static关键字Google Short Links网址缩短服务]]></description>
			<content:encoded><![CDATA[<p><span style="color:#0000ff;">PS：此文为多年前的一位程序员所写，相信很多人都看过，但是我知道肯定还有很多人没有看过，所以就让没看过这篇文章的同学看看这位前辈是怎么奋斗的吧！希望此文能对广大程序员有所启发，共勉！<br /> 前几天我的一个老师把这篇文章发给了我，我一直都没有看，今天一口气把它看完了，自己太渺小了。。。</span><br /> 这些日子我一直在写一个实时操作系统内核，已有小成了，等写完我会全部公开，希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向  ，所以把我的经历写出来与大家共勉，希望能给刚如行的朋友们一点点帮助。一转眼我在IT行业学习工作已经七年多了，这期间我做过网页，写过MIS、数据库，应用程序，做过通信软件、硬件驱动、协议栈，到现在做操作系统内核和  IC相关开发，这中间走了很多弯路，也吃了不少苦。</p>
<p><span id="more-20001"></span>
<p>我上的是一个三流的高校，就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了，大一开学前的假期我就开始了学习，记得我买的第一本书是《计算机基础DOS3.0》，大家别吓着了，其实当时已经普及了DOS6.22了，只是我在书店里看到了DOS4.0，5.0，6.0的书，以为像英语那样是第四、五、六册，记得当时到处找DOS1.0，现在想想也幸好我没有找到：）开学前我学完了  PASCAL，那时既没有计算机也没有人可以请教，我连程序是什么的概念都没有，只好死记硬背代码，然后拿纸写，我一直到大三才有了一台486，在这之前用纸写了多少程序我也记不清楚了，只知道最长的一个我拿A4大小的草稿纸写了30  多页，我的C语言、C++  、VC都是在这样的条件下入门的。所以说条件是可以克服的，希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房，我的心情激动的无与伦比，但是一上机我立刻傻了眼，他们用的是英文版的Win3.1，我的那点DOS知识都见了鬼，上机提心吊胆的一阵瞎摸，一不小心把Word弄成了全屏，怎么都还不了原，当时真是心急如焚，我以为机器被我弄坏了。第一个C语言程序，就是那个经典的HelloWorld，我调了几个星期，上机机会非常少，也没有书告诉我开发环境（TC2.0）需要设置，而且开始我都不知道有编译器，我甚至自作聪明把写好的程序扩展名从.c改成.exe，结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了，大一下四门课挂了彩，三类学校就是这点好，挂上一二十门也照样毕业。不过扯远点说，我那么刻苦都及不了格，可见我们国家的计算机教育有多死板。</p>
<p>大二准备学VC和BC，当时难以取舍，后来选了VC，不为别的，只为书店里两本书，VC  那本便宜6块钱。我的努力在班上无人能及，学的日夜不分，大三有了计算机后更是如此，很多次父亲半夜教训我说我不要命了，我一直觉得自己基础差，记忆又不行，条件也不好，所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算机的天赋，让我哭笑不得。我用的是486，16M内存，1G硬盘，当时同学们的配置都是P166MMX，我安装  一个Windows  NT4.0需要一个通宵，编译一个BC5.0向导生成的程序需要近两个小时，我的显示器是个二手的，辐射非常大，开机屏幕冒火花，看起来很酷的：），有一次程序写的太久，觉得怎么白色的编辑器背景变成了紫色，以为显示器坏了，后来才发现眼睛不行了，不过说来也奇怪，到今天我的视力还能保持1.5，真是个奇迹。但是就是那台破机器陪伴了我两年，让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用，据她说一天她正打的开心，一股青烟夹着火苗从显示器钻出来，之后它才寿终正寝。</p>
<p>大三假期找了个机会在一个计算机研究所实习，与其说实习不如说是做义工，工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大，让我早一步了解了社会，刚去的时候我当然是一窍不通，在那里我熟悉了网络，学会了Delphi和Oracle。由于工作很认真，得到了比较好的评价，在一位长者的引荐下，我开始和他们一起做项目，这使我在大三大四就有了自己的收入，大四又找了两家MIS公司兼职，虽然钱不多，但是在学生期间有1000多的收入我已经非常满足了，我终于用自己赚的钱把计算机换了。大四下开始找工作，这时我的工作经验已经比较多（当然现在想想非常幼稚），开始听父母的想去那个研究所，  实习过那个部门也希望我能去，但是不知道为什么最后不了了之，这种单位就是比较官僚，我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间，做过了各种MIS，从煤气、烟厂、公安、铁路、饮食到高校，什么有钱做什么，工作也很辛苦，经常加班和熬通宵，从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感，觉得自己还不错，现在想想真是很肤浅。</p>
<p>刚走上工作岗位的学生很容易被误导，各种开发工具让人眼花缭乱，同时也觉得很受公司器重，但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要，多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗，国内又有几个公司能够做的很到位很规范？我是ISO9000内审员，也在Rational公司受过多次培训，拿了4个证书，还有一个公司让我去做  CMM。这些我听过很多，但是很多事情到国内就变了性质，一个公司不是通过了ISO9000或者CMM就能规范了，我现在在一家有几十年历史的外企工作，里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生，几乎不可能在很短的时间掌握系统分析和设计，面向对象、UML只是一个工具，关键是人本身的思想，不是说你熟悉了C++、Rose就能够做出好的设计，相反如果你具备了很高的素质，你可以用C写出比别人用C++更加模块化的程序。</p>
<p>话说远一些，国内软件开发行业有一个怪圈，很多人觉得VC &gt; Delphi &gt;  VB，真是很搞笑。这几个软件我都做过开发，说白了他们都是工具，应该根据应用的需要选择采用哪个，而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话，只能说明你很浅薄。如果说层次，那么这些工具都不上层次，因为它们用来用去都是一些系统的API，微软的朋友不会因为你记住他们多少个  API或者多少个类就会觉得你很了不起，你永远只是他们的客户，他们看重的是你口袋里的银子。我也做过系统内核，我也封装过很多API，同样我也不会看重那些使用这些API做二次开发的客户，除非他能够作出自己独到的设计。</p>
<p>至于有人认为C++ &gt;  C那更是让人笑掉大牙，不妨你去打听一下，现在有几个操作系统内核是用C++写的，又有几个实时系统用的是C++，当然我也不是说C++不好，但是目前的内核和实时系统中C++还无法与C匹敌，至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么工具和语言，而在于你干什么工作。你的设计体现了你的技术层次。</p>
<p>这样干了一年我觉得非常苦闷，做的大多<br />
数都是熟练工种的活，个人技术上没有太多  的提高也看不到方向。所以决定离开这个城市去上海，寻求更好的发展，并且打算放弃我以前的MIS转到通信行业。</p>
<p>写到这里不能不提到我女朋友，我们是在来上海前半年认识的，她大四在我公司实习，公司派她给我写文档，我们的感情发展的很快。她告诉我很多事情，她家原本是改革开放的第一批暴发户，她母亲爱打牌，输掉了几百万，还欠了很多债，她有男朋友，但是她对他没有感情，只因为他给了她母亲两万多块钱，后来还强迫她写了四万块的借条，她男朋友背叛过她并且不止一次打她，现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师！她母亲把父亲给她的学费花了，因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱，我拿出了自己的一点积蓄并且跟朋友们接了一些，替她交了学费并给她母亲看病（后来才知道看病的钱又不知所终，就连她母亲是不是有病我都不知道，但她也是没有办法）。这个时候我家知道了一些事情，坚决反对我和她在一起，她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市，并且瞒着我们家。由于时间仓促，我只准备了4000块钱，她仅有的几百块钱也被她母亲要去了，我买了三张票，一张是中午的，两张是晚上的，中午我的家人把我送上船，他们一离开我就下了船，我和她乘坐晚上的船离开了这个我和她生活了很多年的城市，带走的只是一身债务。没有来过上海的我们两个性倔强，都不愿意去麻烦同学和朋友。来到上海是傍晚6点半，我们都不知道该去哪里，我们找了一个20块钱的旅馆，这个房间连窗户都没有，7月份的天气酷热难耐，房间里非常闷热。第二天我们开始租房子，因为身上的钱不多，我们基本都是步行，花了一个星期时间，不知道在浦东转了多少圈后找到了一个400块的房子，但是我们都不了解上海是付三压一，还要付半个月的中介费，买了一些锅碗瓢盆后，我们身上只有800块钱了，工作都还没有着落，这800块钱要支持到我们拿到第一个月工资，为了省钱我们自己做饭，每天买菜只花两块钱，她非常喜欢吃（也可能她在大学经常挨饿的愿意），看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她，经常打电话来骚扰，并且来上海看她，还说了不少恐吓她的话，她过于善良，说他以前毕竟帮助过她，叫我不要与他一般见识。以后的每天在家就是苦等面试通知，原本我想迅速找一家MIS公司解决眼前的困难，但是她坚持让我不要放弃自己的理想，终于功夫不负有心人，我找到了一家通信公司，4000块的工资虽然赶不上MIS公司给我开出的价位，但也够在上海生存。她也找到了工作，第一天上班她哭了，这是她来上海第一次流泪，我心里很难受也很感动。<br /> 由于是全新的行业，我把自己降到了零点，我学的VC、Delphi、数据库派不上用场，摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退路，于是拼命的学习，我把自己当做一个应届毕业生一样，一分努力一分收获，半年过去我终于熟悉了工作，并且得到了公司的表彰，薪水也加了一级。后面的日子里我们省吃俭用，把欠朋友的1万多块钱还了，日子终于上了正轨。这时女朋友告诉我她想考研究生，我也很支持，于是她辞职在家备考。</p>
<p>另外，在这里我要感谢我的ProjectManager，他原来是一个大通信公司的产品经理，对人非常和善，我从他那里学到了很多知识，而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件，由于代码量不算太小（5万行），资料和文档都不齐全，我维护起来非常吃力，所以想重新把它做一遍，公司领导不太支持，可能觉得工作量太大，但是他极力支持我，私下里他让我放手去做，我的维护工作他挤时间做。在他的支持下，我花了半年时间完成了接入服务器的软件，并且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统设计、驱动开发、TCP/IP和很多通信的知识，我花了一年时间终于使自己从MIS开发转到了通信行业，并且站稳了脚跟。我的开发大量是对硬件的直接操作，不再受微软的操作系统，VC、Delhpi这些开发工具的约束，我终于看到了另外一片天空。</p>
<p>我做事情喜欢追根问底，随着开发的深入，软件开发与硬件联系越来越紧密，硬件知识的匮乏又对我的发展产生了障碍，而且芯片技术基本上掌握在国外公司的手里，这对做系统级设计是一个非常大的制约，一个新产品出来，第一道利润（也往往是最丰厚的利润）常常都被IC公司如Intel、Motorola赚去了，国内的厂商只能喝点汤。所以我决心解决自己的硬件技术障碍，并打算离开通信行业，进入IC设计相关领域。</p>
<p>当然我明白如果我对硬件了解的非常少，没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础，学一些相关知识为以后做准备。就像我开始从MIS转到通信一样，我看过大量通信方面的书，并且给一个ISP做过RADIUS计费分拣台，在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的，有不少PCB  Layout硬件人员，平常我就注意向他们学习，由于我做的是软件，在公司看硬件资料不好意思，所以开始只好在家看，刚来上海工作我连续一年都在加班，后来不加了，因为我要挤出时间学习，通常我12点左右睡，第二天5点半起，我上班比较早，地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的，有些实在不懂的问题就积累起来问硬件人员，他们的帮助使我学习进度快了很多，因为在没有人点拨的情况下自学，我的一半时间是花在解决疑难问题上，但这种问题经常是别人的一句话就可以让我豁然开朗，我非常庆幸我有这样的学习环境。在后面的一年里，我学会了看硬件原理图，学会了简单的硬件设计（模拟电路方面还有不小的差距），事情就是这样的，当你安安份份做软件，别人永远认为你是软件开发人员，在你开始学习硬件时别人未必会认同，有位中兴通讯的朋友还对我说过，一个人不可能把所有东西都学完。我也明白这一点，但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的，同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看，没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD（软交换的终端设备）系统方案，包含软硬件的选型、设计等内容，这个方案得到了公司和同事们的认同，让我感到非常欣慰。</p>
<p>技术是相辅相成的，当我的硬件有了一定的进步后，我的软件设计也有了很大的提高，我可以从更深层次理解问题，我做的接入服务器CPU是Motorola  PowerPC860，熟悉的朋友都知道860  QMC与软件的批量数据传输通常采用BD表的方式，硬件人员做驱动的时候习惯采用固定BD表，每接收或发送数据都将数据从BD表拷贝到用户Buffer，或从用户Buffer拷贝到BD表，由于理解的比较深入，我自己重新实现了这个过程，采用动态BD表的方式，驱动从一个网口接收数据，提交给我的软件进</p>
<p style="font-weight: bold;">&copy; 2009, <a href="http://chenzhiwei.net">chenzhiwei.net</a>. 版权所有.  <br />本文永久链接：<a title="[转]一个程序员的奋斗历程" href="http://chenzhiwei.net/2009/09/a-programmer-s-hard-struggle/">http://chenzhiwei.net/2009/09/a-programmer-s-hard-struggle/</a></p><hr /><div  class="related_post_title">随机日志</div><ul class="related_post"><li><a href="http://chenzhiwei.net/2010/12/change-my-blog-host-space/" title="博客搬家至新VPS">博客搬家至新VPS</a></li><li><a href="http://chenzhiwei.net/2010/04/recommend-to-use-firefox-web-browser/" title="推荐使用火狐浏览器">推荐使用火狐浏览器</a></li><li><a href="http://chenzhiwei.net/2009/03/hardword-roles/" title="[转]哈佛大学图书馆的20条经典训诫">[转]哈佛大学图书馆的20条经典训诫</a></li><li><a href="http://chenzhiwei.net/2009/04/wordpress-comments-reply/" title="wordpress的评论邮件回复功能">wordpress的评论邮件回复功能</a></li><li><a href="http://chenzhiwei.net/2011/03/some-words-related-to-compute-science/" title="这个周接触的几个词语">这个周接触的几个词语</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://chenzhiwei.net/2009/09/a-programmer-s-hard-struggle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

