Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61817
  • 博文数量: 26
  • 博客积分: 315
  • 博客等级: 二等列兵
  • 技术积分: 299
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-05 17:32
文章分类
文章存档

2014年(13)

2013年(3)

2012年(10)

我的朋友

分类: LINUX

2012-08-16 10:11:17

摘自:[]Harley HahnUnix & Linux大学教程

 

八、使用shell:命令与定制

注:本文命令中出现的符号均为英文符号,请使用时自行替换。


1)元字符

当使用shell时,还有许多其他字符拥有特殊的含义,这种字符称为元字符。

元字符包括:{ } | < > ( ) # ; ` ~ ? [ ] * ! & \ ‘ “ $

 

2)引用和转义

希望按字面上的含义使用元字符时,必须使用引用。字符的引用方法有3种:使用反斜线、使用一对单引号或者使用一对双引号。

当使用反斜线时引用单个字符时,我们称反斜线为“转义字符(escape character)”,它告诉shell从一种模式改变到另一种模式。

使用反斜线引用单个字符(称为转义了这个字符),可转义新行字符

使用单引号引用一串字符。(强引用)

使用双引号引用一串字符,但是保留了$ (美元符号)` (反引号)\ (反斜线)的特殊含义。

 

3shell内置命令:type

shell决定如何处理命令,其可能性有两种。一些命令在shell的内部,这意味着shell可以直接解释它们。这些命令是内部命令,通常称为内置命令(builtin command,或者简称builtin)。其他所有命令是外部命令,即必须单独运行的程序。

查看命令是否为shell内置命令的方法有两种。一是查看该命令的说明书页,内部命令无说明书页。二是使用type命令,语法为: type command

 

3)查看内部命令

man bash/ ksh/tcsh/csh

一些Unix/Linux系统对于内置命令拥有独立的说明书页。使用apropos命令可以查看系统是不是属于这种情况: apropos builtin

如果系统上有这样的说明书页,那么它就是快速查看所有内置命令列表的地方。对于LinuxFreeBSD来说,可以使用: man builtin

对于Solaris,可使用: man shell_builtins

Linux还有一个help命令,可以以若干种方式显示builtin说明书页中的信息。该命令语法为: help [-s] [command…]

command是命令的名称,-s (syntax,语法)

 

5)外部命令及搜索路径

shellPATH环境变量查找外部命令,PATH包含一串字符,这串字符就是一系列目录名称,我们称之为搜索路径。

显示PATH变量的值: echo $PATH

 

6)修改搜索路径

对于Bourne Shell家族:

export PATH=”/bin:/usr/bin:/usr/ucb:/usr/local/bin”

对于C-Shell家族:

set path=( /bin /usr/bin /usr/ucb /usr/local/bin)

将家目录的bin放在搜索路径最后

export PATH=”$PATH:$HOME/bin”

set path=($path $HOME/bin)

将其插在开头:

export PATH=”$HOME/bin:$PATH”

set path=($HOME/bin $path)

 

7)修改shell提示环境

修改一个PS1的变量即可

对于Bourne Shell,可以设置一个$字符加一个空格: export PS1=“$ ”

对于C-Shell: set prompt=“% ”

如果是Tcsh: set prompt=“> ”

 

8)引用变量使用哪类引号

当需要使用变量时,心里要想一想:“该变量的值在使用之前是否会变化?”如果答案是肯定的,则使用强引用(也就是单引号)来防止$字符被解释,直至需要它们。否则,使用弱引用(双引号),从而允许$字符被立即解释。

 

9)使用转义字符的特殊码

只有BashTcsh允许使用这种的特殊码。

Bash可使用的特殊码:

工作目录:              ~表示法                    \w

工作目录:              只有基名                   \w

计算机主机名:                                     \h

当前用户标识:                                     \u

shell的名称:                                      \s

时间:AM/PM表示法                                  \@

时间:24小时制                                     \A

日期:                                             \d

历史列表:事件编号                                 \!

例:在Bash提示中显示时间和日期

export PS1=“\d \@ $ ”

两种有趣的变量RANDOMSECONDS

export PS1=‘Your lucky number is ${RANDOM} $ ’

export PS1=‘Working time: ${SECONDS} $ ’

 

10)命令替换

命令替换允许在一条命令中嵌入另一条命令。shell首先执行嵌入的命令,并且输出替换该命令。然后,shell再执行整个命令。

通过将一条命令封装在`(反引号)字符中,可以将它嵌入到另一条命令中,如:

