UNIX Shell编程总结

1, 文件及权限
chmod who [operator] [permission] filename
相对模式:
operator: +/-
permission:r,w,x,l(给文件加锁),s(设置文件宿主或组set_ID),t(粘帖位)
绝对模式:
权限: r(2), w(4), x(1)
uid:  owner(set_uid)(2), group(set_gid)(4), 粘帖位(1)
设置uid时把uid的绝对组合数字放在最前面
umask:
允许设置文件创建时的缺省模式, 对每一类用户存在相应的mask数字, 对于文件该值最大为6, 因为系统不允许在创建文件时赋予执行权限, 对于目录来讲最大值为7, 例子:
(目录) umask: 101    对应的权限为676
2, 文件名替换
*  匹配任何字符串
?  匹配单个字符串
[...] 匹配其中的任何字符
[!...]匹配非!之后的字符
3, shell 的输入与输出
echo 输出语句
read 变量1 变量2 ...
cat  用来显示文件 分割显示文件 显示控制字符
tee  把一个副本传递到标准输出同时也把另一个副本COPY到相应的文件中
shell 3个相关的文件描述符:
0 标准输入
1 标准输出
2 标准错误
文件重定向:
>   定向到文件
>>  追加到文件
对标准错误重定向时必须是文件描述符:
command 0/1/2 >/>> filename
command >/>> filename 0/1/2>&0/1/2

command < filename
command << delimiter 从标准输入中读入直到遇到delimiter分界符
command <&m 把m作为标准输入
command >&m 把标准输出重定向到m中去
command <&- 关闭标准输入
4, shell 命令的执行顺序
&&  如:命令1 && 命令2 只有命令1返回真(0),命令2才被执行
||  如:命令1 || 命令2 如果命令1执行失败, 则执行命令2
()  在当前shell执行一组命令, 如(命令1;命令2;...), 如用{}则组中所有的命令的输出作为一个整体被重定向时,则放到子shell执行否则放到当前shell执行
5, 文本过滤(正则表达式)
^                匹配行首     如^c
$                只匹配行尾   如$c
*                一个单字符后跟*, 匹配0或多个此字符
[]               匹配[]内字符, 可以是单字也可以是字符序列, 也可以使用-表示字符范围,如[1-5]
/                用来匹配一个元字符的特殊含义
.                匹配任意单字符
pattern/{n/}     匹配前面的pattern,n为次数
pattern/{n,/}m   同上但次数至少为n
patterb/{n,m/}   同上但次数在n与m之间  
6, sed 文本过滤工具
sed [选项] sed命令  输入文件
sed [选项] -f 脚本文件 输入文件

查询方式:
   sed默认从第一行开始
   定位方式:
   x   为一行号
   x,y 行范围
   /pattern/ 查询包含模式的行
   /pattern/pattern/ 查询包含两个模式的行
   /pattern/,x  在指定的行上查询包含模式的行
   x,/pattern/  通过行号和模式查询匹配行
   x,y!查询不包含指定行号x,y的行
   命令:
   p  打印匹配行
   =  显示文件行号
   a/ 在定位行号后附加新文本信息
   i/ 在定位行号号插入新文本信息
   d  删除定位行
   c/ 用新文本替换定位行
   s  使用替换模式替换相应模式
   r  从另一个文件中读文本
   w  写文本到一个文件
   q  第一个模式匹配后退出
   l  显示与8进制ASCII代码等价的控制字符
   {} 在定位行执行的命令组
   n  从另一个文件中读取下一行, 并附加在下一行
   g  将模式2粘贴到/pattern n/
   y  传送字符
   n  延续到下一输入行, 允许跨行的模式匹配语句
   例子:
   sed -n '2p' filename 第二行开始
   sed -n '1,3p' filename 1~3行
   sed -n '/pattern/p' filename
   sed -n '4,/pattern/p'
   sed -n '1,$p' filename 显示整个文件, $表示最后一行
   sed -n '/pattern/=' 显示行号
   sed '/pattern/a/text' 附加文本,在指定行后面
   sed '4i/text' 插入文本, 在指定行前面
   sed '/pattern/c/text' 替换指定行
   替换文本:
   [address[,address]] s/pattern-to-find/replace-pattern/[g p w n]
   g  缺省只替换一次出现模式, 使用g替换全局所有模式
   p  缺省sed将所有被替换行写入标准输出,使用p将不打印结果
   w  文件名  将输出定向到一个文件
