admin 管理员组

文章数量: 1086019


2024年4月17日发(作者:haskell语言入门教程)

Shell 脚本基础学习笔记

版本历史

V1

详细内容

新建

时间

2010

修订者

hxghan@

shell脚本的解释用“#”号,本文档为了习惯方便,解释大都用“//”,也有用“#”的

SHELL 最基本的语法

shell内部变量

$#

$*

将存放命令行传入的所有参数

所有的命令行参数。

“$*”表示shell文件的所有参数及其空格连在一起作

为单个词处理;

同上,稍有区别。

“$@”与shell文件接收的参数等价,参数中的空格

被忽略,其结果是等同于原来参数的一个单词列表

Shell的选择项

上次执行命令返回值

Shell的进程标识符

用&启动的最后一个命令的进程标识符

参数分割词的字符表

信件文件,当其改变时给出信息you have mail

搜索命令的目录表

提示符串,缺省为$

后继命令行提示符,缺省为>

逻辑表达式

s1 = s2

s1 != s2

-n s1

-z s1

d1 lt d2

d1 le d2

d1 eq d2

d1 ge d2

d1 gt d2

-b fname

-c fname

若字符串 s1等s2一样

若字符串 s1 不等于 s2 则运算结果为真

若字符串s1不为零则为真

字符串s1空为真

数值比较运算符

若d1小于d2则运算结果为真,否则为假

若d1小于或等于d2则运算结果为真,否则为假

若d1等于d2则结果为真否则为假

若d1大于或等于d2则运算结果为真,否则为假

若d1大于 d2则运算结果为真,否则为假

文件判断运算符

若fname存在且为块设备则结果为真,否则为假

若fname存在且为字符文件,则结果为真否则为假

$@

$-

$?

$$

$!

$IFS

$MAIL

$PATH

$PS1

$PS2

-d fname

-f fname

-h fname

-r fname

-s fname

-w file

-x file

若fname存在且是一个目录则结果为真,否则为假

若fname存在且是一个普通文件则结果为真否则为

若fname存在且为一个隐含文件,则结果为真,否则为

若fname是可读的,则结果为真,否则为假

若fname的长度不为零,则结果为真 否则为假

文件可写返回真

文件可执行返回真

基本元字符集及其含义(2008-05-24)

abc 表示 abc 三個連續的字符, 但彼此獨立而非集合. (可簡單視為三個 char set)

(abc) 表示 abc 這三個連續字符的集合. (可簡單視為一個 char set)

a|b 表示單一字符, 或 a 或 b .

(abc|xyz) 表示或 abc 或 xyz 這兩個 char. set 之一. (註二)

[abc] 表示單一字符, 可為 a 或 b 或 c . (與 wildcard 之 [abc] 原理相同)

[^abc] 表示單一字符, 不為 a 或 b 或 c 即可. (與 wildcard 之 [!abc] 原理相同)

^ 只匹配行首

$ 只匹配行尾

* 只一个单字符后紧跟*,匹配0个或多个此单字符

[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-表示[ ]内字符序列范围,如用[ 1 -

5 ]代替[ 1 2 3 4 5 ]

只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有特殊含义。可以使其失去应有

意义

. 只匹配任意单字符

p a t t e r n { n } 只用来匹配前面p a t t e r n出现次数。n为次数

p a t t e r n { n, }含义同上,但次数最少为n

p a t t e r n { n,m }含义同上,但p a t t e r n出现次数在n与m之间

现在详细讲解其中特殊含义

1、使用句点匹配单字符

例一:beg.n:以beg开头,中间夹一个任意字符。

例二:. . . .X C. . . .:共10个字符,前四个之后为XC

例三:列出所有用户都有写权限的目录或文件 :

ls -l |grep ...x..x..x

2、行首以^匹配字符串或字符序列

^只允许在一行的开始匹配字符或单词。

例如,使用ls -l命令,并匹配目录。

$ ls -l | grep ^d

3、在行尾以$匹配字符串或字符

可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。

例一:列出文件中所有以单词common结尾的行

$grep common$


本文标签: 字符 文件 匹配 参数 结果