echo “The time and date are `date`.”

使用basename可以抽取任何路径名的最后一部分,它的目的是一条完整的路径名,并输出路径名的最后一部分。例:

export PS1=“`basename ${SHELL}`$ ”

export PS1=“`whoami`$ ”

 

11)历史列表:fchistory

对于Bourne Shell家族,可以使用fc命令加上-llist,列举)显示历史列表,fc -l

对于C-shell家族,可以使用history命令:history

通过事件编号也可以调取并执行特定的命令。对于Bourne Shell,可以使用-ssubstitute,替换)选项的fc命令,后面跟事件编号,fc -s 24

对于C-shell来说,该命令只需键入一个!字符后接事件编号,!24 (无空格)

重新执行上一条命令:

fc -s  (Bourne Shell)

!!      (C-shell)

在重新执行命令前对命令进行小的修改:

fc -s pattern=replacement number

!number:s/pattern/replacement/

在两种情况中,patternreplacement指的是字符串,而number指的是事件编号。

例如,事件编号25是用vi编辑tempfile文件的命令,再次运行时,想编辑data文件,则:

fc -s tempfile=data 25

!25:s/tempfile/data

如果希望使用最近用过的命令,那么命令就比较简单。假如希望输入date,却不小心输成datq,而且将其运行。因此,您希望将q改成e,然后再重新执行这个命令。

对于fc -s来说,如果不指定事件编号,默认为上一条命令:

fs -s q=e

对于C-shell,可以使用下述语法:

^pattern^replacement

如在本例中:^q^e

提示:Bash有两个优点,一是既可以用fc命令,也可以使用history/!系统。其次,Bash支持一个额外的我,即使用^R(可以认为它是重新调用键)。按^R键并键入一种模式,然后Bash将重新调用包含该模式的最后一条命令。例如,调用最近一条ls命令,可以按^R键,然后再键入ls。如果得到的命令并不是希望的命令,可以再次按下^R键,获得包含该模式的下一条最近的命令。

名称fc代表“fix command, 修复命令”。这是因为当命令键入错误时,可以使用fc修改命令,然后再重新执行命令。

 

12)历史列表:设置大小

Bourne Shell:历史文件将被自动保存和恢复

C-shell:除非设置了shell变量savelist,否则将不会自动保存。

设置历史记录大小:

export HISTSIZE=50

set history=50

C-shell自动保存历史列表 set savelist=30

 

13)在shell提示中显示事件编号和工作目录

显示事件编号:

export PS1=“bash[\!]$ ”

export PS1=“ksh[!]$ ”

set prompt=“csh[\!]% ”

set prompt=“tcsh[%\!]> ”

显示工作目录和事件编号

export PS1=“(\w) bash[\!]$ ”

export PS1=“($PWD) ksh[!]$ ”

set prompt=“(\$PWD) csh[\!]% ”

set prompt=“(%~) tcsh[%\!]> ”

 

14)别名:aliasunalias

别名就是赋予一条命令或者一列命令的名称。

对于Bourne Shell,语法为:

alias [name=commands]          等号两边无空格

对于C-shell,语法为:

alias [name commands]

例: alias info=’date;who’              alias info ‘date;who’

alias a=alias                                          alias a alias

如果希望修改别名的含义,则只需重定义这个别名。

显示所有的别名,可以输入没有参数的alias命令:alias

使用unalias命令可以移除别名,该命令的语法为: unalias name

有时,为了临时挂起别名(只针对一条命令),只需在命令名称开关键入一条\(反斜线)字符,如:

\ls

别名示例:1) 避免删错文件

如要执行rm temp* extra?,先执行ls temp* extra?查看文件,避免删错,可使用fc -s ls=rm

为了更简单,可以定义一个del的别名:

alias del=’fc -s ls=rm’

对于C-shell家族,使用^ls^rm。由于技术原因,这条命令不能使用别名。相反,需使用命令rm !ls:*   为了使这条命令更容易使用,可定义一个别名

alias del ‘rm \!ls:*’

别名示例:2)从历史列表中重用命令

定义一个history的别名:

alias history=”fc -l”

alias h=history

接下来定义别名rrecall,调取)来取代fc -s,即从历史列表中调取命令并重新执行

alias r=”fc -s”

别名示例: 3) shell中显示工作目录(C-shell

alias cd ‘cd \!* && set prompt=“($PWD)% ”’

 

 

阅读(1689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~