一、Shell概述
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
								1、Shell的种类
						
				
		
		
				
						
						
				 
		
				
						    ① sh (Bourne shell):shell的基础版本,编程方面优秀,但交互性方面不好。
				
		
		
				
						    ② csh (C shell):语法与C类似,交互性更好,但与sh不兼容
				
		
		
				
						    ③ ksh (Korn shell):集合sh和csh有点,并兼容sh
				
		
		
				
						    ④ bash(Bourne Again shell):默认shell,集合csh和ksh有点,但与sh不兼容
				
		
		
				
						    
				
				
						⑤ 其他:如ash、zsh等
				
		
		
				
						
						
				 
		
				
						    主要介绍bash的用法,bash主要继承了csh和ksh的以下优点:
				
		
		
				
						
						
				 
		
				
						    * 命令行历史 (翻阅历史命令)
				
		
		
				
						    * 命令行编辑 (可用vi修改已输命令)
				
		
		
				
						    * 命令补全 (Tab)
				
		
		
				
						    * 别名扩展 (建立代表某些命令的名字)
				
		
		
				
						
						
				 
		
				
						
								2、Shell的特点
						
				
		
		
				
						
						
				 
		
				
						    ① 可建立脚本来组合命令
				
		
		
				
						    ② 提供了文件名扩展字符(*/?/[])
				
		
		
				
						    ③ 可直接使用shell内置命令而无需创建新进程
				
		
		
				
						    ④ 灵活的数据流:通配符、输入/出重定向、管道线等
				
		
		
				
						    ⑤ 结构化的程序模块:顺序、条件、循环
				
		
		
				
						    ⑥ 后台执行命令能力:&
				
		
		
				
						    ⑦ 提供可配置环境,用户可创建、修改命令
				
		
		
				
						    ⑧ 提供高级语言命令,可制作shell脚本
				
		
		
				
						
						
				 
		
				
						
								3、shell程序示例
						
				
		
		
				
						
						
				 
		
				
						    ① 使用shell最简单的方法就是直接输入命令,如:
				
		
		
				
						    
				
		
		
				
						    $ ls -l /usr
				
		
		
				
						
						
				 
		
				
						    ② 简单shell脚本
				
		
		
				
						
						
				 
		
				
						    $ cat ex1
				
		
		
				
						    date
				
		
		
				
						    pwd
				
		
		
				
						    cd ..
				
		
		
				
						
						
				 
		
				
						    这个脚本表示依次执行脚本中的命令
				
		
		
				
						    先显示出日期,再显示当前工作目录,再返回上级目录
				
		
		
				
						
						
				 
		
				
						    ③ 带控制结构的脚本
				
		
		
				
						
						
				 
		
				
						    #!/bin/bash
				
		
		
				
						    # If no arguments then listing the current directory.
				
		
		
				
						    # Otherwise listing each subdirectory.
				
		
		
				
						
						
				 
		
				
						    if test $# = 0
				
		
		
				
						    then ls
				
		
		
				
						    else
				
		
		
				
						      for  i
				
		
		
				
						      do
				
		
		
				
						        ls -l $i|grep '^d'
				
		
		
				
						        done
				
		
		
				
						    fi
				
		
		
				
						
						
				 
		
				
						    说明:
				
		
		
				
						    1) #!/bin/bash 表示下面的脚本用bash编写,必须用bash进行解释执行
				
		
		
				
						    2) #开头的行为注释行
				
		
		
				
						    3) if下面的for循环语句结构
				
		
		
				
						
						
				 
		
				
						
								4、Shell脚本的执行
						
				
		
		
				
						
						
				 
		
				
						    ① 输入定向到shell脚本
				
		
		
				
						    $ bash < ex1
				
		
		
				
						
						
				 
		
				
						    shell从文件ex1读取命令并执行,执行完成后返回shell命令状态,此命令不能带参数。
				
		
		
				
						
						
				 
		
				
						    ② 以脚本名作为bash参数
				
		
		
				
						    $ bash ex2 
				
		
		
				
						    $ . ex2
				
		
		
				
						
						
				 
		
				
						    这种方法可以在后面加参数
				
		
		
				
						    第二行的“. ex2”表示用当前shell执行该脚本,注意中间要有空格
				
		
		
				
						
						
				 
		
				
						    ③ 将shell脚本权限设为可执行
				
		
		
				
						    $ chmod a+x ex2
				
		
		
				
						    $ ex2
				
		
		
				
						
						
				 
		
				
						    可以将shell脚本所在目录加入到命令搜索目录,这样可以像普通命令那样随时调用。
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
						
				 
		
				
						二、命令历史
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						    bash为每个用户都维护了一个命令历史文件:~/.bash_history
				
		
		
				
						
						
				 
		
				
						
								1、显示历史命令
						
				
		
		
				
						
						
				 
		
				
						    ① 不带参数
				
		
		
				
						
								    $ history
						
				
		
		
				
						
						
				 
		
				
						    列出所有的命令,并附有编号。所有命令均是曾经被执行过的。
				
		
		
				
						
						
				 
		
				
						
								    ② 后面带数字
						
				
		
		
				
						    $ history 50
				
		
		
				
						
						
				 
		
				
						    表示列出最后的50条命令
				
		
		
				
						
						
				 
		
				
						    ③ 删除所有信息
				
		
		
				
						    $ history -c
				
		
		
				
						
						
				 
		
				
						
								2、执行历史命令
						
				
		
		
				
						
						
				 
		
				
						    ① 基本操作
				
		
		
				
						    $ !50
				
		
		
				
						
						
				 
		
				
						    执行序号为50的命令
				
		
		
				
						
						
				 
		
				
						   ② 其他操作
				
		
		
				
						
						
				 
		
				
						    !!         重复执行上一条命令,即!-1
				
		
		
				
						    !n         重新执行第n条命令
				
		
		
				
						    !-n        重新执行倒数第n条命令
				
		
		
				
						    !string    重新执行最近一条以string开头的命令
				
		
		
				
						    !?string?  重新执行最近一条包含string的命令
				
		
		
				
						    !#         执行到现在为止所输入的整个命令行
				
		
		
				
						
						
				 
		
				
						
								3、配置历史命令环境
						
				
		
		
				
						
						
				 
		
				
						    ① 更改文件路径
				
		
		
				
						    $ HISTFILE="/home/wxq/.myhistory"
				
		
		
				
						
						
				 
		
				
						    通过更改环境变量HISTFILE来改变存放历史命令的文件
				
		
		
				
						
						
				 
		
				
						
								   ② 改变记录个数
						
				
		
		
				
						    $ HISTSIZE=600
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
						
				 
		
				
						三、名称补全
				
		
		
				
						
						
				 
		
				
						    在输入文件名时,使用Tab键,会自动进行名称补全
				
		
		
				
						
						
				 
		
				
						    ① 当系统可以唯一确定是哪个目录或文件时,自动补全
				
		
		
				
						    ② 当系统找到不止一个文件名时,把文件名补全到最后一个相同的字符为止
				
		
		
				
						    ③ 若不能唯一确认时,尽量补全并响铃提示
				
		
		
				
						
						
				 
		
				
						    注:可以按两次Tab键(或Esc+?),使系统自动提示所有可以匹配的文件。
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						四、别名
				
		
		
				
						
						
				 
		
				
						    ① 创建别名
				
		
		
				
						
						
				 
		
				
						    bash可以用alias命令来定义别名。例如:
				
		
		
				
						    $ alias ..='cd ..'
				
		
		
				
						    $ alias cp='cp -i'
				
		
		
				
						    $ alias ll='ls -l'
				
		
		
				
						
						
				 
		
				
						    注意:“=”两边不能有空格,如果命令中间有空格,需要用单引号括起来。
				
		
		
				
						
						
				 
		
				
						    ② 删除别名
				
		
		
				
						    $ unalias ll
				
				
						 
				
		
		
				
						
						
				 
		
				
						    可以通过一下命令删除所有的别名:
				
		
		
				
						    $ unalias -a
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
								
						
				
				
-The End-