您的位置:首页 > 运维架构 > Shell

Unix&Linux大学教程:13 使用shell:命令和定制

2011-04-16 15:30 811 查看
13 使用shell:命令和定制

13.1 元字符
$,<,>,&......

13.2 引用和转义
/
echo /(foo/) 输出:(foo)
echo '<$TERM>' 输出:<$TERM>
echo "<$TERM>" 输出:<xterm> " **** "中保留了"$"(美元),"`"(反引号),"/"(反斜线)的特殊含义

13.3 强引用和弱引用
单引号 强引用(strong quote)
双引号 若引用(weak quote)
反斜线 最强引用,可以引用任何符号

练习下面命令即可明白:
echo Don/'t let gravity get you down

echo This is a very, very long/
line that goes on and on for a /
very, very long time.

echo 'This line ends without a second quote

echo 'This line ends without a matching quote
and here is the missing quote'

13.4 shell内置命令:type
内置命令:shell在自己的进程内运行该命令
外部命令:shell搜索合适的程序,然后以一个单独的进程运行该命令。

type command... 查看某条命令是不是内部命令
type date time set

13.5 学习内部命令
apropos builtin 查看系统是否有内置命令的说明文档

例:
ubuntu:~$ apropos builtin
bash-builtins (7) - bash built-in commands, see bash(1)
builtins (7) - bash built-in commands, see bash(1)
ubuntu:~$ man bash-builtins

help 显示所有内置命令的摘要列表
help 每次一屏
help set history kill 显示一条或多条具体命令的信息
help -s pwd kill 只希望查看一条或多条命令的语法(syntax)
help [-s] case for 查看shell关键字语法

13.6 外部命令及搜索命令
外部命令:date,ls...
shell如何知道在什么地方查找外部命令呢?shell检查PATH环境变量.
echo $PATH 显示PATH变量的值

13.7 修改搜索路径
Bourne Shell C-Shell
export PATH="/bin:/usr/bin:/usr/local/bin" set path=(/bin /usr/bin/ usr/local/bin)
export PATH="$PATH:$HOME/bin" set path=($path $HOME/bin) 添加路径
export PATH="$HOME/bin:$PATH:" set path=($HOME/bin $path) 将添加的路径放在前面,检索path时将先对它检索
export PATH="$HOME/bin:$PATH:." set path=($HOME/bin $path .) 包含当前工作路径

whereis date ls 查找程序安装路径

13.8 黑客如何使用搜索路径
将工作目录(.)放到搜索路径中比较方便,但是超级用户(root)或者其他拥有特殊权限的用户最好不要这样做,这样做可能导致安全灾难.P258
黑客可利用此漏洞安装后门。
提示:确保所有的系统管理员账户标示(包括root)使用的搜索路径中没有包含工作目录(.),或者用户可能访问的其他任何目录。

13.9 shell提示
超级用户 Bourne shell(Bash,Korn) C-shell Tcsh
# date $ date % date % date 或 > date

13.10 修改shell提示
export PS1="$ " Bourne Shell
set prompt = "%" C-Shell

??1:输入env查看PS1时没找到,而用echo能输出PS1的值。

13.11 使用变量的值
echo "My userid is ${USER}." 好习惯,即使不是必需。
echo "My userid is $USER."

将用户表示插入到提示中:
export PS1="${USER}$ " B-Shell
set prompt = "${USER}% " C-Shell
体验:
export PS1='Your lucky number is ${RANDOM} $'
export PS1='Working time: ${SECONDS} seconds $ '
??2:这里的单引号为什么能够识别"$"

13.12 引用变量时使用哪类引号
export PS1="${USER}$ " $USER是已经确定的值,所以有用双引号
export PS1='Your lucky number is ${RANDOM} $' $RANDOM的值不断改变的,此处$字符保留下来,等使用的时候$字符才被解释,所以用单引号,??2得解。

13.13 使用转义字符的特殊码
见P264的表

13.14 命令替换
shell最强大特性:命令替换(Command substitution) !
例:
echo “The time and date are `date`.” 注:`date`外是反引号,不是单引号。

抽取路径名的最后部分:
basename /bin/bash 输出:base

export PS1="`basename ${SHELL}`$ " bash/ksh
set prompt = "`basename ${SHELL}`% " csh
set prompt = "`basename ${SHELL}`> " tsh

export PS1="`hostname -s`$ "
set prompt = "`hostname -s`% "

export PS1="`whoami`$ "
set prompt = "`whoami`% "

13.15 键入命令并进行修改

13.16 历史列表:fc,history
fc -l B-Shell
history C-Shell

调取并执行特定的命令:
fc -s 24 B-Shell
!24 C-Shell

重新执行输入前的最后一条命令:
fc -s B-Shell
!! C-Shell

重新执行前对命令进行小幅修改:
fc -s tempfile=date 25 B-Shell
!25:s/timepfile/data/ C-Shell

希望使用最近用过的命令并进行修改:
例:$datq 输入出错
fc -s q=e B-Shell
^q^e C-Shell 注:'^'不是Ctrl键


fc - "fix command"

13.17 历史列表:设置大小
export HISTSIZE=50
set history=50

13.18 历史列表示例:避免删错文件
rm temp* extra? *匹配0个或多个,?匹配一个

先输入:ls -temp* extra?
确认没有不该删除的文件后
再输入:fc -s ls=rm (或 ^ls^rm C-shell)

13.19 在shell提示中显示事件编号&工作目录
export PS1="bash[/!]$ "
export PS1="ksh[!]$ "
set prompt = "csh[/!]% "
set prompt = "csh[%/!]>%"

Shell 特殊码
Bash /!
Korn Shell !
C-Shell !
Tcsh %!

/w显示工作目录,/!显示当前事件编号
export PS1="(/w) bash[/!]$ " Bash
export PS1='($PWD) ksh[!]$ ' Korn Shell,强引用
export PS1="(/$PWD) ksh[!]$ " Korn Shell,弱引用

13.20 自动补全
shell 补全单词 显示所有可能
Bash <Tab> <Tab><Tab>
Korn Shell <Esc><Esc> <Esc>=
C-Shell <Esc> ^D
Tcsh <Tab> ^D

C-Shell需要打开自动补全功能:set filec,最好将此命令放置在初始化文件中。

13.23 命令行编辑:bindkey
set -o vi
set -o emacs

Tcsh: bindkey -e
bindkey -v

13.24 别名:alias,unalias
alias [name=commands] B-Shell
alias [name commands] C-Shell

alias info='date; who' 注:此处命令之间用“;”
alias info 'date; who'

unalias info 移除别名
unalias -a(* C-Shell) 移除所有别名

13.25 临时挂起别名
/ls

13.26
13.27
13.28
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: