免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wingger
打印 上一主题 下一主题

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)  关闭 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2004-11-15 09:14 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "寂寞烈火" 发表:
cat我常用:
cat file
cat -A file
别的基本不用

cat -n file和cat -b file偶还是常用地

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
32 [报告]
发表于 2004-11-15 10:29 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

读网中人十三问的第四问的理解:
1、变量一定得用""
2、处理顺序要搞清楚:这两行一定要牢牢记在脑中
命令格式
command-name options argument
处理过程:
shell 会依据 IFS(Internal Field Seperator) 将 command line 所输入的文字给拆解为"字段"(word)。
然后再针对特殊字符(meta)先作处理,
最后再重组整行 command line 。


3、例子:
空格的好理解,但CR字符不好理解,如'',""
  1.    $ A='B
  2.    > C
  3.    > '
  4.    $ echo "$A"
  5.    B
  6.    C
  7.    $ echo $A
  8.    B C
复制代码


echo 的$A加上soft quote后,得出的结果不同了,
第一个是断行字符(new line),取消了CR和IFS的功能
第二个应该是一个空格了,仅取消CR功能,而保留IFS功能
第三个是CR

原因如下:
然而,由于 echo $A 时的变量没至于 soft quote 中,因此当变量替换完成后并作命令行重组时,<enter> 会被解释为 IFS (空格键),而不是解释为 New Line (换行符)字符。

而在escape中
  1.    $ A=B\
  2.    > C\
  3.    >
  4.    $ echo $A
  5.    BC
  6.    $ echo "$A "
  7.    BC
复制代码


得出的结果是BC,原因:
<enter> 键本身在 shell meta 中的特殊性,在 \ 跳脱后面,仅仅取消其 CR 功能,而不会保留其 IFS 功能(空格)。 因此就是(NULL)

因此在上面两个例子中 <enter> 键所产生的字符有四种:
CR (结束命令)
IFS (空格)
NL(New Line) (断行)
NULL (空)



不知我的理解是否正确,还望各位指点,呵呵,我感觉这样说好像更容易理解
上面理解了,下面就不难了,找个地方放一下,俺怕自己给忘了

而接下来的例子中,则要理解shell meta 与 command meta

有些meta ,都是有特殊用途的,比如 { } ,但在awk中 却要用 { } 来区分出 awk 的命令区段(BEGIN, MAIN, END),也就是双方都用到了{}

如果输入下例命令就会出错:

  1. $ awk {print $0} 1.txt
复制代码


这是因为 { } 在 shell 中并没关闭,那 shell 就将 {print $0} 视为command block , 而不是awk的参数,但同时又没有" ; "符号作命令区隔,因此就出现 awk 的语法错误结果。

要解决之,可用 hard quote :

  1. $ awk '{print $0}' 1.txt
复制代码


将原本的 {、<space>、$(注三)、} 这几个 shell meta 关闭, 避免掉在 shell 中遭到处理,而完整的成为 awk 参数中的 command meta 。
( 注三:而其中的 $0 是 awk 内建的 field number ,而非 awk 的变量,awk 自身的变量无需使用 $ 。)


要是理解了 hard quote 的功能,再来理解 soft quote 与 escape 就不难:

  1. awk "{print \$0}" 1.txt
  2. awk \{print\ \$0\} 1.txt
复制代码

第一行:由于soft quote中没法关闭$,因此用\来关闭$meta
第二行:\{关闭{,\ (\空格,关闭空格键),\$,\}就不用说了


如果awk 的 $0 的 0 值是从另一个 shell 变量读进

比方说:已有变量 $A 的值是 0 ,那如何在 command line 中解决 awk 的 $$A 呢? 那么 hard quoe 就不可行了:
代码:
  1. $ awk '{print $$A}' 1.txt
复制代码

因为 $A 的 $ 在 hard quote 中是不能替换变量的。

可以使用如下几种方案:
  1. A=0
  2. awk "{print \$$A}" 1.txt
  3. awk \{print\ \$$A\} 1.txt
  4. awk '{print $'$A'}' 1.txt
  5. awk '{print $'"$A"'}' 1.txt     # 注:"$A" 包在 soft quote 中
复制代码

上面得注意$和''和""的包含位置

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
33 [报告]
发表于 2004-11-15 11:47 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "wingger"]上面得注意$和''和""的包含位置[/quote 发表:

对你的学习精神所感染
P.S:
[quote]
再见清茶
2004/11/14

多好的签名      

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
34 [报告]
发表于 2004-11-15 14:41 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "wingger" 发表:
能把十三问一次性看完最好,不过对我来说还是有些难度,今天才弄清楚第四问,看了好久才明白,目前为止,看完1,2,3,4,及10以后的

加油!
順便幫忙 debug 一下...  ^_^

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
35 [报告]
发表于 2004-11-16 02:47 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "網中人" 发表:

加油!
順便幫忙 debug 一下...  ^_^

查找网兄的debug,很难的!

论坛徽章:
0
36 [报告]
发表于 2004-11-16 08:27 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

精华啊!!!

学习ing!!!

在输入输出概念里,内联输入重定向也是个很常用的用法,在自动FTP脚本里、SHELL的生成器里,wingger可以把它再加进来,搜集的过程就是一个非常好的学习过程!!!

如:

  1. ftp -ni <<ENDOFSCRIPT
  2. open 192.168.20.100
  3. user username  pwd
  4. bin
  5. prom
  6. cd /u
  7. mput *
  8. close
  9. bye
  10. ENDOFSCRIPT
复制代码

  1. cat > mvfile.sh <<\END

  2. for i in `ls *.tar|sed -e 's/\.tar//'`
  3. do
  4.       mkdir $i
  5.       mv ${i}.tar $i
  6. done

  7. END
复制代码



继续学习ing!!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
37 [报告]
发表于 2004-11-16 09:06 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

to mymm

俺现在对grep,sed,awk等还是太了解,如果以后碰到会再加入的,发贴的过程中,因为需要概括,一下子就能发现自己哪些没理解了     

论坛徽章:
0
38 [报告]
发表于 2004-11-18 09:31 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

文革 要带来新的学习气氛阿~~~

论坛徽章:
0
39 [报告]
发表于 2004-11-18 17:43 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

支持!!!!!!!111

论坛徽章:
0
40 [报告]
发表于 2004-12-31 13:40 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

studying now……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP