zfzhuman123
发表于 2011-8-1 19:18:13
5.2 快键捷
快键捷 功能
命令行自动补全。使用 shell 提示时可使用这一命令。键入命令或文件名的前几个字符,然后按 键,它会自动补全命令或显示匹配你键入字符的所有命令,在gdb调试时也可使用这一功能。
连续按两次键,会对你所输入的未完成的命令,所有可能的形式进行联想提示。
+ + 切换屏幕。+ + [功能键之一]会显示一个新屏幕。根据默认设置,从 到 是 shell 提示屏幕, 是图形化屏幕。
+ + [←] 杀死你当前的 X 会话。杀死图形化桌面会话,把你返回到登录屏幕。如果正常退出步骤不起作用,你可以使用这种方法。
+ + 关机和重新引导操作系统。关闭你当前的会话然后重新引导 OS。只有在正常关机步骤不起作用时才使用这种方法。
+ 在图形化桌面环境中切换任务。如果你同时打开了不止一个应用程序,你可以使用 + 来在打开的任务和应用程序间切换。
+ 把光标移到行首。它在多数文本编辑器和 Mozilla 的 URL 字段内可以使用。
+ 把光标移到行尾。它在多数文本编辑器和 Mozilla 的 URL 字段内都可使用。
+ 清除当前行。如果你在终端下工作,使用这一快捷操作可以清除从光标处到行首的字符。
+ 清除当前行。如果你在终端下工作,使用这一快捷操作可以清除从光标处到行尾的字符。
+ 将当前光标位置处的字转为小写,不移动光标
+ 将当前光标位置处的字转为大写,不移动光标
+ 将当前光标位置前的字与光标位置上的字交换,交将光标移至新的下一字后
[鼠标中间键] 粘贴突出显示的文本。使用鼠标左键来突出显示文本。把光标指向你想粘贴文本的地方。点击鼠标中间键来粘贴它。在两键鼠标系统中,如果你把鼠标配置成模拟第三键,你可以同时点击鼠标的左右两键来执行粘贴。
[↑][↓] 显示命令历史。当你使用 shell 提示时,按[↑]或 [↓]箭头来前后查看你在当前目录下键入的命令历史。当你看到你想使用的命令时,按 键。
+ 清除终端。该快捷操作与在命令行键入 clear 作用相同。__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:18:26
+ 从 shell 提示中注销(并关闭)。使用该快捷键,你就不必键入 exit 或 logout。
clear 清除 shell 提示屏幕。在命令行下键入它会清除所有这个 shell 提示屏幕中显示的数据。
exit 注销。在 shell 提示中键入它会注销当前的用户或根用户帐号。
history 显示命令历史。在 shell 提示中键入它来显示你所键入的被编号的前 1000 个命令。要显示较短的命令历史,键入histor之后空一格,再键入一个数字。例如:history 20。
reset 刷新 shell 提示屏幕。如果字符不清晰或乱码的话,在 shell 提示下键入这个命令会刷新屏幕。
string+ 输入一个历史命令的前几个字符,再按可以自动完成包含该字符串的最近的历史命令的输入,多按几次键,可以在包含该字符串的历史命令里面遍历。
string+
string+ 输入一个历史命令的前几个字符,再按和键,可以在包含该字符串的历史命令里面上下遍历。
5.3 命令的别名
适当使用别名,即可以做到让比较长的命令更容易记住,也便于输入,从而可以提高工作效率。
5.3.1 alias
指令名称: alias
使用权限: 所有使用者
使用方式: alias [-p] ... ]
说 明: 为你经常使用的命名起个别名,特别是对于那些经常有着指定参数的命令,或者命令的名称及参数很长的命令,可以起一个易记的名字
参 数: name:是你自己定义的名称
value:表示该别名关联的真实命令名及参数
范 例: 显示系统所定义的所有别名
alias
显示别名“dir”的定义:
alias dir
定义一个新的别名
alias mydir='ls -al'
注意:这儿定义的只是一个临时的别名,下次登录时,该别名便不存在了,要想定义的别名每次登录皆可使用,可以将别名定义在~/.alias文件中__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:18:38
5.3.2 SuSE8.0内建别名
别名 定义 意义
+ pushd . 将当前目录压入目录栈中
- popd 将目录栈底的目录弹出,并进入该目录
.. cd .. 进入上一级目录
... cd ../.. 进入上二级目录
dir ls -l 以列表方式显示当前目录下的文件和文件夹
md mkdir -p 以指定的路径名,创建目录
o less 调用less命令查看文档
rd rmdir 删除空目录的命令
5.3.3 为ims_omu扩展的别名
以下是为我们项目所建的别名,使用时,只需将这儿提供的.alias文件拷贝到/home/ims_omu/目录下,再重新登录,即可使用这些别名,当然你也可以扩充这儿定义的别名。
.alias文件内容如下:
cdbin() { cd $IMAP_ROOT/bin/${1+"$@"}; }
cdcode() { cd $IMS_INSTALL_DIR/codes/source/${1+"$@"}; }
alias startsvc='svc_adm -cmd startsvc${1+"$@"}'
alias stopsvc='svc_adm -cmd stopsvc${1+"$@"}'
alias status='svc_adm -cmd status'
alias admin='lem_admin'
alias pids='ps -ef|grep${1+"$@"}'
alias pid='svc_adm -cmd status|grep${1+"$@"}'__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:18:49
别名 定义 意义
cdbin cd $IMAP_ROOT/bin/${1+"$@"} 直接进入bin目录
cdcode cd $IMS_INSTALL_DIR/codes/source/${1+"$@"} 直接进入codes目录
startsvc svc_adm -cmd startsvc${1+"$@"} 开始某一进程,比如startsvc tm
stopsvc svc_adm -cmd stopsvc${1+"$@"} 停止某一进程,比如stopsvc tm
status svc_adm -cmd status 显示所有进程状态
admin lem_admin lem_admin别名
pid svc_adm -cmd status|grep${1+"$@"} 查看某一进程主ID,比如
pid tm
pids ps -ef|grep${1+"$@"} 查看某一进程所有ID,比如
pids tm
hs history${1+"$@"} history命令的别名
pd pushd${1+"$@"} pushd命令的别名
5.4 历史命令
5.4.1 history
指令名称: history
使用权限: 所有使用者
使用方式: history [选项][文件名]
说 明: 显示或操作历史命令列表
参 数: N 仅显示历史命令列表中最后N条记录
-c 清空历史命令列表
范 例: 显示完整的历史命令列表
history
显示最后8条命令
history 8
清空历史命令列表
history -c__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:19:08
5.4.2 history扩展
可以使用以下history扩展方法,操纵和重复执行历史命令:
事件指定符 意义 例子
!N 历史命令列表中第N个事件 !8 命令列表中第8个命令
!-N 当前行之前的第N行 !-6 6行之前的命令
!! 上一次执行的命令 !! 上一次执行的命令
!string 最近用到的以string开始的命令 !grep 最近使用的以字符串grep开始的命令(一般是最后使用的grep命令)
!?string[?] 最近使用的包含string的命令 !?cut? 最近使用包含cut字符串的命令
string + 自动完成该历史命令的输入。 ls再按键,自动完成以ls为首的最近的历史命令的输入
5.5 目录栈操作
灵活使用目录栈操作,可以在常用的目录之中漫游,减少目录切换时,过多的输入目录路径的工作量。
5.5.1 dirs
指令名称: dirs
使用权限: 所有使用者
使用方式: dirs [+n][-n]
说 明: 显示目录堆栈,从左到右列出目录椎栈中目录的绝对路径名,第一个是栈顶的目录(当前目录)
参 数: +N 显示从栈顶算起的第n个目录项(栈顶的目录项索引号为0)
-N 显示从栈底算起的第n个目录项(栈底的目录项索引号为0)
-c 只将当前目录保留在堆栈中,清除目录堆栈中其余的目录项
-l 显示目录的绝对路径名
-v 显示堆栈项,每行一个,带索引号为
范 例: 显示当前的目录栈
dirs
带绝对路径,每行一个,带索引号的显示目录栈
dirs –l –v__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:19:22
5.5.2 pushd
指令名称: pushd
使用权限: 所有使用者
使用方式: pushd [-n]
pushd [-n] [+N][-N]
说 明: 第一条语法:将directory压入目录堆栈;如果不带参数,则交换栈顶的两个目录项
第二条语法:循环移动目录堆栈,将第n项移到栈顶
参 数: +N 循环移动堆栈,把从栈顶算起的第n项移到栈顶(栈顶项的索引号为0)
-N 循环移动堆栈,把从栈底算起的第n项移到栈顶(栈底项的索引号为0)
-n 不让新压入的目录成为当前目录
范 例: 参见5.5.4范例
5.5.3 popd
指令名称: popd
使用权限: 所有使用者
使用方式: popd[-n][+N][-N]
说 明: 从目录堆栈中删除目录,并进入到新的栈顶目录,如果不带参数,则删除栈顶目录
参 数: +N 从目录堆栈中删除第n项目录(栈顶项的索引号为0)
-N从目录堆栈中删除第n项目录(栈底项的索引号为0)
-n 不改变当前目录
范 例: 参见5.5.4范例
5.5.4 范例
1、 创建以下目录
cd (不带参数,直接进入主目录)
mkdir -p a1/a2/a3
mkdir -p b1/b2/b3/b4/b5
mkdir -p c1/c2/c3/c4
2、 依次进入以下目录,并将目录压入栈中
cd a1/a2/a3
pushd . (或者使用别名“+”)
cd ~/b1/b2/b3/b4/b5
pushd . (或者使用别名“+”)
cd ~/c1/c2/c3/c4
pwd (这时当前目录为)
输出示例:
/home/p40068/c1/c2/c3/c4
dirs -l –v (查看目录栈)
输出示例:
0/home/p40068/c1/c2/c3/c4
1/home/p40068/b1/b2/b3/b4/b5
2/home/p40068/a1/a2/a3__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:19:34
3、 在目录栈中漫游
pushd +2 (或者pushd -0,直接切换到~/a1/a2/a3目录中)
pwd (这时当前目录为)
输出示例:
/home/p40068/a1/a2/a3
dirs -l –v (查看目录栈)
输出示例:
0/home/p40068/a1/a2/a3
1/home/p40068/c1/c2/c3/c4
2/home/p40068/b1/b2/b3/b4/b5
pushd (再次切换到~/c1/c2/c3/c4目录中)
pwd (这时当前目录为)
输出示例:
/home/p40068/c1/c2/c3/c4
dirs -l –v(查看目录栈)
输出示例:
0/home/p40068/c1/c2/c3/c4
1/home/p40068/a1/a2/a3
2/home/p40068/b1/b2/b3/b4/b5
popd (或者使用别名“-”,将当前目录从栈中弹出,并进行栈中下一目录)
pwd (这时当前目录为)
输出示例:
/home/p40068/a1/a2/a3
dirs -l –v(查看目录栈)
输出示例:
0/home/p40068/a1/a2/a3
1/home/p40068/b1/b2/b3/b4/b5
popd (或者使用别名“-”,将当前目录从栈中弹出,并进行栈中下一目录)
pwd (这时当前目录为)
输出示例:
/home/p40068/b1/b2/b3/b4/b5
dirs -l –v(查看目录栈)
输出示例:
0/home/p40068/b1/b2/b3/b4/b5__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:19:48
6 重定向和管道
6.1 重定向
操作符 作用
< file 输入重定向到文件file
> file 输出重定向到文件file
>> file 追加标准输出到文件file;如果文件不存在,就新建它
0 < file 输入重定向到文件file
1 > file 输出重定向到文件file
2 > file 错误重定向到文件file
1 >> file 追加标准输出到文件file
2 >> file 追加标准错误到文件file
<& m 关联标准加入到文件描述符m
>& m 将标准输出关联到文件描述符m
m >& n 关联文件描述符m到文件描述符n
<&- 关闭标准输入
>&- 关闭标准输出
m <&或m >&- 将文件描述符m关闭
> &file 标准输出和出错输出重定向到文件file
>| file 忽略noclobber变量将标准输出送到文件file
n >| file 忽略noclobber变量将文件描述符n强制输出到文件file
<> file 将标准输入和输出都分配给文件file
n < file 将文件file设为文件描述符n
n > file 将文件描述符n指向文件file
cmd1 | cmd2 将命令“cmd1”的输出送到命令“cmd2”的输入中
例如,如果要将编译和连接TestMap.cpp文件的正常结果输出到result.txt文件,而将编译时产生的错误输出到error.txt文件中,可以使用以下语句:
g++ -g TestMap.cpp -o TestMap 1> result.txt 2> error.txt__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:21:53
6.2 管道
Linux系统允许一条命令的标准输出成为另外一条命令的标准输入。通过下面的命令句法,可以用管道字符“|”来实现。
语法:command1 | command2 | command3 | ... | commandN
目的:“命令1”的标准输出连接到“命令2”的标准输入,“命令2”的标准输出连接到“命令3”的标准输入,......,“命令N-1”的标准输出连接到“命令N”的标准输入。
所以管道允许用户将一条命令的标准输出作为另外一条命令的标准输入。用管道连接的那些命令叫做过滤器(filter)。一个过滤器是一组Linux的命令,它们从标准输入中得到输入,经过一系列指定方式的处理,将结果送到标准输出。一些经常用到的过滤器是:cat、compress、crypt、grep、gzip、lp、pr、sort、tr、uniq和wc。
7 正则表达式介绍
正则表达式,是linux操作系统比起windows操作系统,在操作易用性方面,占有优势的为数不多的几个特性之一,使用正则表达式的工具有:awk,ed,egrep,grep,sed和vi。不过这些工具对正则表达式的支持程序不尽相同,其中awk和egrep能较好地支持正则表达式,grep对正则表达式的支持则较少,了解正则表达式的定义,不仅可以在实际操作中,减少重复的工作量,在读别人开发的shell脚本时,也有很大的帮助。
7.1 基本元字符集及其含义
名称 操作符 使用举例 意义 支持的工具
析取 | x|y|z x、y或者z awk,egrep
任意字符 . /L..e/ Love,Live,Lose 所有工具
字符串首字符 ^ ^x 以字符x开始的串 所有工具
连接 xyz xyz 所有工具
字符串尾字符 $ x$ 以字符x结束的串 所有工具
转义字符 \ \* * ed,sed,vi
组合 ()或者\(\) (xy)+ xy,xyxy,xyxyxy,... 所有工具
可选 ? xy? x,xy,xyy,xyyy,... awk,egrep
重复(零次或更多) * xy* xy,xyy,xyyy,... 所有工具
重复(一次或更多) + xy+ xy,xyy,xyyy, 所有工具
集合 [] ello Hello,hello 所有工具
补集 [^] [^A-KM-Z]ove Love 所有工具
pattern\{n\} 用来匹配前面pattern出现次数。n为次数 所有工具
pattern\{n,\}m 含义同上,但次数最少为n 所有工具
pattern\{n,m\} 含义同上,但pattern出现次数在n和m之间 所有工具
注:其中集合类操作符[],表示匹配[]内任何字符。可以是一个单字符,也可以是字符序列。也可以使用-表示[]内字符序列范围,如用代替。__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:22:06
6.2 管道
Linux系统允许一条命令的标准输出成为另外一条命令的标准输入。通过下面的命令句法,可以用管道字符“|”来实现。
语法:command1 | command2 | command3 | ... | commandN
目的:“命令1”的标准输出连接到“命令2”的标准输入,“命令2”的标准输出连接到“命令3”的标准输入,......,“命令N-1”的标准输出连接到“命令N”的标准输入。
所以管道允许用户将一条命令的标准输出作为另外一条命令的标准输入。用管道连接的那些命令叫做过滤器(filter)。一个过滤器是一组Linux的命令,它们从标准输入中得到输入,经过一系列指定方式的处理,将结果送到标准输出。一些经常用到的过滤器是:cat、compress、crypt、grep、gzip、lp、pr、sort、tr、uniq和wc。
7 正则表达式介绍
正则表达式,是linux操作系统比起windows操作系统,在操作易用性方面,占有优势的为数不多的几个特性之一,使用正则表达式的工具有:awk,ed,egrep,grep,sed和vi。不过这些工具对正则表达式的支持程序不尽相同,其中awk和egrep能较好地支持正则表达式,grep对正则表达式的支持则较少,了解正则表达式的定义,不仅可以在实际操作中,减少重复的工作量,在读别人开发的shell脚本时,也有很大的帮助。
7.1 基本元字符集及其含义
名称 操作符 使用举例 意义 支持的工具
析取 | x|y|z x、y或者z awk,egrep
任意字符 . /L..e/ Love,Live,Lose 所有工具
字符串首字符 ^ ^x 以字符x开始的串 所有工具
连接 xyz xyz 所有工具
字符串尾字符 $ x$ 以字符x结束的串 所有工具
转义字符 \ \* * ed,sed,vi
组合 ()或者\(\) (xy)+ xy,xyxy,xyxyxy,... 所有工具
可选 ? xy? x,xy,xyy,xyyy,... awk,egrep
重复(零次或更多) * xy* xy,xyy,xyyy,... 所有工具
重复(一次或更多) + xy+ xy,xyy,xyyy, 所有工具
集合 [] ello Hello,hello 所有工具
补集 [^] [^A-KM-Z]ove Love 所有工具
pattern\{n\} 用来匹配前面pattern出现次数。n为次数 所有工具
pattern\{n,\}m 含义同上,但次数最少为n 所有工具
pattern\{n,m\} 含义同上,但pattern出现次数在n和m之间 所有工具
注:其中集合类操作符[],表示匹配[]内任何字符。可以是一个单字符,也可以是字符序列。也可以使用-表示[]内字符序列范围,如用代替。__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:22:20
7.2 常用正则表达式举例
语法 作用
^ 行首
$ 行尾
^ 以the开头行
ignal 匹配单词signal,signaL,Signal,SignaL
ignal\. 同上,但加一句点
包含may大写或小写字母的行
^USER$ 只包含USER的行
$ 以tty结尾的行
\. 带句点的行
^d..x..x..x 对用户,用户组及其他用户组成员有可执行权限的目录
^[^l] 排除关联目录的目录列表
[.*0] 0之前或之后加任意字符
000或更多个
大写或小写I
大写或小写i或n
[^$] 空行
^......$ 包括6个字符的行
任意单字符
* 至少一个小写字母
[^0-9\$] 非数字或美元标识
[^0-9A-Za-z] 非数字或字母
1到3中一个数字
evice 单词device或Device
De..ce 前两个字母为De,后跟两个任意字符,最后为ce
\^q 以^q开始的行
^.$ 仅有一个字符的行
^\. 以一个句点和两个数字开始的行
‘”Device”’ 单词device
Deice\. 单词device或deVice
\{2\}-\{2\}-{4\} 日期格式dd-mm-yyyy
\{3\}\.\{3\}\.\{3\}\.\{3\} IP地址格式nnn.nnn.nnn.nnn
[^.*$] 匹配任意行__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:22:31
8 Shell基础知识
8.1 Shell简介
Shell是一种具备特殊功能的程序, 它是介于使用者和linux 操作系统之核心程序(kernel)间的一个接口。为什么我们说 shell 是一种介于系统核心程序与使用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command) 或是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?
其实shell 也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,然后执行它。
各种操作系统都有它自己的 shell,以 DOS 为例,它的 shell 就是 command.com文件,Linux 下的shell主要有下列几种,Suse8.0下缺省的shell是Bash,并且可以看到sh是链接到bash的,所以使用sh和bash效果相同。
Shell 系统中的位置 程序名
Bourne /bin/sh sh
Bourne Again /bin/bash bash
C shell /bin/csh csh
TC shell /bin/tcsh tcsh
Korn shell /bin/ksh ksh
Z shell /bin/zsh zsh
8.2 Bash简介
Bash不仅仅是一个命令解析程序。它本身拥有一种程序设计语言,使用这种语言,可以编写shell脚本来完成各种各样的工作,而这些工作是使用现成的命令所无法完成的,Bash脚本可以使用if-then-elif-else-fi语句, for语句,while语句,until语句,break和continue命令,以及case语句,结合Bash中各种各样的条件测试语句,从而动态决定你的脚本实际运行的分支及动作,达到灵活及强大的处理功能。__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:22:43
8.3 Bash的环境变量
8.3.1 可修改的环境变量
环境变量名 变量的用途
CDPATH 包含cd命令要逐个查找的路径,cd命令在这些路径下查找作为参数传递给它的目录名。如果CDPATH没有设置,cd命令则查找当前目录
EDITOR 用户在程序中使用的默认编辑器,例如E-mail程序elm
ENV Linux查找配置文件的路径
HOME 当第一次登录时,主目录的名字
HISTFILE 存放历史记录的文件的路径名
PATH 搜索命令或者程序的所有目录
PS1 在命令行中出现的shell提示符
PWD 当前工作目录的名字
TERM 用户使用的控制台终端的类型
8.3.2 只读的环境变量
环境变量名 变量的用途
$0 程序的名字
$1~$9 命令参数1~9的值
$* 所有命令行参数的值
$@ 所有命令行参数的值。如果$@被“”包括,即“$@”,这相当于其中的每一个参数的值被“”包括,相反,如果$*被“”包括,即“$*”,这就相当于所有的参数值作为一个串被“”包括。这就是$@同$*在被“”包括的时候的差别,其他时候这二者是等价的
$# 记录了命令行参数的总个数
$$ 当前进程的ID号
$? 最近一次命令的退出状态
$! 最近一次后台进程的ID号
8.3.3 读写shell变量
特殊字符 用途 描述
$variable 得到一个变量的值,如果没有被初始化则为null 返回“variable”的值,如果没有被初始化则返回null
${variable} 得到一个变量的值,如果没有被初始化则为null,通常在其他东西要添加到变量值的时候使用 返回“variable”的值,如果没有被初始化则返回null
${variable:-string} 得到一个变量的值,如果这个变量没有被定义则返回一个确定的值 当“variable”存在而且不是空值的时候返回变量的值,否则返回“string”
${variable:=string} 如果一个变量没有被定义则把一个已知的值赋给它并返回一这个值 当“variable”存在而且不是空值的时候返回变量的值,否则把“string”赋给“variable”,并返回“string”
${variablehttp://bbs.chinaunix.net/images/smilies/default/icon_confused.gifstring} 如果变量没有被定义则显示一条消息 当“variable”存在而且不是空值的时候返回变量的值,否则显示字符串“variable:”,并在其后显示“message”
${variable:+string} 测试一个变量存在与否 当“variable”存在而且不是空值的时候返回返回“string”,否则返回“string”__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:22:54
8.4 Bash的启动文件
文件名 功能描述
/etc/profile 登录时自动执行
~/.bash_profile,~/.bash_login,~/.profile 登录时自动执行
~/.bashrc shell登录时自动执行
~/.bash_logout 退出时自动执行
~/.bash_history 记录最近会话的命令
/etc/passwd 记录用户资源等信息
8.5 Bash的元字符
元字符 作用 例子
回车换行 结束一个命令
空格 分割命令行中的元素 ls /etc
Tab 命令自动补全
# 开始一行注释 #This is a comment line
“ 引用多个字符但是允许替换 “$file”.bak
$ 表示一行的结束以及显示变量的值 $PATH
& 让一个命令在后台执行 command &
‘ 单引号,引用多个字符 ‘$100,000’
() 在子shell中执行命令 (command1;command2)
* 匹配0个或者多个字符 chap*.ps
[] 插入通配符 或者
^ 表示一行的开始以及作为否定符号 [^3-8]
` “Esc”键正下方键,替换命令 PS1=`command`
{} 在当前shell中执行命令 {command1;command2}
| 创建命令间的管道 command1 | command2
; 分割顺序执行的命令 command1; command2
< 重定向命令的输入 command < file
> 重定向命令的输出 command > file
? 匹配单个字符 lab.?
/ 用作根目录或者路径名中的分割符 /usr/bin
\ 转义字符;转义回车换行字符,允许在下一行中继续shell命令 command arg1 \arg2 arg3\?
! 启动历史记录列表中的命令和当前命令 !!,!4
~ 代表主目录 ~/.bashrc
8.6 Shell的条件测试
条件测试在Shell脚本的编写时,占有重要的地位,因为它直接决定你的脚本实际执行的分支路径,可使用以下两种形式:
test condition
或者
[ condition ]
使用方括号时,要注意在条件两边加上空格。__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:23:05
8.6.1 测试文件状态
表达式 返回值
-d file 如果这个文件是一个目录,返回true
-f file 如果这个文件是一个普通文件,返回true
-r file 如果这个文件是只读的,返回true
-s file 如果这个文件长度非0,返回true
-t 如果文件描述符filedes的联系着终端的,返回true
-w file 如果这个文件是可写的,返回true
-x file 如果这个文件是可执行的,返回true
-b file 如果这个文件是块特殊文件,返回true
-c file 如果这个文件是字符串特殊文件,返回true
-e file 如果这个文件存在,返回true
-l file 如果这个文件存在而且是一个符号链接文件,返回true
8.6.2 测试时使用逻辑操作符
表达式 含义
!expression 逻辑非操作符:当后面的expression为false时,返回true
(expression) 用于把表达式分组的括号,在每个括号的前后至少要有一个空格
expression-a expression 逻辑与操作符:当左右的表达式均为true时才返回true
expression-o expression 逻辑或操作符:当左边或者右边的表达式为true,则返回true
8.6.3 字符串测试
表达式 返回值
str 如果str是一个非空字符串,则返回true
str1 = str2 如果str1等于str2,则返回true
str1 != str2 如果str1不等于str2,则返回true
-n str 如果str的长度大于0,则返回true
-z str 如果str的长度为0,则返回true
8.6.4 测试数值
表达式 返回值
int1 –eq int2 如果int1等于int2,则返回true
int1 –ge int2 如果int1大等于int2,则返回true
int1 –gt int2 如果int1大于int2,则返回true
int1 –le int2 如果int1小等于int2,则返回true
int1 –lt int2 如果int1小于int2,则返回true__________________________________
╭∩╮(︶︿︶)╭∩╮
zfzhuman123
发表于 2011-8-1 19:23:18
8.7 编写自已的Shell脚本
#!/bin/sh
# usage: demo vars...
echo $@
以上是一个标准的Shell脚本的格式,第一行告诉解释程序,强制当前的shell,使用bash执行这个脚本,第二行是该脚本的注释,一般是使用该脚本的用法,第三行是脚本真正的执行,这个例子里,仅仅是把用户输入的参数回显到标准输出上,将上述脚本保存在名为demo文件里。
8.8 执行Shell脚本
有二种方式可以运行一个Bash脚本:
1、 为脚本文件加上可执行权限,然后执行:
chmod u+x demo
./demo This is test string!
脚本输出:
This is test string!
2、 运行/bin/bash命令并且把脚本名作为它的参数:
/bin/bash demo This is test string!__________________________________
╭∩╮(︶︿︶)╭∩╮
汇编壹加壹
发表于 2011-9-26 13:21:56
还有玩linux的好我也学习一下
㊣版小卡
发表于 2011-10-5 08:44:55
{:5_103:}也许。。。用得着。。。
dengyigod
发表于 2011-11-15 13:23:07
有些都是错误的,什么情况,怎么搞的呢?
ghlfen
发表于 2011-11-29 12:38:43
看着有点小乱、