SHELL初级(二)

来源:互联网 发布:oracle数据库导出数据 编辑:程序博客网 时间:2024/05/19 20:42

2 使用!应用事件
(1)!!  重新执行前一个事件   等同于fc -s

# drcomc logout

Logout Succeeded
You have used 3382 minutes, and 2085200K bytes

# !!
drcomc logout

Error, Already logged out

(2)!$  前一个命令行中的最后一个字
在!前面加/,或者用 ' ',可以 将!转义 ,使其成为一个普通字符
1 事件标识符
(3)!n 整数,可正可负
root@yaozhangjun-desktop:/home/yaozhangjun# PS1="[/u@/h /W /!]$"
[root@yaozhangjun-desktop yaozhangjun 218]$!216
drcomc logout

Error, Already logged out
如果n为负,表示执行从当前命令往前第n个事件

(4)!string :shell搜索并执行最近的以该文本串开头的事件
   !?string?:shell将执行最近的包含该文本串的事件
  #history 5
  216  drcomc logout
  217  PS1="[/u@/h /W /!]$"
  218  drcomc logout
  219  PS1="[/u@/h /W /!]#"
  220  history 5

#!d
drcomc logout

Error, Already logged out

#!?logout?
drcomc logout

Error, Already logged out
(5)

#!#ls    当前命令
ls
Desktop   Examples  Music    Public    Vedio  桌面
Document  Model     Picture  Software  yzj

9.6.3 Readline 库
1READERLINE命令补全:使用TAB来补全字(completion)路径名,文件名,变量名都可以按TAB补全,对于有相同的,还有再按一次才能显示目前相同的名称
2#bind -P                 :显示所有Readline命令列表

abort is not bound to any keys
accept-line can be found on "/C-j", "/C-m".
alias-expand-line is not bound to any keys

3#bind -q kill-whole-line    :查看某个命令绑定到哪个按键序列
kill-whole-line is not bound to any keys.

4.键绑定
(1)Keyname :command_name
e.g.   control-u:kill-whole-line
(2)"Keystroke_sequence":command_name

9.7 别名(alias):将一个较长的名字换成一个较短的名字,这些别名放在~/.bashrc中。其中名字可以是命令行,可以是带有变量名
alias[name[=value]]
别名不接受value中来自命令行的参数。别名不代替自己
如  alias ls='ls -F'

别名可以嵌套。在非交互式shell(shell脚本)中别名是被禁止的
#alias                :列出已经定义别名的列表
alias ls='ls --color=auto'
alias ll='ls -l'

9.7.1 别名中的单引号和双引号
如果别名中包含变量,选择单引号还是双引号非常重要
“value”:当创建该别名时,value中的任何变量都将展开
#echo $PWD
/home/yaozhangjun
#alias dirA="echo Working directory is $PWD"
#alias dirA
alias dirA='echo Working directory is /home/yaozhangjun'

‘value’:在使用该别名之前变量都不会展开
#alias dirB='echo Working directory is $PWD'
#alias dirB
alias dirB='echo Working directory is $PWD'

#cd yzj
[root@yaozhangjun-desktop yzj 243]#dirA
Working directory is /home/yaozhangjun
#dirB
Working directory is /home/yaozhangjun/yzj

9.8 函数
shell将函数存放在RAM中,而不是放在磁盘文件中,所以shell访问函数的速度比访问脚本的速度快
shell函数的声明放在~/.bash_profile初始化文件,可以使用unset删除函数。
[function] function-name()
{
commands
]
可以在break中中断函数执行

[root@yaozhangjun-desktop yaozhangjun 251]#unset whoson
[root@yaozhangjun-desktop yaozhangjun 252]#function whoson()
> {
> date
> echo "Users Currently Logged On"
> who
> }
[root@yaozhangjun-desktop yaozhangjun 253]#whoson
2009年 09月 24日 星期四 22:25:37 CST
Users Currently Logged On
yaozhangjun tty7         2009-09-24 20:59 (:0)
yaozhangjun pts/0        2009-09-24 20:59 (:0.0)
[root@yaozhangjun-desktop yaozhangjun 254]#

如果希望whoson函数总是有用,而不用每一次登录时都重新键入,可以将起定义放在~/.bash_profile中。然后用.(dot)命令运行.bash_profile,使其修改起效

调用函数时可以指定参数。在函数内部可以通过位置参数访问这些参数

$ arg1(){
> echo "$1"
> }
$ arg1 yaozhangjun
yaozhangjun

$ arg2(){
> echo '$1'
> }
$ arg2 miyase
$1

原创粉丝点击