7, 工具
tr     字符转换删除和替换
stty   设置终端特性
8, shell环境及变量
本地变量:
variable-name = value 设置实际值到变量
variable-name + value 如果设置了variable-name则重设其值
variable-name :? value 如果未设置variable-name 显示未定义用户错误信息
variable-name ? value  如果未设置variable-name 显示系统错误信息
variable-name := value 如果未设置设置其值, 如果设置则使用原值
variable-namne :- value 如果未设置使用value替换但并不设置value到variable-name, 如果设置则使用其值
unset variable 清除变量
set  variable value 设置变量 如果不提供参数则显示所有本地变量
测试变量是否设置值:
echo "The file is ${FILE?}"
echo "The file is ${FILE:? sorry ....}"
设置只读变量:
readonly variable-name
设置环境变量:
export variable-name
env 显示所有环境变量
unset variable 清除环境变量
预留的变量名:
CDPATH  cd 一个目录时查找此变量
EXINIT  保存VI初始化时的设置
HOME    HOME目录
LFS     用来指定shell缺省的分割符
LOGNAME 保存登陆名
MAIL    保存邮箱路径名
MAILCHECK 缺省为每60秒检查一次新邮件
MAILPATH 如果有多个邮箱要用到MAILPATH,此变量将覆盖MAIL设置
PS1     shell提示符,缺省对root为#, 其他用户为$
PS2     shell附属提示符, 缺省为>, 用于执行超过一行的一个命令
SHELL   缺省shell
TERMINFO 终端初始化变量保存终端初始化配置
TERM    终端类型
TZ      时区
EDITOR  缺省的编辑器
PWD     当前路径名
PAGER   屏幕翻页命令
MANPATH man路径
PRINTER 缺省打印机名

向脚本传递参数, 用空格分割, $0~$9 其中$0始终保存的脚本名

特定变量参数:
$#  传递到脚本的参数个数
$*  以单个字符变量显示所有传递的参数,此选项参数可以超过9个
$$  当前脚本进程的ID号
$!  后台运行的最后一个进程的ID号
$@  与$#相同但是使用时加引号
$-  SHELL的当前选项,与set相同
$?  显示命令的最后退出状态, 0为没错误, 其他任何值表示有错误
9, 引号
使用双引号可以引用除字符$,反引号,/以外的任何字符
使用双引号可以引用任何值
使用反引号用于将系统命令输出到变量
反斜线引用特殊字符:&*+^$'""|?
10, 条件测试
测试文件状态:
test condition 或 [ condition ] 使用[]要在两边加上空格
-d 目录
-f 正规文件
-L 符号连接
-r 可读
-s 文件长度大于0非空
-w 可写
-u 文件具有suid位设置
-x 可执行
-e 存在
-b 块文件
-c 字符设备文件
-g 设置了guid位
如: [ -f filename ]
    echo $?  
测试时使用逻辑操作:
-a 逻辑与 -o 逻辑或 !逻辑非, 如:
[ -w result.txt -a -w test.txt ]
字符串测试:
test "string"
test string_operator "string"
test "string" string_operator "string"
string_operator:
= 相等
!= 不等
-z 空串
-n 非空串
测试数值:
"number" number_operator "number"或
[ "number" number_operator "number" ]
-eq 相等
-ne 不等
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
expr 用于数值计算:
exper argument operator argument

11, 控制流结构
if-else:
if 条件1
then
   命令1
elif 条件2
then
   命令2
else
   命令3
fi
空命令永远为真
case 语句:
case 值 in
模式1)
   命令1
   ...
   ;;
模式2)
   命令2
   ...
   ;;
esac

for循环:
for 变量名 in 列表
do
   命令1
   命令2
   ...
done

until循环:
until 条件
do
   命令1
   命令2
   ...
done

while 循环:
while 命令
do
   命令1
   命令2
   ...
