%$@$@#$幸福的港湾视频$%#@@我能做吗@#$%^! 给您加分哦!

这是昨晚写的博文了,因为PS坏了,相片修改不了。所以没发,可是今晚还是没弄好,只好不改了!
  今晚跟往常一样,在棋宝睡前。我先让她看一下,她的那些小卡片书。从大前天开始她又不爱看动物画册了,所以我给她换成看颜色形状的。前两天给她看这些的时候,她也没什么其它特别的反应,就跟往常一样,不是她指着让我读,就是要我的手指着读给她听!可今晚她的一些表现让我想了半天都想不明白。就在她睡着的时候我终于想明白了!
 从花果山买这对母女猴回来后,棋宝就整天抱着它们!
还学着我哄她睡觉的样子来哄猴子,笑死我和太阳爸爸!
看她抱着猴妈与猴宝宝在看电视,专注的样子!
  当我指着黄色读给她听时,她做出了吃东西的动作,我没有理会她,因为当时以为她只是在玩而已。
  当我再指着橙色读给她听时,她同样也是做出了吃东西的动作。这会我觉得奇怪了,应该不会饿啊?也不应该会是渴了啊?因为就在10分钟前刚给她吃过东西啊!所以我接着不理继续读下面的颜色!
  当我读到蓝色时,她大声的喊爸爸爸爸......我真的觉得奇怪了。因为太阳爸没在家,她也是知的啊。太阳爸晚上有事。所以也没陪我们去散步了,那时我就已告诉她说晚上爸爸有事没在家,要晚点才能回来啊!我以为她是想爸爸了才喊爸爸的。所以就跟她说,爸爸迟点就会回来!接着往下读!
  当我把一本的颜色都读完时,重复读时,她又做了以上的表现。当时我就在想,今晚棋宝是怎么了。
  棋宝睡着了,我躺在床上想着她刚才的那些表现与颜色有什么关系?!
我的理解是这样的,不知是否正确:
  黄色:是不是我平时给她吃的蛋糕、鸡蛋......都是这个颜色,她看到黄色就想起了这些吃的东西,所以就     很自然的做出了吃东西的动作?!
  橙色:是不是我平时给她吃的橙子、桔子......都是这个颜色,所以她也是很自然的就做起了吃东西的动      作?!
  蓝色:以上这两种还是可以说明的。那看到蓝色喊爸爸,又是什么意思,我想了半天才想起来,太阳爸今天     穿的是蓝色的衣服?!
有是我真的觉得宝宝们真是宇宙中最神奇的小精灵!
发布于日 22:30 |
阅读数(203)
  在我们出游的这两天里,真是阳光灿烂,风和日丽的好日子!能在这样的日子里出游,更是在原本快乐的心情上加分!快乐快乐、开心开心.........
  在4月30日12:30分时,我们快乐快乐、开心开心的到达了花果山!当我们下车时,感觉这里的天气比山东的天气还要好些,根本不用穿太多的衣服。为了让棋宝舒服点,玩得开心点,我给她换了一套轻松点的衣服。当我在给棋宝换衣服时,就来了好几个导游。她们你一句,我一句的开始说着花果山里的一切。可那时我们还没吃中午饭。所以我们就说等我们吃完中午饭再说吧。因为当时我们正在考虑着要不要请导游。
  吃完午饭,我们就开始上山了。太阳爸去买票的同时也看了里面的地图。他说没必要请导游,因为里面的景点不是很多,而且你想去哪个景点你都可以选择坐车或是坐索道。所以最后我们没请导游。到最后也证实了太阳爸的选择是正确的。当我们很想了解这个景点的时候,就停在一些请了导游的游客身边听一会。呵呵,是不是很会省钱啊?!
之所以选择来花果山是因为太阳爸说这里是猴子的“故乡”。而且《西游记》是中国的四大名著之一,不管是大人还是小孩都很爱看这部戏。太阳爸还说等棋宝长大些看这部戏时,放到哪个镜头时,我们可以把相片找出来跟她说。不知那时她是否还有记忆?我相信棋宝长大点,会很开心爸妈带她来过这里。因为在我的记忆中,我们小时都是很爱看这部戏,也特爱将孙悟空、猪八戒等挂嘴边。有时玩大家还自演起来,可是谁都不愿意去演猪八戒。呵呵,这部戏确实令我回想起了童年时许多搞笑的画面。
  里面的景点大体分为下中上三区:下-九龙桥、中-水帘洞、上一玉女峰。
  请欣赏图片吧!@  
        我们刚到花果山的广告牌区,太阳爸说你们娘俩快下车,先留念一张吧!
       那时棋宝还穿着毛衣呢!
 花果山正大门! 
刚睡醒打哈的,呵呵!我一点也不闹哦!
              我们准备坐车到水帘洞了!
         一般人都是先到最高峰玉女峰,再一个景点的往下看。
     可是太阳爸急于想看水帘洞,所以我们先到水帘洞再坐索道上了玉女峰!
           棋宝可是特开心,走路都不正经了,东倒西歪的!
           我特喜欢和女儿在水帘洞洞口照的几张相!
我们一家三口飞跃式的冲进了水帘洞,幸运的是我们娘俩都没淋到,
只有我们可怜的太阳爸为了保护娘俩淋了半边身都湿了。
猴王宝座哦!
这两只可爱的猴子,今年五岁了,超级可爱。
更搞笑的是它们俩一个上早班,一个上晚班!呵呵!
这只是在休息呢!是等会上班的!
这只正在班哦!
我们准备上玉女峰了!
                娘俩的步伐还真够整齐的!
   我们坐在江苏第一高峰上拍照了!海拔625.3米!
    太高了,我们还是坐着吧,站着有点抖!
把这两张放到最后做个总结吧!
虽照得不怎么样,但还是保留着作留念吧!
  这次旅程虽不长短短两天的时间,但我们回到家看了一下里程表总共开了1000公里。真是辛苦太阳爸了,而且在旅途过程中也特别的照顾我们娘俩,不管是吃的还是住的处处都为我们娘俩着想。虽说是自己老公,但能有这样的人关心着,真的是一种幸福!而且至从有了我们的宝贝女儿之后,我们的幸福港湾也越来越幸福了!太阳爸还说等女儿再大点,带我们去更远一点的地方!呵呵,期待我们的下一站旅程。
