shell设计
来源:互联网 发布:cms监控客户端 编辑:程序博客网 时间:2024/06/10 23:37
常用的压缩指令
常见的压缩文件后缀(Linux文件的属性与文件名没有关系,以下所说只是习惯)
*.Z compress程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.gz gzip程序压缩的文件
*.tar tar程序打包的数据,没有经过压缩
*.tar,gz tar程序打包的文件,且经过gzip压缩
compress
语法: #compress [-d] file_name
-d 解压缩参数!或使用uncompress也可以解压缩文件,基压缩后缀是*.Z
bzip2,bzcat
语法: #bzip2 [-dz] file_name <==压缩解压缩指令
#bzcat file_name.bz2 <==读取压缩文件内容
-d: 解压缩,或使用bunzip2也可以解压缩文件.
-z: 压缩
gzip,zcat
语法: #gzip [-d#] file_name <==压缩与解压缩
#zcat filename_gz <==查看压缩文件内容
-d: 解压缩参数,或使用gunzip也可以解压缩文件.
-#: 压缩等级,1最不好,9最好,默认为6
tar
语法: #tar [-zxcvfpP] file_name
#tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source
参数说明:
-z: 是否同时具有gzip
-x: 解开一个压缩文件
-c: 建立一个压缩文件
-v: 压缩过程中显示文件
-f: 使用文件名
-p: 使用原文件的原有属性(属性不会依据用户而变)
-P: 可以使用绝对路径
-t: 查看tarfile里面的文件
-N: 比后面接的日期(yyyy/mm/dd)还要新的文件才会被打包进新建的文件中
--exclued FILE: 在压缩过程中,不要将FILE打包.
example:
#tar -cvf directory.tar directory
#tar -zcvf directory.tar directory
#tar -zcvf filename.tar.gz /home/test/*
#tar -xvf directory.tar
#tar -zxvf directory.tar.gz
#tar -ztvf directory.tar.gz
#tar -N '2006/112/21' -zcvf home.tar.gz /home
#tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc
#tar /dev/st0 /home
cpio
语法: #cpio -cobB > [file|device] <==备份
#cpio -icduv < [file|device] <==还原
-o: 将数据复制输出到文件或设备上
-i: 将数据自文件或设备复制输出到系统中
-t: 查看cpio建立的文件或设备的内容
-c: 以一种较新的便携式格式储存
-v: 让存储过程中文件名称可以在屏幕上显示
-B: 让默认的Blocks可以增至5120bytes,默认是512bytes.这样一来,可以让大文件储存速度加快.
-d: 自动建立目录,由于cpio的内容可能不在同一个目录内,如此在反备份过程会有问题.加上-d后,就可以自动将需要的目录建立起来.
-u: 自动用较新的文件覆盖较旧的文件.
使用cpio时,cpio无法直接读取文件,而是需要每个文件或目录的路径连同文件名一起才可以被记录下来.因此,cpio最常跟find指令一起使用.
如:
#find / -print | cpio -covB > /dev/st0
#cpio -icduv < /dev/st0
#cpio -icduv < /dev/st0 > /tmp/content
正规表示法
grep
语法: #grep "word" filename
将filename文件是有word的那一行显示出来.
通配符 意义
========================================================
^ 句首字符相符
$ 句尾相同的字符
? 任何一个单一字符
* 随意几个任意字符
/ 跳转字符,将特殊字符变成普通字符
[list] 列表中的字符
[range] 列表中范围内的字符
[^list] 反向选择,与[list]相反
[^range] 反向选择,与[range]相反
/{n/} 与前一个相同字连续n个
/{n,m/} 与前一个相同字连续n-m个
==========================================================
如:
#grep ^boot /etc/* <==查找/etc目录下所有的文件,找出以boot为开头的行.
#grep [XYZ] /etc/* <==查找/etc目录下所有的文件,找出含有XYZ三个字符中任何一个字符的那一行.
=================================================================
学习使用Shell Scripts
讲了一大堆变量,管线指令,都是为了给脚本做铺垫的.现在开始学习脚本了.
脚本,字面意思就是剧本的意思,就是将我们要执行的内容写成一个脚本,让系统依据这个脚本来执行我们想要的东西.
基本上,执行脚本时,bash据以判断执行的步骤为:
1.如果读取到一个Enter符号(CR),就尝试开始执行该行命令
2.指令间的多个空白会被忽略,当一个空格来处理
3.空白行也将被忽略,并且Tab也不会被理会
4.如果一行内容太多,则可以使用/延伸至下一行
5.此外,使用最多的#可做为注释.任何加在#后面的字,将全部视为注释文字而被忽略.
在撰写脚本时,最好养成如下良好习惯
1.先宣告使用的shell为何(在某些情况下,如果没有宣告使用的shell,常会出现错误信息而导致脚本无法被执行.例如:/etc/crontab)
2.注明该脚本的内容功能,版本信息,作者,文件创建日期等
3.每一个大步骤的主要功能也要说明
执行一个脚本有两种方法.
1.将文件属性改成可以执行的属性.如chmod 755 script.sh.然后执行该文件.
2.另一种则是直接以sh这个可执行文件来执行脚本内容.如sh script.sh
卷标与运算符declare
语法: #declare[-afirx]
参数说明:
-a: 定义为数组array
-f: 定义为函数function
-i: 定义为整数integer
-r: 定义为只读
-x: 定义为通过环境输出变量
来看一个例子.
[root@mail root]# a=5
[root@mail root]# b=7
[root@mail root]# c=$a*$b
[root@mail root]# echo $c
5*7
[root@mail root]# declare -i a=5
[root@mail root]# declare -i b=7
[root@mail root]# declare -i c=$a*$b
[root@mail root]# echo $c
35
[root@mail root]#
可以看到,如果不先声明变量类型,则该变量默认呈现字符串的形式.
[root@mail root]# b=7
[root@mail root]# c=$a*$b
[root@mail root]# echo $c
5*7
[root@mail root]# declare -i a=5
[root@mail root]# declare -i b=7
[root@mail root]# declare -i c=$a*$b
[root@mail root]# echo $c
35
[root@mail root]#
可以看到,如果不先声明变量类型,则该变量默认呈现字符串的形式.
交互式脚本:即程序会依据你的输入的数据进行判断.最简单的交互式指令是read指令,read的功能是将你在键盘上输入的内容放到变量中.如:
[root@mail root]# read name
h0000001
[root@mail root]# echo $name
h0000001
[root@mail root]#
h0000001
[root@mail root]# echo $name
h0000001
[root@mail root]#
定义一个脚本的参数代号
#myscript opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
说明如下:
$0:myscript,即脚本的文件名
$1:opt1,即第一个附加的参数
$2:opt2,第二个附加的参数
$3:opt3,第三个附加的参数
脚本逻辑判断式与表达式
-----------------------------------------------------------------------------------
逻辑卷标 含义
-----------------------------------------------------------------------------------
1. 关于文件与目录的逻辑卷标
-f 常用!检测文件是否存在
-d 常用!检测目录是否存在
-b 检测是否为一个block文件
-c 检测是否为一个character文件
-S 检测是否为一个socket标签文件
-L 检测是否为一个符号链接文件
-e 常用!检测某个东西是否存在,可以是任何东西
2. 关于程序的逻辑卷标
-G 检测是否由GID所执行的程序拥有
-O 检测是否由UID所执行的程序拥有
-p 检测是否为程序间传送信息的name pipe或FIFO
3. 关于文件的属性检测
-r 检测是否为可读属性
-w 检测是否为可写入属性
-x 检测是否为可执行属性
-s 检测是否为非空白文件
-u 检测是否具有SUID属性
-g 检测是否具有SGID属性
-k 检测是否具有sticky bit属性
4. 两个文件之间的判断与比较
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件与第二个文件为同一个文件(诸如链接文件)
5. 逻辑与(and)和或(or)
&& 逻辑与
|| 逻辑或
bash shell scripts的运算符的加减乘除运算
-----------------------------------------------------------------------------------
运算符 含义
-----------------------------------------------------------------------------------
= 等于
!= 不等于
< 小于
> 大于
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)
-z 空字符串
-n 非空字符串
条件判断语句if...then...fi
语法:
if [条件判断一] && (||( [条件判断二]; then
...
elif [条件判断三] && (||) [条件判断四]; then
...
else
fi
需要注意的地方:
1.在[]中,只能有一个判断式;
2.在[]与[]间,可以使用&&或||结合判断;
3.每一个独立的组件之间需要用空格键隔开.
选择语句case...esac
语法:
case 种类方法(string) in
种类方法一)
程序执行段
;;
种类方法二)
程序执行段
;;
*)
echo "Usage: {种类方法一|种类方法二}"
exit 1
esac
种类方式(string)格式方要有两种:
1.直接输入:就是以"执行文件+string"的方式执行.string可以直接写成$1.
2.交互式:就是由屏幕输出可能的项,然后让用户输入,通常必须配合read variable,然后string写成$variable的格式.
循环语名
.for((条件1;条件2;条件3))
.for variable in variable1 variable2 ......
.while [condition1] && {||} [condition2]...
.until [condition1] && {||} [condition2]...
while与until的分别是:
.until:直到条件符合的时候才能退出程序;
.while:当条件符合时,就继续做.
如何调试脚本
#sh [-nvx] scripts
-n: 不执行脚本,查询脚本内的语法,若有错误则列出
-v: 在执行脚本前,先将脚本的内容显示在屏幕上
-x: 将用到的脚本内容显示在屏幕上,与-v稍微不同
- shell设计
- SHELL [面向对象设计]
- Shell脚本设计(1)--初识Shell script
- shell中计算器的设计
- Windows Shell编程-第十四章.设计Shell集成应用
- shell脚本的参数设计,以及shell数组使用 demo
- shell脚本设计之文件查找
- Linux程式设计-11.Shell Script(bash)--(1)简介
- Linux程式设计-11.Shell Script(bash)--(2)教学例
- 在shell脚本里使用Abstract Factory的设计模式
- 工作中编写shell脚本设计到相关信息
- MAVEN,CXF,设计模式,LINUX SHELL,EJB,JMS
- dialog shell下的gui设计 代替繁杂libncurses编程
- linux shell设计——CD唱片管理程序
- shell实现(一)设计接口和结构体
- Linux:Shell语言实现《考试控制系统的设计与实现》
- linux学习笔记-定时器的设计与实现(shell)
- Linux程式设计-11.Shell Script(bash)--(3)用於自动备份的Shell Script
- 要拓展了
- flash在网页要做超链接
- wget常用的参数
- C++构造函数中的this指针
- Java容器集合学习心得
- shell设计
- cp2102 mlf-28
- 我今天加入了csdn
- ads 下 malloc堆分配问题
- 1
- 双机无线互联设置|共享上网
- 大小写转换
- [技术讨论]务实与务虚
- 2