done
可以使用break continue 控制流程, 对case及循环有效
12, shell 函数
格式:
函数名()
{
命令1
命令2
} 或
函数名() {
}
也可以在函数名前面加上function
参数传递:
和在shell中使用参数一样如$1 ~ $9, 如:
test() {
   echo $1
   echo $2
   echo $3
}
调用: test 1 2 3
函数返回:
return 返回用最后的命令状态决定返回值
return 0
return 1
在shell中定位文件:
定位格式为:
. pathname
执行函数:
函数名  参数 ...
删除函数:
unset 函数名
13, 向脚本传递参数
shift 命令:
他每执行一次参数个数减一且值向前移动一位,如:
while [ $# -ne 0 ]
do
   echo $1
   shift
done
14,部分命令总结

. 命令

一般格式:. file

“点”命令让shell运行给定的文件,就跟把文件中的内容在这里键入一样。

alias 命令

一般格式:alias names=string

alias命令把string赋给别名name,每当name用作命令时,shell就替换为string,在这完成后在进行命令行替换。

unalias命令

一般格式:unalias names

把别名names从别名表中删除。-a选项表示删除所有别名。

set命令

一般格式:set options args

该命令把options指定的选项打开或关闭,也可以用它来根据args设置位置参数。如果在单字符前有个减号(-)则打开该选项;如果前面是一个加号(+) 则关闭该选项。

unset命令

一般格式:unset names

该命令让shell把names中列出的变量或函数的定义删除。但不能清除只读变量。

type命令

一般格式:type commands

该命令显示所有有关给定命令的信息。

echo命令

一般格式:echo args

该命令把args写入到标准输出。如果省略args,作用就是跳过一行。

exec命令

一般格式:exec command args

执行exec时,shell用给定的参数为运行指定的命令command作初始化。该命令不像其他命令那样以一个新进程运行,而是用command代替当前进程(即不创建新进程)。

export命令

一般格式:export variables

export命令让shell把给定的变量标志为导出,它们的值要传递给子shell。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本信息 * 原书名: Mastering UNIX Shell Scripting * 原出版社: Wiley * 作者: (美)Randal K. Michael [作译者介绍] * 译者: 詹文军[同译者作品] 邓波 * 出版社:电子工业出版社 * ISBN:7121008467 * 上架时间:2005-1-31 * 出版日期:2005 年1月 * 开本:16开 * 页码:516 * 版次:1-1 * 所属分类: 计算机 > 操作系统 > UNIX 教材 > 研究生/本科/专科教材 > 工学 > 计算机 教材 > 计算机教材 > 本科/研究生 > 计算机专业 > 计算机专业课程 > 操作系统 内容简介回到顶部↑ 本书中使用的技术将教会读者如何理性地处理问题,同时还使得读者能够根据基本的命令语法 来将它转换为一个针对特定问题的shell脚本解决方案。 本书提供了许多完整的脚本,可以将它们用于自动完成重复的任务和解决现实系统管理问题的 shell脚本。这些任务包括: ● 通信,例如自动的事件通知;监视本地或远程系统上的进程:自动的FTP文件传输 ● 针对文件系统、页面调度/交换空间、系统负载、应用程序、进程的信息收集与监视活动, 捕获系统配置 ● 打印队列管理,保证打印机正常打印 ● 使用bc工具程序在shell脚本中进行浮点数学运算 本书配套的Web网站(www.wiley.com/compbooks/michael)上包含了本书中讨论的所有shell 脚本和大部分函数,同时还提供了针对各种任务的其他shell脚本。 本书详细介绍如何编写shell脚本来解决实际生活中遇到的UNIX问题和任务。本书面向所有的UNIX版本,重点覆盖对象包括AIX、Linux、 HP-UX和Solaris操作系统。本书的每一章都以一个经常遇到的UNIX问题作为开始。对于每个问题,都定义了一个明确的目标。在了解了目标和命令语法之后,读者可以根据命令来创建shell脚本。本书的特点是从基础开始,然后在解决方案中加入越来越多的判断逻辑。针对复杂程度不同的各种问题,本书分别用不同的章节加以介绍。 本书面向那些通过命令行方式使用UNIX的用户。在本书中讨论的主题主要针对UNIX专业人员—程序员、系统分析员、系统操作员、系统管理员,以及任何希望在技术支持领域取得进步的人。 作译者回到顶部↑ 本书提供作译者介绍 Randal K.Michael是一位在可口可乐公司任职的UNIX系统管理员,他编写了许多shell脚本来处理 UNIX下复杂的系统监视和事件通知问题。他具有23年的工作经验:同时担任UNIX系统管理员达10年 之久,熟悉Solaris、Linux、AIX和HP-UX操作系统。
非常的全,绝对不会让你后悔。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值