发布于日 21:27 |
阅读数(353)
&&& 最近的棋棋特爱看动物画册。之前那些画册的动物太少了,所以我又买了两本全是动物的画册给她,每天睡前睡醒都要我拿给她看。而且嘴里老是念着狗狗,牛牛之类的动物名。
&&& 4月29日那天的早上。棋宝跟往常一样,醒过来后,拿着她的动物画册,这个房间走走那个房间走走,嘴里念着狗狗、牛牛......
&&& 那时太阳爸正在刷牙,突然走过来跟我说:&要不我们带女儿去动物园吧&!
&&& 太阳爸的这句话过后,我们家就开始忙了起来。我开始收拾东西,女儿兴奋得直大声叫,真是弄不懂她是真的懂我们要带她出去旅游而开心啊还是看到大人开心她而兴奋?!
&&&&因为我们是没计划的出游,所以开了很多的冤枉路,到了下午才能到动物园!
&&&&我们刚到这个动物园时,给我的感觉就是,要不是为了让女儿更清晰的记住这些动物,我肯定不会进去了。因为里面没多少动物,而且卫生也不好!
&&& 相片太多了,我挑一些自己喜欢的放上来,其余的就放到相册吧!
&&& 棋棋是第一次来肯德基,之前我从没给她吃过这些。
&&& 其实她现也是不会吃这些的,只是拿着一个骨头在乱啃!呵呵!
& 在吃肯德基时,还没到动物园呢?!真是晕死!
终于到动物园了,渴得我不行了,喝了一瓶酸奶,棋宝看了也要喝。
但她拿的其实是空瓶。因为听专家说最好三岁以后再给宝宝喝酸奶,所以平时我几呼都没给她喝~!
我太喜欢棋宝这张相了,好喜欢她这种表情与神态。太可爱了!
爸爸!抱抱,我累了!
像不像超级奶爸?!呵呵!最主要是挎着个包才像!
我们刚到那的时候就看到了孔雀开屏,可是那时距离太远了!拍得不清晰!
桃花朵朵开,呵呵!
我们走了,不看了! &&& 我跟太阳爸都觉得来这个动物园真没意思。因为里面的卫生不好,动物也不多,所以我们的步伐总是很快,除非那个动物棋宝很喜欢看,我们就停留久一点!&
&&& 太阳爸说既然出来了,就再带棋宝去多一个地方吧,而且这个动物园看得这么没意思!我想也是的,加上棋棋又这么听话,我也就答应了!经过我们俩的商量,我们的下一站---江苏-连云港-花果山!
发布于日 12:57 |
阅读数(3541)
发布于日 13:47 |
阅读数(200)
&终于可以坐下来,好好的整理相片和写一下东西了。至从过年到现在,总感觉自己好像都没停过一样,感觉好累、好累!
年初六我们一家三口就开始出门去棋宝外婆家了。本想着自己几年没回家了,想在家里呆久一点,可是没想到棋宝在哪水土不服,呆了20来天又急着飞去太阳爸那了。(月亮妈说了今年一定不跟太阳爸分开了,因为我可怜的棋宝去年太想爸爸!)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&这组相片是除夕夜拍的!
&&&&&&&&&&&&
&年30晚早上,我还在打着点滴呢?!年初一,棋宝就开始流鼻涕涕咳嗽。搞什么都不知了,娘俩的身体都这样,所以也就没什么心情做任何的事情。不过,这些都已过去。现在都已4月份了,时间过得还真是快啊。我这个懒妈妈都没能把宝宝的一些变化记录下来。请原谅我这位身体状况不佳的妈妈!
现在的棋宝可是什么都懂了,你做什么她跟着学什么。你说什么她也跟着学什么。用太阳爸的一句口头禅--精得跟鬼一样(意思就是聪明灵活,请原谅太阳爸的自卖自夸)。
就在上个月我和棋宝在我们小区的楼下玩,遇到了一位邻居的孩子,她家宝宝比棋宝小一个月。当时他和棋宝都在玩。然后这个宝宝就蹲下来尿尿了。也不用他妈妈说什么和做什么。当时我就觉得自己很不称职哦。而且这个宝宝还比棋宝小一个月。我就问她妈妈他是多大的时候会自己蹲下来尿尿的。她说早在一岁的时候。后来,我回家想想,我是不是也该给棋棋训练起来不用纸尿裤了?!想想棋宝都一岁四个月了!看她平时什么都懂了。或许是我自己太懒的原因吧,也一直没给棋宝训练。
想着想着,我和太阳爸带着棋宝去选了一个她自己喜欢的尿盆回来。没想到训练三天就见效果了
。现在的棋宝完全会自己去尿尿和拉大便了。不过有时玩得太开心或是看东西太入迷,也会忘记尿裤子。她第一次尿裤子的时候,是站在那里不动,接着就是哭起来。当时,我根本就不知是什么原因。后来看到地下的一堆水,我才知是她尿裤子了。我可爱的宝贝,也知尿裤子是不对的,所以哭了。
发布于日 19:42 |
阅读数(145)
&     
  最近总是让棋宝给弄得头晕转向的!棋宝在周岁以内我总感觉很好带,所以在之前的博文里我也写过不会把身体累垮之类的话。可是现在看来一个人带孩子,而且是连个接手的人都没有的话,还真的是累得够呛的!因为孩子长大了,有她自己的意愿,而且会走了。很多的事情都不再好像小时候那样让你摆布了!大人觉得她不应该去动的东西,她反而得很好玩!而且我这个人的性格又喜欢整洁!小孩要玩那些东西,对那些东西有好奇心,你总不能不让她玩。所以在这种时候,在保证安全的情况下,我总是无奈的让棋宝玩完了。我再去整理!所以一天下来总感觉有做不完的事一样!
  感觉宝宝的模仿能力真的超强的!棋宝许多的进步与变化。我这个懒妈没来的得记录下来!
     
  因为家里只有我们娘俩,所以每天早上醒过来。我只能把棋宝放在房间里把门关起来(防止她爬到楼梯那),自己再去刷牙洗脸!平时棋宝都不是很愿意自己一个人在房间里,所以都很吵,很会叫!可是有一天我梳洗完了,也没听到她叫一声。当时我很害怕所以脸都没来得及擦干就跑上楼去!我一把门打开,棋宝就给了我一个灿烂的笑容!接着忙她手里的“活”!--把一包大的纸尿裤一片片的往垃圾桶放!我的天啊!好在我房间的垃圾桶都是干净的,从不放湿的东西!而且那天正好洗干净。所以纸尿裤还可以用!回想棋宝为什么会有这样的举动?!可能是平时我把用过的纸尿裤放垃圾桶给她看到了!而且也从那以后,我再也不敢把棋宝一个人放在房间里的了。虽然这次的不是什么坏事,但毕竟提醒了我。现在每天棋宝都是坐在一个小凳子那看着我刷牙洗脸!所以现在的的她也学会了刷牙洗脸!而且是我做这些的同时,也要给她准备牙刷和毛巾!
     
     
     
     
     
  前些天,自己感觉很累,所以就没带棋宝出去外面玩。就在自己家的婴儿房里玩!突然想起棋宝生日时,她的堂姑姑送她的玩具。有个类似钓鱼一样,钓鸭子!我就拿出来和她玩。最初的时候,我也没想过让棋宝学会钓。因为我觉得对于这么小的宝宝做这种精细动作有点难度。只是一心想陪棋宝玩,而且给她找新鲜的东西玩而已。所以我就一直重复的做钓鸭子的动作!玩着玩着!棋宝也就不玩了。她去找别的东西玩了!可是隔天,我再带她到婴儿玩的时候,她就一心的扑在钓鸭子里面,而且学得微妙微翘的!  
