Shell脚本学习指南——Chapter 2 初识

来源:互联网 发布:康福软件下载 编辑:程序博客网 时间:2024/06/15 23:48

  • 一、简单的脚本

1、$ who ——查看现在系统上有多少人登录

2、$who | wc -l ——计算用户个数

【‘|’管道符号可以在两个程序之间建立管道(pipeline):who的输出,成了wc的输入,wc所列出的结果就是已登录用户的个数。】

3、将2中的管道转变成一个独立的命令:把这条命令输入一个一般的文件中,然后为该文件设置执行权限。

$ cat > nusers //建立文件,使用cat复制终端的输入 who | wc -l //程序的内容 ^D //ctrl+D退出语句$ chmod  +x nusers//让文件拥有执行的权限$ ./nusers//输出我们要的结果

【小型shell脚本的典型开发周期:】

1)直接在命令行(command line)上测试

2)一旦找到能够完成工作的适当语法,再将它们放进一个独立的脚本里面,并为改脚本设置执行权限就可以直接使用该脚本

PS:在此过程中可能会出现按下BackSpace就变为^H的情况,参考http://blog.csdn.net/gugu1313/article/details/44040675 或者 http://lbs1991.blog.51cto.com/9134853/1546801/


二、位于第一行的 #!
1、意义:告知UNIX内核应该以哪个Shell来执行所指定的Shell脚本——有助于执行机制的通用化,让用户得以直接引用任何的程序语言解释器,而非只是一个命令Shell。
      当一个文件中开头的两个字符是 #! 时,内核会扫描该行其余的部分,看是否存在可用来执行程序的解释器的完整路径。

三、Shell的基本元素
1、“-c” 选项的开头是一个破折号或者减号,后面接着一个字母,不需要参数的选项可以合并
     “--backup” 长选项的开头是一个破折号还是两个,视程序而定
       以两个破折号(--)来表示选项结尾的用法
2、分号(;)可以用来分隔同一行里的多条命令。Shell会依次执行这些命令。
     如果你使用的是“&”符号而不是分号,则Shell将在后台执行其前面的命令,也就是说Shell不用等到该命令完成,就可以继续执行下一个命令
3、Shell识别三种基本命令:内建命令、Shell函数以及外部命令
1)内建命令:就是Shell本身执行的命令
  • cd ---- 改变目录
  • read ---- 将来自用户(或文件)的输入数据传给Shell变量
  • test ---- 为了执行效率
  • echo/printf ----- I/O命令
2)Shell函数:用Shell语言写成,它们可以像命令那样引用
3)外部命令:就是Shell的副本(新的进程)所执行的命令,步骤如下
  • 建立一个新的进程,此进程是Shell的一个副本
  • 在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。当命令名称含有斜杠(/)符号时,将略过路径查找步骤
  • 在新的进程里,以所找到的新程序取代执行中的Shell程序并执行
  • 程序完成后,最初的Shell会接着从终端读取下一条命令,或执行脚本里的下一条命令


4、变量
Shell中变量值可以(通常是)空值,也是就是不含任何字符。
1)变量赋值的方式:变量名称=值(没有空格,值中有空格则加上引号) $变量名称

5、echo输出:产生输出,可用来提示用户,或是用来产生数据供进一步处理
6、printf输出:不会自动提供一个换行符号,必须显式地将换行符号指定成\n
7、基本的I/O重定向:标准输入、标准输出、标准错误输出【通过与终端交互,或是在Shell脚本里设置,重新安排从哪里输入或输出到哪里】
1)过滤器(filter):许多UNIX程序会读取标准输入、写入标准输出,并将错误信息传递到标准错误输出。

8、重定向与管道
1) < 改变标准输入
program < file 可将program 的标准输入修改为file
tr -d '\r' < dos-file.txt
2) > 改变标准输出
program > file 可将program的标准输出修改为file
tr -d '\r' < dos_file.txt >UNIX-file.txt
这条命令会先以tr将dos-file.txt里的ASCII carriage-return(回车)删除,再将转换完成的数据输出到UNIX-file.txt。dos-file.txt里面的原始数据不会有变化。
3)>>附加到文件
program >> file 可将program的标准输出附加到file的结尾处。
如果目的文件不存在,>>重定向符就会新建一个。然而如果目的文件存在,它不会直接覆盖掉文件,而是将程序所产生的数据附加到文件结尾处。
4) | 建立管道
program1 | program2可以将program1的标准输出修改为program2的标准输入
管道可以把两个以上执行中的程序衔接在一起。第一个程序的标准输出可以变成第二个程序的标准输入
tr -d '\r' < dos-file.txt | sort > UNIX-file.txt
这条管道会先删除输入文件内的回车字符,在完成数据的排序之后,将结果输出到目的文件。






原创粉丝点击