unix环境编程笔记:第三章: shell的使用

 

shell是对用户提出的运行程序的请求,进行解释的程序。

一、命令行的结构:命令的分隔符有分号( ; )、回车符(命令结束)、&(后台执行)等。用回车执行命令。

1. who命令:查看当前的系统用户信息。

2. date;who | wc 与(date;who)| wc

3. 管道线命令: | 。将一种命令的输出作为另一种命令的输入。而管道 | 的优先级要高于分隔符;的优先级。

4. tee命令:可以通过截获管道线上数据流并放进某个文件中。tee不是shell的一部分,但它有助于对管道操作。 用途之一:将中间结果保存在一个文件中:

eg:$(date;who) | tee user_online_file | wc

$cat user_online_file

$wc < user_online_file

功能:tee能将流经管道数据保存,对管道来说好像其不存在似的。

5. 输入输出重定向:应用程序运行时,默认打开3个文件,标准输入(stdin 0 键盘)、标准输入(stdout 1显示终端)、标准错误输出(stderr 2 显示终端)。

输入重定向:

                  使应用程序的输入不使用标准输入,而是用文件的内容。即将输入重定向到从文件输入。

                 重定向输入符: <

                 eg: $wc < user_online_file

输出重定向:

                将程序的输出重定向到文件而不是标准输出。重定向输出符: >

                eg: $who > user_online_file

与重定向输入输出<、>相似的两个符号:<< 、>>.前者用于here document的情形;后者将输出追加到文件。

 

6. 命令的结束符: & 、; 、\n 。&放在命令的后面,命令将在后台执行。用户可以接着与shell交互。

用fg、bg;分别命令应用程序放在前台,或后台执行,ctrl-z也有类似功能。(foreground、background)

eg:$(sleep 5; date) & date  #5秒间隔,不一定准确

eg: $(sleep 600; echo tea is ok now!) & #定时提醒功能

&的优先级优于 ; 而 | 的优先级优于 &. 不确定时,最好用()。

 

7. pr命令: 打印文档。

    eg: $ cat file | pr

 

8. shell解释的多种特殊字符, 如:< 、>、 |、 ;、 & 等 不能用于shell中的程序的参数。

eg:$ echo helloworld > junk

        $>junk echo hello

 

二、元字符。

shell中有特殊意义的字符称之为元字符,使用元字符的普通意义,需要转义。

1. 元字符:*.

  eg: $ echo * #功能和ls大致一样。

  eg:$echo x*y  #首先在当前目录查找以x开头以y结尾的文件,若无文件,则作为echo的参数

wzb55@ubuntu:~$ echo x*y
x*y
wzb55@ubuntu:~$ touch xxy
wzb55@ubuntu:~$ echo x*y
xxy
wzb55@ubuntu:~$
2.  >:  prog>file  输出重定向到file。

3.  >>: prog>>file  将prog的输出追加到file中。

4. <:    prog<file  从file中读取prog的输入。

5.  | : 管道(pipe) p1 | p2  将p1的输出作为p2的输入。

6. <<串:here document:将标准输入读入到here documnet,直至遇到 串 结束。

7.  *: 匹配文件名中任意多个字符,即0个或多个字符。

8.  ?:匹配文件名中单个字符。

9. {CCC} : 匹配文件名中CCC范围内的字符, 0-9, a-z,即字符集。

10. ;: 命令结束符, p1; p2 : 先执行p1,再执行p2.

11. &: 命令结束符,指示命令后台运行。

12. `...`:  运行...中的命令,用其输出代替其出现的位置。

13. (...) :  在子shell中运行...中的命令。

14.  {...} : 在当前shell中运行...中的命令。

15. $1 - $9:  代表shell文件的参数。

16. $0: 代表shell文件名。

17.$变量: shell变量的值。

18.${变量}:  shell变量的值,避免变量与文本链接的混淆。

19. \C: \C将C字符作为普通字符使用。

20. '...' : 表示文字...。

21. "..." : 在...中$, `...`、和\得到解释后,将...作为文本文字。

22. # :表示行注释的开始。

23. 变量=值: 为变量赋值。

24. p1 && p2 : 运行p1;若成功, 在运行p2.

25. p1 || p2 : 运行 p1; 若不成功,则运行p2.

 

26. 取消元字符的特殊意义方式:

1. 单引号。

2. 双引号。

3. 转义符。

 

4. 一种引号保护另外一种引号。

5.续行符: \, 若出现在行尾表示续行,若出现在引号内则表示普通字符,#表示是注释的开始。

6. ls .*:  输出所有以.开始的文件目录。

7.echo: 默认输出换行符,若不输出换行符,则用 echo -n。

 eg: echo 无参数时,则输出空行,而-n时, 则无输出。

8.grep: grep 模式 文件 不能将模式放在“ ”中。

9.file: 查看文件的格式,有文件的魔术数标志,或者内容关键字表示,与文件的后缀名无关。

 

三、shell脚本

shell脚本是shell命令组合而成的文件。

1. shell文件的参数:

$0: 表示shell的文件名。

$1 -$9:表示shell文件的前9个参数。

$*: 表示shell文件的所有参数。无参数时,$*为空串。

将程序输出作为参数:eg: echo `date`

命令:pick:pr `pick *.c` | lpr

 

2. shell变量

 变量=值 : 当前shell能够使用。(注意:=左右无空格)

export 变量=值 : 当前shell与子shell都能使用。

$?: 程序执行后,返回的状态码。

$$: bash的进程号。

 

$PATH:  命令执行的环境路径。

相关文件: /etc/profile、 /etc/.profile、

 /home/username/.bash_profile

/home/username/.bash.rc

^或 | 的意义相同。

n>file:将文件描述符n的输出定向到文件。

n>> file: 将文件描述符n的输出追加到文件。

n>&m: 将文件描述符n与文件描述符m的合并输出。

n<&m: 将文件描述符n与文件描述m的合并作为输入。

 

3.8. shell程序里的循环

for 变量 in 文件列表

do

    ...

done

 

for  i in * 与 for i in $*的区别,考虑程序的执行性能。

 

 

 

 

 

 

 

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值