发布于日 19:54 |
阅读数(151)
 圣诞节过去了,元旦又马上要到了,可是我的幸福港湾还是没更新,请原谅我这个懒惰的妈妈哦!
  最近总感觉力不从心的,好像怎么都睡不够。所以这些天,只要棋宝睡了,我也抓紧时间去睡!
  孩子一天天长大,面临的问题也天天的变化!之前老是担心棋宝不会爬,怎么还没长牙之类,到现在棋宝爬得很厉害了,牙也长了10颗。又来一些新的担心,就是棋宝到现在还不会真正的独立走!现在已经14个月大了。在上2个月前,棋宝已会独立走2到5步了。可是这些天不知为何一步都不肯走。一走就要抓住我一个手指才可以。为此我咨询了好多个医生与一些朋友。可是大家都说这是属于正常的。也可能是天气太冷的原因。可是当妈的总是那么的期待孩子会走的一天。
  LG跟我们分开又有一个多月了,这些天老是说很想我们娘俩。问我同不同意让他回来。其实我和女儿也很想LG,可是现在离过年也只有一个多月了。我不想让他跑来跑去。加上他一个人开车,我不放心!所以还是没同意思让他回来!让他熬一熬,思念一下也好。呵呵!这些天我老跟他开玩笑,我说你只有一个多月的单身生活了哦。明年我们一家三口就再也不分开了。到时我们娘俩天天黏着你哦!他就说我现在巴不得你们黏着我!还说这些天做梦老梦见我们娘俩!呵呵!我亲爱的太阳爸,你就再熬一下下吧!
  最近很冷,总感觉人不想动!所以也没给棋宝拍照!
发布于日 21:21 |
阅读数(122)
  好久没给棋宝拍照了!可能是天气变冷了,人也跟着懒起来了!电脑都很少上了!前些日子在当当网狂购了很多的书,给棋宝买了不少,也给自己买了一些。现在只要棋宝睡了,我就开始躺在床上蛀书!觉得养成看书的习惯真的很不错。至少可以给女儿一个好的榜样!自己的知识浅薄,为了女儿,自己要多多充电才可以!
  一个星期没看到我的宝贝棋棋的笑容,总感觉缺少了什么一样。今天宝贝笑得很甜,所以拍了一些!
              第一次看到这件衣服的时候就很喜欢!衣服的质量、
            做工都很不错!是网购的,而且是母女装,觉得物有所值!
           就是给宝贝穿有点大!衣服是属于那种短款的!明年穿就正好!
         
       
              妈妈最喜欢带着甜甜笑容的你!我的宝贝!
       
       
          棋宝很喜欢到这家蛋糕玩!每次经过,都要进来玩一会才走!
       
       
       
       
       
       
       
             最喜欢坐到这里往外面看!前面是一面玻璃!
       
       
发布于日 21:49 |
阅读数(162)
  在写完昨天的博文之后,说实在的今天有点不想写了。因为真的不想回忆那些不开心的事,可是又想为女儿记录一下这些。最后想想还是写一下吧。毕竟人生总是会有酸甜苦辣的,既然是自己的所见所闻那就记录一下吧。
  接着昨天的写!
  到第二天早上的8点多,我们一家人去了另一家医院!这里哪里是医院啊,简直就是市场一样,人山人海的!看儿科的人更是多得数不胜数啊!真是纳闷,为什么那么多的宝宝生病啊?!而且一点秩序都没有,这哪是在看病啊,跟赶集差不多!我和婆婆找了个空气好点的地方坐了下来。公公在里面排队。过了大概一个小时左右才到我们看。医生要我们给宝宝去验血和验大便!(这天的棋宝又开始拉肚子了!)当我们去给宝宝抽血时又遇到了一位“好护士”啊。我说:“医生!宝宝要抽血化验”!“小孩的血管很难拿,不知能不能抽得到,要是抽不到我也没办法。烦死人了”!我的天啊,这是什么态度啊!当时,棋宝正在发烧,我要不是为了我的宝贝女儿,我真的很想骂她!正当她为棋宝抽血时,我心疼得不得了了。眼泪情不自禁的流了下来。我可怜的宝贝啊,心疼死妈妈了!大便和血都没有问题!当棋宝打完针后,我们都以为很快就会好了。可是体温一量,又把我们给吓坏了!39度!医生说过二个小时左右一般都会退下去。要是没退的话,就要住院。当时,我们全家都给吓坏了。也不管二个小时后的事了,一下就说我们今晚先住院吧。
  二个小时后,棋宝的确实有退烧了!可是还是拉肚子!所以为了安全起见,我们决定还是住院!在住院部那边我们看到了一件既害怕又令人心疼的事!有一个只有7、8个月大的宝宝给医生打针后,夭折了!所以他们全家人来到这家医院要求赔偿!所以那天晚上整个医院乱成一团!据这家人说这家医院没能给出合理的赔偿,所以他们才来到这里闹的!
  看到这样的事情后,更令我不敢睡觉!我一整晚都没睡。害怕极了,我们一家人商量后,还是换一家医院吧!所以隔天的早上我们又急忙的换了一家更好的医院!而且棋宝的肚子还是没完全好!
  坐了大概一个多小时的车后,我们到达了这家相对比较好的医院!这家医院是市级医院有秩序多了。这里的医生的说法跟之前的医生的说法完全不一样。之前的医生说宝宝拉肚子了,以前的奶粉不能吃要去买腹泻奶粉,所以我们去买了腹泻奶粉。但来到这家医院,医生又说什么样的奶粉都不能吃,最好是三到五天不要吃,平时喝点水和米汤就好。没办法,我们现在在这里看,只能听这个医生的。医生说宝宝现在也没发烧了,你就按我的说法去做。过几天就会好了,叫我们不要住院回家就好。所以我们就回家了并按这个医生的说法去做了。想不到,回家的第三天棋宝的肚子就全好了。唉!总算好了。短短的6天可没把我给折腾坏啊!回想棋宝不能吃奶粉的两天,真的是好像个饿了很久的人一样。因为拉肚子,所以总是不能给她吃得太多,而且喝的是为汤也不压饿。那两天,她看到奶瓶就哭。我也心疼死了!不过一切都过去了。
  总算给写完了,本妈的写作水平可是差得不得了。总感觉写得好乱,呵呵,大家将就看一下就好了!也是为女儿记录一下。我也想快点写完。快点让也这些不开心的事过去!
