Linux Shell

参考

Linux Shell简介(http://www.linuxsir.org/main/?q=node/135)

Linux重定向详解(http://www.ulcms.com/html/linux/shell/20080514/shell_11925.htm)

1,shell 基本概念

首先是简单的命令解释器(典型的有 Windows 中的 DOS ),它解释由用户输入的命令并且把它们送到内核,而且是一个全功能的编程环境

Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果

同Linux本身一样,Shell也有多种不同的版本。

目前主要有下列版本的Shell: Bourne Shell:是贝尔实验室开发的。 
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell.

Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。

C Shell:是SUN公司Shell的BSD版本

2,终端(Terminals), 虚拟终端, xterm & shell

终端:是用键盘、显示器及足够的 electronics (电子元件)组成的机器与中央计算机(central computer)相连的设备。

在这些终端上,用户可以敲字符(teletypy),这就是字符串'tty'表示终端设备文件,和'getty'命令的名称来历

为了避免各种终端设备标准不统一的混乱,就创建了一个含有所有不同终端特性的(capability)文件,

这就是'termcap'。'/etc/termcap。
Linux 终端大多数用'vt100'或'linux'作为终端类型。

虚拟终端:X Window是一个 Unix 的图形子系统,但是它的好处是可以运行多个虚拟终端

         虚拟终端通过伪(pseudo) tty 设备-- pty 与系统相连

xterm: 1,是虚拟终端的显示标准-- xterm 2,另一种角度讲是一个可以在XWindow 上 运行虚拟终端的应用程序。

shell: 为了在终端(包括虚拟终端)中运行程序,需要 shell。shell 是操作系统的一部分,用来与用户打交道,并且可以用来协调各个命令

3,reverse-i(ncremental)-search模式

<CTRL r> 后,shell 就进入"reverse-i(ncremental)-search

4,命令的排列

command1 ; command2   //先执行 command1 ,不管 command1 是否出错,接下来执行 command2

command1 && command2  //只有当 command1 正确运行完毕后,才执行 command2 。

要编译、安装 Linux ,您需要执行一串命令:'make dep'、'make clean'、'make bzImage'、'make modules'、'make modules_install'和'make install'。如果要等一个命令完成后,再输入下一个,再等,再输入,……,那就太麻烦了。另一方面,每个命令只有当前面的命令都正确执行完毕后,才能开始执行。如果您用';'来排列命令,则即使有命令执行失败,后面的也照常运行,最后,您可能在'/boot'目录下得到一个有问题的内核映像(image)。而用'&&':
make dep && make clean && make bzImage && make modules && make modules_install && make install

不需要中途打断,就可以编译内核及其模块,并完成后面的安装。

5,命令替换

command1 $(command2)  或者 command1 'command2'

command2 的结果作为command1的输入

example: kill $(pidof myprocess)

6,文件名通配符

rm *[!6]*.bak  除了以'6.bak'结尾的文件,删除其他所有以'.bak'结尾的文件

ls *.???? 列出所有在点号后有四个字符的文件

ls [13]* 列出所有以字符'1'或'3'开头的文件

ls *[3-8]?.*  列出所有点号前倒数第二个字符落在'3'到'8'范围的文件

通配符的转意符 '/' 

7,命令之间重定向

command1 | command2 | command3

command1 的输出给command2,然后command2的输出给command3

8,I/O重定向

1,I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9

2,常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出)

3,0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的

4,>&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出

cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;

9,重定向到文件 >

ls | sort > sdirlist

将文件排序并输出到sdirlist中,原先存在的sdirlist将被删除

追加输出到文件 >>

echo "string" >> file

出错信息输出到文件  2>

command 2> file

9,bash 配置文件

.bash_history :记录了您以前输入的命令,

.bash_logout :当您退出 shell 时,要执行的命令,

.bash_profile :当您登入 shell 时,要执行的命令,

.bashrc :每次打开新的 shell 时,要执行的命令

请注意后两个的区别:'.bash_profile'只在会话开始时被读取一次,而'.bashrc'则每次打开新的终端(如新的 xterm 窗口)时,都要被读取。按照传统,您得将定义的变量,如 PATH ,放到'.bash_profile'中,而象 aliases(别名)和函数之类,则放在'.bashrc'。但由于'.bash_profile'经常被设置成先读取'.bashrc'的内容,您如果图省事的话,就把所有配置都放进'.bashrc'。

上面的这些文件是每位用户的设置,系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中。您最好习惯使用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更具个性。当系统级与用户级的设置发生冲突时,将优先采用用户的设置。

10,bash提示符

#echo $PS1  显示当前的设定

其中可用字符的含义在 man bash 的'PROMPTING'部分有说明

#export PS1="/[/033[1m/][/w]/[/033[0m/] "

11,命令的别名单引号和双引号的区别

alias upmuo="rsync -e ssh -z -t -r -vv --progress $MUOHOME muo:/www/mandrakeuser/docs"

单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外

几个有用的别名

alias rpmq='rpm -qa | grep' :现在 rpmq string 就将列出所有名称中含有 string 的已安装 RPM 包

alias ls='ls -ho --color | more' :ls 将以彩色分页方式列出文件,文件大小以 KB为单位

alias use='du --max-depth=1 | sort -n | more' :use 将子目录按大小排好,并以分页方式列出

12学习资源

BASH Programming - Introduction HOW-TO:

http://www.ibiblio.org/mdw/HOWTO/Bash-Prog-Intro-HOWTO.html 

将更深入这些主题,并且将把您带到 shell 编程的世界。然后可以继续阅读我强烈推荐的 Advanced Bash-Scripting Guide( http://www.ibiblio.org/mdw/LDP/abs/html/index.html ),作者是:Mendel Cooper 。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值