发布于日 20:59 |
阅读数(112)
& 忙忙碌碌,恍恍惚惚的又过了两个多星期没更新了!在8号那天晚上本想更新的,不巧棋宝突然不舒服起来!这个不舒服可差点把我给吓坏了!棋宝这次的生病让我真正的体会到了,什么叫打在你身,痛在我心!同时在陪伴棋宝生病的这一个星期里,所见所闻让我思索万分!
      (很久没给棋宝拍照了,这些相片是夏天拍的。那时的棋宝圆圆的,穿着肚兜超可爱!)
      &
  出生到8号那天棋宝是13个月13天大,13个月以来,棋宝的身体一直都算很不错的,几途乎不生病!偶尔会有一些小毛病,但几乎都不用去看医生,都是我在家里给她吃点药就好了!而这次跟以往的小毛病截然不同,我几乎察觉不出半点毛病来!自己本是个比较细心的人,这次却是那么的粗心大意。我的一个不留心害得女儿病了整整一个星期!(事后回想很是自责!到现在内心还是很难受!在给女儿换尿布时,大小腿明显的小了很多!痛狠死自己了!)   
      
  8号那天中午,棋宝像往常一样吃了一碗粥!接着我抱她到外面玩,在自己家楼下玩了一会,感觉她有点好像要睡了,所以就抱她上楼睡。她的嘴有点干我就给她喝点水。没想到刚喝完水,她就把刚才喝的一碗粥全都吐了出来!棋宝一直以来都是个很容易吐的小孩,为此我也问过了好多的医生看过很多资料,都说有的小孩天生就这样。也给不出什么合理的答案。所以她吐了,我也没太在意思,而且她各方面都跟以往一样!接着又睡着了!等她睡醒后,以是8号的下午了。给她吃了点饭后接着到我姑家玩!在我姑家玩时,她也吐了一点,可是接着就很开心的玩了起来,所以我还是没太在意!从回家的路上时,她又一次的吐了出来,这一次我可害怕起来了,模模她的额头,看看身体,可是还是没看出有什么不一样。而且她还是跟往常一样开心!所以我又一次的放心!
  从姑家回到自己家时,已是晚上了!所以跟以往一样,睡前我们娘俩都是在床上玩一会才睡的!我床头那里有三本书,一本是三字经,一本是唐诗,还有一本是成语故事!每晚我都会说:“棋棋,去把书拿过来,让妈妈读给你听”!(她一般拿哪本我就读哪本给她听)接着她就会爬过去把书拿过来给我,我就做了一个十指合实的姿势并说谢谢!她也接着学我做这个姿势!很搞笑的,每晚都这样!8号这晚也不例外!读了大概有半小时左右,棋宝就睡着了。可是没想到零晨3点多的时候,我突然感觉到身边好热,一摸,是女儿的头!最初,自己睡得迷迷糊糊,感觉是不是自己弄错了!可是起身一摸,还是很烫。我的天啊,难道女儿发烧了!紧接着给她量体温,38度2!我吓到了,马上给老公打电话!紧接着我公公和婆婆4点时也赶到我家了。我们就去医院了,到了医院,找了半天却找不到一个医生,找到了一个护士,她睡得迷迷糊糊起来,态度很不好。说为什么白天不来,这个时候才来。我当时要不是为了女儿着想真的很想骂她。要是白天我的孩子有这样,我不会来用得着你说!真气人。在医院量的体温却是38度5!护土把医生找过来给我们开了药。我们就回家了。一直到了8点多,棋宝感觉还是很烫。所以紧接着,我们又去了另一家大的医院!这家医院离我家比较远!    
  在这家医院里发生的一切更是“精彩”明天继续!
发布于日 21:31 |
阅读数(122)
&&&&&&&&8&&&&&&&&&nbsp&&&页码:8/13
最近来访我
我最近看过
显示全部&&
显示全部&&
文章数量:122
评论数量:23
访问数量:122519IBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
更好地理解 UNIX® 用户输入的这些 “奇怪的” 字符。学习如何在 UNIX 中使用管道、重定向、操作符等特性。
, 国家数据中心经理, IBM
Adam Cormany 是一位 UNIX 系统工程师,从事 AIX、Solari 和 Red Hat Linux 管理已有 10 多年。他是一位 pSeries® AIX 系统管理方面的 IBM eServer® 认证专家。除管理外,Adam 还在 BASH、CSH 和 KSH 的 Shell 脚本编写以及 C、PHP 和 Perl 编程方面具有渊博的知识。
现在,您已经在 IBM® AIX® 上工作了一段时间了。您已经学习了几个基本命令,能够在目录结构中移动、创建和修改文件、查看正在运行的进程以及管理用户和系统。这很不错,但是您希望了解 UNIX® 管理员输入的命令是什么意思。这些命令中包含许多奇怪的符号。在本文中,了解 |、&、&&、&、&&、[[ 和 ]] 等符号在 UNIX 和 Linux® 中的意思,以及如何使用 &&、||、&、&= 和 != 操作符。
管道如果您熟悉 UNIX,那么管道(或 pipe)会是每天都要接触到的东西。管道最初是由 Malcolm McIlroy 开发的,可以使用管道把一个命令的标准输出(stdout)定向到下一个命令的标准输入(stdin),这样就形成了连续执行的命令链。可以在一个命令行上使用多个管道。在许多时候,一个命令的 stdout 用作下一个命令的 stdin,第二个命令的 stdout 又被重定向到另一个命令的 stdin,依此类推。
例如,在排除故障或执行日常检查时,大多数 UNIX 管理员首先做的事情之一是查看系统上当前正在运行的进程。 演示这样的检查。
清单 1. 日常进程检查示例# ps –ef
0:05 /etc/init
0:00 /usr/sbin/syslogd
0:00 /usr/lib/errdemon
- 23:55 /usr/sbin/syncd 60
0:00 /usr/ccs/bin/shlap64
0:24 /usr/lpp/X11/bin/X -x abx
-x dbe -x GLX -D /usr/lib/X11//rgb -T -force :0 -auth /var/dt/A:0-SfIdMa
0:00 /usr/lib/methods/ssa_daemon -l ssa0
0:01 sendmail: accepting connections
0:00 /usr/dt/bin/dtlogin -daemon
- 20:22 dtgreet
0:00 dtlogin &:0&
0:07 /usr/atria/etc/lockmgr
-a /var/adm/atria/almd -q 1024 -u 256 -f 256
0:01 /usr/sbin/cron
0:04 /usr/sbin/portmap
0:00 /usr/sbin/qdaemon
0:00 /usr/sbin/inetd
0:03 /usr/sbin/xntpd
0:19 /usr/sbin/snmpmibd
0:21 /usr/sbin/aixmibd
0:20 /usr/sbin/hostmibd
7:46 /usr/sbin/muxatmd
0 11:00:27
0:00 /usr/sbin/rpc.mountd
0:00 /usr/sbin/biod 6
0:00 /usr/sbin/nfsd 3891
0:05 /bin/nsrexecd
0 11:00:27
0:00 /usr/sbin/rpc.statd
0 11:00:27
0:00 /usr/sbin/rpc.lockd
0:51 /usr/lib/netsvc/yp/ypbind
0:00 /bin/nsrexecd
0:00 ./mflm_manager
0:00 /usr/sbin/sshd -D
0:00 /usr/sbin/getty /dev/console
0:00 /usr/lpp/diagnostics/bin/diagd
0:00 /usr/sbin/lpd
0:00 /usr/atria/etc/albd_server
0 12:34:56
0:00 rpc.ttdbserver
0:00 rlogind
0 19:29:27
0 19:29:26
0:00 rlogind
3 19:30:34
0:00 ps -ef
0:00 rlogind系统上当前正在运行的进程的列表可能像
这么简单;但是,大多数生产系统运行的进程更多,这会使 ps 的输出更长。为了把这个列表缩短到自己需要的范围,可以使用管道把 ps –ef 的标准输出重定向到 grep,从而搜索自己真正希望看到的结果。 把
产生的进程列表重定向到 grep,搜索字符串 “rpc” 和 “ksh”。
清单 2. 把进程列表重定向到 grep# ps –ef | grep –E "rpc|ksh"
0 11:00:27
0:00 /usr/sbin/rpc.mountd
0 11:00:27
0:00 /usr/sbin/rpc.statd
0 11:00:27
0:00 /usr/sbin/rpc.lockd
0 12:34:56
0:00 rpc.ttdbserver
0 19:29:27
0 19:52:20
0:00 grep -E rpc|ksh当多次把 stdout 重定向到 stdin 时,管道的使用方法可以很复杂。在下面的示例中,扩展了前面的 ps 和 grep 示例,把它的 stdout 重定向到另一个 grep,其作用是排除包含 “grep” 或 “ttdbserver” 的字符串。当最后的 grep 操作完成时,再次使用管道把 stdout 重定向到一个 awk 语句,其作用是输出进程标识符(PID)大于 200,000 的所有进程:
# ps –ef | grep –E "rpc|ksh" | grep -vE "grep|rpc.ttdbserver" |
awk -v _MAX_PID=200000 '{if ($2 & _MAX_PID) {print "PID for
process",$8,"is greater than", _MAX_PID}}'
PID for process /usr/sbin/rpc.statd is greater than 200000
PID for process /usr/sbin/rpc.lockd is greater than 200000
PID for process -ksh is greater than 200000 通过图形说明命令的 stdout 重定向到后续命令的 stdin 的次序。
图 1. 管道示例用 &、&&、& 和 && 执行数据重定向通过命令行界面(CLI)执行命令的另一个重要方面是,能够把各种输出写到一个设备,或者把来自另一个设备的输入读取到命令中。要想写一个命令的输出,需要在执行的命令后面加上大于号(& 或 &&)和所需的目标文件名或设备。如果目标文件不存在,而且您对目标目录有写权限,那么 & 和 && 会创建这个文件并根据您的 umask 设置权限,然后把命令的输出写到刚创建的文件中。但是,如果这个文件存在,& 会尝试打开文件并覆盖整个内容。如果希望在这个文件中追加内容,那么只需使用 &&。可以认为它的作用是把左边命令的输出数据流移动到右边的目标文件中(即 &cmd& -&
&output& -& &file&)。
下面的示例执行 “” 一节中的 ps –ef 示例,并把输出重定向到文件 ps_out:
# ps –ef | grep –E "rpc|ksh" & ps_out下面的代码执行前面扩展的管道示例并把输出重定向到同一个文件(ps_out),但是追加到当前数据后面:
# ps –ef | grep –E "rpc|ksh" | grep -vE "grep|rpc.ttdbserver" |
awk -v _MAX_PID=200000 '{if ($2 & _MAX_PID) {print "PID for
process",$8,"is greater than", _MAX_PID}}' && ps_out 给出前两个重定向的输出。清单 3. 重定向的输出# cat ps_out
0 11:00:27
0:00 /usr/sbin/rpc.mountd
0 11:00:27
0:00 /usr/sbin/rpc.statd
0 11:00:27
0:00 /usr/sbin/rpc.lockd
0 12:34:56
0:00 rpc.ttdbserver
0 19:29:27
0 19:52:20
0:00 grep -E rpc|ksh
PID for process /usr/sbin/rpc.statd is greater than 200000
PID for process /usr/sbin/rpc.lockd is greater than 200000
PID for process -ksh is greater than 200000当只使用 & 重定向输出时,只重定向命令的 stdout。但是,除了 stdout,还有 stderr 输出:前者表示为 1,后者表示为 2。在 UNIX 中输出重定向没有区别。只需在 & 前面加上所需的输出类型(例如,1&、2&),告诉 shell 要把输出路由到哪里。
尝试列出 fileA.tar.bz2 和 fileC.tar.bz2。但是,如第一个命令(ls)所示,fileC.tar.bz2 不存在。好在可以把 stdout 和 stderr 分别重定向到 ls.out 和 ls.err,这样就能够看到错误消息。
清单 4. 列出文件 fileA.tar.bz2 和 fileC.tar.bz2# ls
fileA.tar.bz2
fileAA.tar.bz2
fileB.tar.bz2
fileBB.tar.bz2
# ls fileA.tar.bz2 fileC.tar.bz2 1& ls.out 2& ls.err
# cat ls.out
fileA.tar.bz2
# cat ls.err
The file fileC.tar.bz2 does not exist.在 AIX 中,对 stdout 和 stderr 使用 & 和 && 时应用相同的规则。例如,以后的测试可以使用相同的输出文件,见 。
清单 5. 使用输出文件进行以后的测试# ls fileB.tar.bz2 fileD.tar.bz2 1&& ls.out 2&& ls.err
# cat ls.out
fileA.tar.bz2
fileB.tar.bz2
# cat ls.err
The file fileC.tar.bz2 does not exist.
The file fileD.tar.bz2 does not exist.有时候,可能需要把 stdout 和 stderr 写到同一个文件或设备。这有两种方法。第一种方法是把 1& 和 2& 重定向到同一个文件:
# ls fileA.tar.bz2 fileC.tar.bz2 1& ls.out 2& ls.out
# cat ls.out
fileA.tar.bz2
The file fileC.tar.bz2 does not exist.第二个方法更简单更快速,有经验的 UNIX 用户更喜欢采用这种方法:
# ls fileA.tar.bz2 fileC.tar.bz2 & ls.out 2&&1
# cat ls.out
fileA.tar.bz2
The file fileC.tar.bz2 does not exist.我们分解这个语句。首先,执行 ls fileA.tar.bz2 fileC.tar.bz2。然后使用 & ls.out 把 stdout 重定向到 ls.out,使用 2&&1 把 stderr 重定向到前面重定向的 stdout(ls.out)。
请记住,可以把输出重定向到文件和其他设备。可以把数据重定向到打印机、软盘、终端类型(TTY)以及各种其他设备。例如,如果希望把一个消息发送给所有会话(或 TTY)上的某个用户,那么只需循环处理 who 并把一个消息重定向到 TTY(如果您有足够的权限的话),见 。
清单 6. 把消息重定向到一个 TTY# for _TTY in 'who | grep "cormany" | awk '{print $2}''
_TTY="/dev/${_TTY}"
echo "Sending message to cormany on ${_TTY}"
echo "Test Message to cormany@${_TTY}" & ${_TTY}
Sending message to cormany on /dev/pts/13
Test Message to cormany@/dev/pts/13
Sending message to cormany on /dev/pts/14stdin 而不是 stdout尽管使用 & 和 && 对于大多数人是一个相当容易掌握的概念,但是有的人在使用小于号(& 和 &&)时常常有困难。在考虑 & 和 && 时,认为它们把左边命令的输出数据流移动到右边的目标文件中,这样最容易理解。同样的方法也适用于 & 和 &&。在使用 & 时,本质上是用一个已经提供的 stdin 执行一个命令。也就是说,把已经提供的数据提供给左边的命令作为 stdin(即 &cmd& &- &data&)。
例如,假设希望把一个包含 ASCII 文本文件的电子邮件发送给另一个用户。可以使用管道把 cat 的 stdout 重定向到 mail 的 stdin(即 cat mail_file.out | mail –s "Here's your E-mail!" ),也可以把文件的内容重定向到 mail 命令的 stdin:
# mail –s "Here's your E-mail!"
& mail_file.out使用 &&(也称为 here-document)可以节省格式化时间,并且使命令执行的处理更容易。通过使用 &&,文本字符串被重定向到执行的命令作为 stdin,但是可以继续输入信息,直到到达终止标识符。只需输入命令,输入 && 和终止标识符,然后输入需要的任何内容,最后在一个新行上输入终止标识符。通过使用 here-document,可以保留空格、换行等。
例如,UNIX 必须单独处理下面五个 echo 语句:
# echo "Line 1"
# echo "Line 2"
# echo "Line 3"
# echo "Line 4"
# echo "Line 5"
Line 5可以用以下代码替换多个 echo 语句,UNIX 只需处理一次执行:
# cat && EOF
Line 5还可以使用制表符让 shell 脚本中的内容更整洁一点,这只需要在 && 和终止标识符之间放上一个连字符(-):
# cat &&- ATC
Line 5 给出的示例演示如何结合使用本文到目前为止讨论的东西。
清单 7. 组合 CLI# cat redirect_example
#!/usr/bin/ksh
cat &&- ATC | sed "s/^/Redirect Example =& /g" && atc.out
This is an example of how to redirect
stdout to a file as well as pipe stdout into stdin
of another command (i.e. sed), all done inside
a here-document.
ATC现在,看看关于重定向和管道的脚本。# ./redirect_example
# cat atc.out
Redirect Example =& This is an example of how to redirect
Redirect Example =& stdout to a file as well as pipe stdout into stdin
Redirect Example =& of another command (i.e. sed), all done inside
Redirect Example =& a here-document.
Redirect Example =&
Redirect Example =& Cool eh?子 shell有时候,需要一起执行几个命令。例如,如果希望在另一个目录中执行某一操作,可以使用
中的代码。
清单 8. 同时执行几个命令# pwd
/home/cormany
# cd testdir
# tar –cf ls_output.tar ls.out?
/home/cormany/testdir这是有效的,但是要注意,在执行这些步骤之后,您就不再位于原来的目录中了。通过把这些命令放在它们自己的子 shell 中,它们会作为子 shell 的实例执行。 演示如何使用子 shell 执行相同的代码。
清单 9. 使用子 shell 同时执行几个命令# pwd
/home/cormany
# ( tar -cf ls_output.tar ls.out?)
/home/cormanytest 命令、[ ] 和 [[ ]]在编写 shell 脚本或用任何现代语言编写程序时,运算表达式或值的能力都很重要。UNIX 一直通过 test 命令提供这一功能。正如 test 的手册页指出的,test 命令运算表达式参数的值,如果表达式的值是 True,就返回零(True)退出值。关于 test 的定义和所有可用条件的更多信息,请参见 test 手册页。
要想使用 test 命令,只需给这个命令提供适当的标志和文件名。当 test 运算完表达式时,返回到命令提示,可以在这里检查返回码,见 。
清单 10. 检查返回码# ls –l
-rwxr-xr-x
786 Feb 22 16:11 check_file
-rw-r--r--
0 Aug 04 20:57 emptyfile
# test -f emptyfile
# test -f badfilename
1根据定义,如果表达式值是 True,那么 test 返回零退出值,否则返回非零退出值(即 1)。在
中,找到了文件 emptyfile,所以 test 返回 0;但是没有找到文件 badfilename,所以返回 1。
使用 test 的另一种方法是把要运算的表达式放在单层方括号([ ])中。使用 test 命令或把它替换为 [ ] 会返回相同的值:
# [ -f emptyfile ]
# [ -f badfilename ]
1使用单层方括号([ ])还是双层方括号([[ ]])是个人习惯问题,实际上取决于您如何学习命令和 shell 脚本编程。但是请记住,这两者之间有一些差异。尽管 [ ] 和 [[ ]] 在运算期间使用相同的测试操作符,但是它们使用不同的逻辑操作符。
操作符在 ksh(AIX 中使用的默认 shell)中,以及 UNIX 和 Linux 使用的其他 shell 中,一定要知道如何使用测试、逻辑和替换操作符。
测试操作符在编写 shell 脚本时,测试操作符对于检查错误和检查文件状态很重要。下面只是可以在 ksh 和其他标准 UNIX shell 中使用的一部分测试操作符:
-d &file&:&file& 是一个目录
-e &flle&:&file& 存在
-f &file&:&file& 是一个常规文件
-n &string&:&string& 不是 NULL
-r &file&:用户对 &file& 有读权限
-s &file&:&file& 的大小大于 0
-w &file&:用户对 &file& 有写权限
-x &file&:用户对 &file& 有执行权限
-z &string&:&string& 是 null
-L &file&:&file& 是一个符号链接
请记住,在 UNIX 目录中,设备、符号链接和其他对象都是文件,所以上面的测试操作符适用于所有类型的文件。
每个人都有自己的 shell 脚本编程风格。无论在测试语句中使用 [[ ]] 还是 [ ],上面的测试操作符的作用是相同的。本文使用 [[ ]]。 演示如何使用上面列出的几个测试操作符。
清单 11. 使用测试操作符#!/usr/bin/ksh
while true
echo "\nEnter file to check:
read _FNAME
if [[ ! -e "${_FNAME}" ]]
echo "Unable to find file '${_FNAME}'"
if [[ -f "${_FNAME}" ]]
echo "${_FNAME} is a file."
elif [[ -d "${_FNAME}" ]]
echo "${_FNAME} is a directory."
elif [[ -L "${_FNAME}" ]]
echo "${_FNAME} is a symbolic link."
echo "Unable to determine file type for '${_FNAME}'"
[[ -r "${_FNAME}" ]] && echo "User ${USER} can read '${_FNAME}'"
[[ -w "${_FNAME}" ]] && echo "User ${USER} can write to '${_FNAME}'"
[[ -x "${_FNAME}" ]] && echo "User ${USER} can execute '${_FNAME}'"
if [[ -s "${_FNAME}" ]]
echo "${_FNAME} is NOT empty."
echo "${_FNAME} is empty."
done执行清单 11 中的代码并检查几个文件名,会产生
所示的输出。
清单 12. 执行测试操作符的输出# ls –l
-rwxr-xr-x
786 Feb 22 16:11 check_file
-rw-r--r--
0 Aug 04 20:57 emptyfile
# ./check_file
Enter file to check:
badfilename
Unable to find file 'badfilename'
Enter file to check:
check_file
check_file is a file.
User cormany can read 'check_file'
User cormany can write to 'check_file'
User cormany can execute 'check_file'
check_file is NOT empty.
Enter file to check:
emptyfile is a file.
User cormany can read 'emptyfile'
User cormany can write to 'emptyfile'
emptyfile is empty.要想了解关于测试操作符的更多信息和完整列表,请执行 man test。
逻辑操作符UNIX 中的另一组重要操作符是逻辑操作符。与大多数现代编程语言一样,需要使用 AND 和 OR 语句对表达式或它们的值进行条件运算。
如果您读过我以前的文章(参见 ),就会注意到我喜欢使用逻辑操作符,而不是编写多行代码。这会使脚本更干净,更容易管理。在编写脚本时,我会先编写 exit_msg() 函数:
exit_msg() {
[[ $# -gt 1 ]] && echo "${0##*/} (${1}) – ${2}"
exit ${1:-0}
}这样就不必编写
那样臃肿的代码。清单 13. 不使用 exit_msg() 函数和逻辑操作符的脚本
#!/usr/bin/ksh
if [[ -n ${_NUM1} ]]
unset _NUM1
if [[ -n ${_NUM2} ]]
unset _NUM2
while [[ -z ${_NUM1} ]] || [[ -z ${_NUM2} ]]
echo "Enter 2 sets of numbers:
read _NUM1 _NUM2
echo "Enter file to log results to: \c"
read _FNAME
if [[ ! -e "${_FNAME}" ]]
echo "File '${_FNAME}' doesn't exist. A new log will be created."
touch "${_FNAME}"
if [[ ! -w "${_FNAME}" ]]
echo "Unable to write to file '${_FNAME}'"
expr ${_NUM1} \/ 1 & /dev/null 2&&1
if [[ $? -ne 0 ]]
echo "Number '${_NUM1}' is not numeric."
expr ${_NUM2} \/ 1 & /dev/null 2&&1
if [[ $? -ne 0 ]]
echo "Number '${_NUM2}' is not numeric."
echo "${_NUM1},${_NUM2}" && "${_FNAME}"只需使用 exit_msg() 这样的简单函数和几个逻辑操作符,这个脚本就可以简化成更漂亮更容易理解的程序,见 。
清单 14. 使用函数和逻辑操作符的脚本简化版本
#!/usr/bin/ksh
exit_msg() {
[[ $# -gt 1 ]] && echo "${0##*/} (${1}) - ${2}"
exit ${1:-0}
[[ -n ${_NUM1} ]] && unset _NUM1
[[ -n ${_NUM2} ]] && unset _NUM2
while [[ -z ${_NUM1} ]] || [[ -z ${_NUM2} ]]
echo "Enter 2 sets of numbers:
read _NUM1 _NUM2
echo "Enter file to log results to: \c"
read _FNAME
[[ ! -e "${_FNAME}" ]] && echo
"File '${_FNAME}' doesn't exist. A new log will be created."
touch "${_FNAME}"
[[ ! -w "${_FNAME}" ]] && exit_msg 1
"Unable to write to file '${_FNAME}'"
expr ${_NUM1} \/ 1 & /dev/null 2&&1
[[ $? -ne 0 ]] && exit_msg 2 "Number '${_NUM1}' is not numeric."
expr ${_NUM2} \/ 1 & /dev/null 2&&1
[[ $? -ne 0 ]] && exit_msg 2 "Number '${_NUM2}' is not numeric."
echo "${_NUM1},${_NUM2}" && "${_FNAME}"前面的示例主要使用 AND(&&)和 OR(||)逻辑操作符。除了这些之外,还可以使用 AND(–a)和 OR(–o)操作符。在使用 test 命令或单层方括号([ ])时,使用 –a 和 –o 运算表达式。但是,如果使用双层方括号([[ ]]),就要使用 && 和 ||:
# [[ "Paul" != "Xander" && 2 -gt 0 ]]
# [ "Paul" != "Xander" -a 2 -gt 0 ]
0比较测试操作符另一组测试操作符称为比较测试操作符。与前一组测试操作符一样,比较测试操作符是执行错误检查或根据另一个值测试值的简便方法。前一组测试操作符主要用来测试文件或检查一个变量是否已经定义了,而比较测试操作符主要用来测试字符串和数字值,例如检查日期、检查文件大小、检查两个字符串是否相同等等。
比较测试操作符包括:&fileA& -nt &fileB&:fileA 比 fileB 新
&fileA& -ot &fileB&:fileA 比 fileB 旧
&fileA& -ef &fileB&:fileA 和 fileB 指向同一个文件
&string& = &pattern&:字符串与模式匹配
&string& != &pattern&:字符串与模式不匹配
&stringA& & &stringB&:按照词典次序 stringA 出现在 stringB 之前
&stringA& & &stringB&:按照词典次序 stringA 出现在 stringB 之后
&exprA& -eq &exprB&:expressionA 等于 expressionB
&exprA& -ne &exprB&:expressionA 不等于 expressionB
&exprA& -lt &exprB&:expressionA 小于 expressionB
&exprA& -gt &exprB&:expressionA 大于 expressionB
&exprA& -le &exprB&:expressionA 小于或等于 expressionB
&exprA& -ge &exprB&:expressionA 大于或等于 expressionB
可以按照与其他操作符相同的格式使用比较测试操作符。可以使用 test、[ ] 或 [[ ]]。、 和
分别演示如何使用文件、数字和字符串比较。
清单 15. 文件比较# ls -l *.file
-rw-r--r--
21 Feb 22 2006
Pauls.file
-rw-r--r--
22 Aug 04 20:57 Xanders.file
# [[ "Pauls.file" -ot "Xanders.file" ]]
0清单 16. 数字比较# _PSIZE=`ls -l Pauls.file | awk '{print $5}'`
# _XSIZE=`ls -l Xanders.file | awk '{print $5}'`
# [[ ${_PSIZE} -lt ${_XSIZE} ]]
0清单 17. 字符串比较# [[ "cat" = "dog" ]]
1替换操作符在编写脚本时,很容易忘记定义一个变量或为它赋值。或者,您好几年没有改动一个脚本,现在需要修改它,但是忘了它的细节。有时候,希望告诉用户已经设置了一个值,或者设置了某些默认值。替换操作符是解决这些问题的好方法:
${var-value}:如果 &var& 存在,就返回 &var& 的值。如果 &var& 不存在,就返回 &value&。
${var=value}:如果 &var& 存在,就返回 &var& 的值。如果 &var& 不存在,就把 &var& 设置为 &value& 并返回 &value&。
${var+value}:如果 &var& 存在,就返回 &var& 的值。如果 &var& 不存在,就返回 NULL。
${var?value}:如果 &var& 存在,就返回 &var& 的值。如果 &var& 不存在,就退出命令或脚本并显示用 &value& 设置的错误消息。如果未设置 &value&,就显示默认的错误消息 “Parameter null or not set”。
${var:-value}:如果 &var& 存在且不是 NULL,就返回 &var& 的值。如果 &var& 不存在或者是 NULL,就返回 &value&。
${var:=value}:如果 &var& 存在且不是 NULL,就返回 &var& 的值。如果 &var& 不存在或者是 NULL,就把 &var& 设置为 &value& 并返回 &value&。
${var:+value}:如果 &var& 存在且不是 NULL,就返回 &var& 的值。如果 &var& 不存在或者是 NULL,就返回 NULL。
${var:?value}:如果 &var& 存在且不是 NULL,就返回 &var& 的值。如果 &var& 不存在或者是 NULL,就退出命令或脚本并显示用 &value& 设置的错误消息。如果未设置 &value&,就显示默认的错误消息 “Parameter null or not set”。
请注意前四个和后四个定义之间的细微差异。后一组定义在变量名和替换操作符之间包含一个冒号(:),这会额外检查变量是否是 NULL。在考虑用替换操作符给变量赋值时,要注意的另一个重要问题是,给变量赋值应用的规则与以一般方式从命令行或脚本定义变量的规则相同。不能用新值覆盖受保护的保留变量(例如,$1、$2、$3)。
中的示例演示替换操作符的使用方法。注意,可以组合使用多个替换操作符,见脚本的最后一行。
清单 18. 使用替换操作符# cat subops_examples
#!/usr/bin/ksh
_ARG1="${1}"
echo "Test 1A: The 1st argument is ${_ARG1-'ATC'}"
echo "Test 1B: The 1st argument is ${_ARG1:-'ATC'}"
_ARG2="${2}"
echo "Test 2A: The 2nd argument is ${_ARG2-'AMDC'}"
echo "Test 2B: The 2nd argument is ${_ARG2:-'AMDC'}"
_ARG3="${3}"
echo "Test 3A: The 3rd argument is ${_ARG3='PAC'}"
echo "Test 3B: The 3rd argument is ${_ARG3:='PAC'}"
_ARG4="${4}"
echo "Test 4A: ${4:+'The 4th argument was supplied'}"
echo "Test 5: If the 4th argument was provided, the value would be
${4:?'The 4th argument was not supplied.'}. Otherwise, we will not
see this message and get an error instead."
_ARG8="${8}"
echo "${_ARG8:=${7:-${6:-${5:-No Arguments were supplied after the 4th}}}}" 显示在不提供参数的情况下执行这个脚本的情况。
清单 19. 不带参数执行脚本# ./subops_examples
Test 1A: The 1st argument is
Test 1B: The 1st argument is ATC
Test 2A: The 2nd argument is
Test 2B: The 2nd argument is AMDC
Test 3A: The 3rd argument is
Test 3B: The 3rd argument is PAC
./subops_examples[18]: 4: The 4th argument was not supplied. 显示在只提供三个参数的情况下执行脚本会发生什么。
清单 20. 用三个参数执行脚本# ./subops_examples arg1 arg2 arg3
Test 1A: The 1st argument is arg1
Test 1B: The 1st argument is arg1
Test 2A: The 2nd argument is arg2
Test 2B: The 2nd argument is arg2
Test 3A: The 3rd argument is arg3
Test 3B: The 3rd argument is arg3
./subops_examples[18]: 4: The 4th argument was not supplied. 显示在只提供四个参数的情况下会发生什么。
清单 21. 用四个参数执行脚本# ./subops_examples arg1 arg2 arg3 arg4
Test 1A: The 1st argument is arg1
Test 1B: The 1st argument is arg1
Test 2A: The 2nd argument is arg2
Test 2B: The 2nd argument is arg2
Test 3A: The 3rd argument is arg3
Test 3B: The 3rd argument is arg3
Test 4A: The 4th argument was supplied
Test 5: If the 4th argument was provided, the value would be
arg4. Otherwise, we will not see this message and get an
error instead.
No Arguments were supplied after the 4th 显示提供所有五个参数时的情况。清单 22. 用所有五个参数执行脚本# ./subops_examples arg1 arg2 arg3 arg4 arg5
Test 1A: The 1st argument is arg1
Test 1B: The 1st argument is arg1
Test 2A: The 2nd argument is arg2
Test 2B: The 2nd argument is arg2
Test 3A: The 3rd argument is arg3
Test 3B: The 3rd argument is arg3
Test 4A: The 4th argument was supplied
Test 5: If the 4th argument was provided, the value would be
arg4. Otherwise, we will not see this message and get an
error instead.
arg5 显示提供七个参数时的情况。注意,因为提供了七个参数,所以第五和第六个参数被忽略。
清单 23. 用七个参数执行脚本# ./subops_examples arg1 arg2 arg3 arg4 arg5 arg6 arg7
Test 1A: The 1st argument is arg1
Test 1B: The 1st argument is arg1
Test 2A: The 2nd argument is arg2
Test 2B: The 2nd argument is arg2
Test 3A: The 3rd argument is arg3
Test 3B: The 3rd argument is arg3
Test 4A: The 4th argument was supplied
Test 5: If the 4th argument was provided, the value would be
arg4. Otherwise, we will not see this message and get an
error instead.
arg7结束语阅读本文之后,您应该更好地理解了 UNIX 用户输入的那些 “奇怪的” 字符。您了解了如何把数据重定向到 stdin 或 stdout,如何使用管道,以及如何在 UNIX 中使用操作符;这些都有助于您编写出更强大的脚本,更好地捕捉错误,使逻辑更简洁清晰。祝您好运!
参考资料 您可以参阅本文在 developerWorks 全球站点上的
。:查看本系列中的其他部分。
:通过 IBM 的命令参考了解 UNIX test 命令。
:通过 IBM 的信息中心了解关于这种重定向的信息。
:通过 IBM 的信息中心了解关于输入和输出重定向的信息。
:阅读关于 UNIX 环境中管道的 Wikipedia 文章。
:阅读 Wikipedia 上关于 UNIX test 命令的文章。
:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。:了解最新的 developerWorks 技术活动和网络广播。
:访问与 AIX 相关的技术信息的协作环境。
:收听 Podcast 并了解 IBM 技术专家的最新想法。
:使用可从 developerWorks 直接下载的试用软件开发您的下一个项目。
参与 AIX 和 UNIX 论坛:
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
IBM PureSystems(TM) 系列解决方案是一个专家集成系统
通过学习路线图系统掌握软件开发技能
软件下载、试用版及云计算
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=AIX and UNIX, LinuxArticleID=355444ArticleTitle=对话 UNIX: !$#@*%publish-date=

我要回帖

更多关于 幸福的港湾视频 的文章

 

随机推荐