Find命令的一般形式为:
find pathname -options [-print -exec -ok]
让我们来看看该命令的参数:
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为:
' command' {} /;(注意{ }和/;之间的空格)。
-ok 和- exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了-depth选项,那么- prune选项将被find命令忽略。
-user 按照文件属主来查找文件。 -group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n
表示文件更改时间距现在n天以前。Find命令还有- atime和- ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍- mtime选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b |
块设备文件 |
d |
目录 |
c |
字符设备文件 |
p |
管道文件 |
l |
符号链接文件 |
f |
普通文件 |
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。(以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可,一块等于512字节)
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
grep一般格式为:grep [选项]基本正则表达式[文件](基本正则表达式可为字符串)。
-c 只输出匹配行的计数 -i 不区分大小写(只适用于单字符)
-h 查询多文件时不显示文件名 -n 显示匹配行及行号
-s 不显示不存在或无匹配文本的错误信息 -v 显示不包含匹配文本的所有行
-l 查询多文件时只输出包含匹配字符的文件名
精确匹配:是在抽取字符串后加/>
使用grep匹配“与”或者“或”模式:需要添加-E选项
在ps命令和grep结合使用时候,可以使用grep的-v选项可以丢弃px命令中grep自身进程。
Ps -ef |grep named |grep –v “grep”
类 |
等价的正则表达式 |
类 |
等价的正则表达式 |
[[:upper:]] |
[A-Z] |
[[:alnum:]] |
[0-9a-zA-Z] |
[[:lower:]] |
[a-z] |
[[:space:]] |
空格或tab键 |
[[:digit:]] |
[0-9] |
[[:alpha:]] |
[a-zA-Z] |
egrep(expression或extended grep)接受所有的正则表达式, egrep可以使用-f选项并以一个文件作为保存的字符串将之传给egrep作为参数;
awk的三种调用方式
(1) 命令行方式: awk [-F field-separator] ‘commands’ input-file(s)
(2) 将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它
(3) 第三种方式是将所有的a w k命令插入一个单独文件,然后调用:awk -f awk-script-file input-files(s)
模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段BEGIN和END。使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式, awk总是匹配或打印行数。实际动作在大括号{ }内指明。动作大多数用来打印,但是还有些更长的代码诸如if和循环(looping)语句及循环退出结构。如果不指明采取动作, awk将打印出所有浏览出来的记录。
l 确保整个a w k命令用单引号括起来。
l 确保命令内所有引号成对出现。
l 确保用花括号括起动作语句,用圆括号括起条件语句。
常用:/ ^ $ . [] | () * + ?
只适用于a w k而不适用于grep或sed:
+ 使用+匹配一个或多个字符。
? 匹配模式出现频率。例如使用/XY?Z/匹配XYZ或YZ。
ARGC |
命令行参数个数 |
ARGV |
命令行参数排列 |
||
ENVIRON |
支持系统队列中系统环境变量的使用 |
FILENAME |
Awk浏览的文件名 |
||
FNR |
浏览文件的记录数 |
FS |
设置输入域分隔符 等价于-F选项 |
||
NF |
浏览记录的域个数 |
NR |
已读的记录数 |
||
OFS |
输出域分隔符 |
ORS |
输出记录分隔符 |
RS |
控制记录分割符 |
=, +=, *=, /=, %=,^= |
赋值操作符 |
||, &&,! |
并,与,非 |
? |
条件表达操作符 |
~, ~! |
匹配操作符 |
<,<=,==,!=,>> |
关系操作符 |
+,-*,//%,^ |
算术操作符 |
++ |
前缀操作符 |
-- |
后缀操作符 |
为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用if语句。awk中if后面的条件()括起来。
复合操作符
&& AND : 语句两边必须同时匹配为真 || O R:语句两边同时或其中一边匹配为真 ! 非求逆
1. 域值比较操作
有两种方式测试一个数值域是否小于另一数值域。
1) 在BEGIN中给变量名赋值。
2) 在关系操作中使用实际数值。
2. 修改数值域取值
当在awk中修改任何域时,实际输入文件是不可修改的,修改的只是保存在缓存里的awk复本。awk会在变量NR或NF变量中反映出修改痕迹。
3. 只打印修改部分
awk '{if($1 == "J.Troll") {$1="luo"; print $1}}' grade.txt
gsub(r,s) |
在整个$0中用s替代r |
gsub(r,s,t) |
在整个t中用s替代r |
Sub(r,s) |
在$0中最左边长度的字符串代替s |
length(s) |
返回s长度 |
match(s,r) |
测试s是否包含匹配r的字符串 |
split(s,a,fs) |
在fs上讲s分成序列a |
substr(s,p) |
返回字符串s中从p开始的后者部分 |
sprint(fmt,exp) |
返回经fmt格式化后的exp |
substr(s,p,n) |
返回字符串s中从p开始长度为n的后缀部分 |
index(s,t) |
返回s中字符串t的第一位置 |
awk printf修饰符
-左对齐|width 域的步长,用0表示0步长|.prec最大字符串长度,或小数点右边的位数
awk printf的格式
%c |
ASCII字符 |
%e |
浮点数,科学计数法 |
%f |
浮点数 |
%d |
整数 |
%o |
八进制数 |
%g |
Awk决定使用哪种浮点数转换e或f |
%s |
字符串 |
%x |
十六进制数 |
使用前不必先定义,常用循环来取值并对数组的每一个元素进行处理;
for (element in array ) print array[element]
sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。
sed [选项] sed命令输入文件。
使用sed脚本文件,格式为:
sed [选项] -f sed脚本文件输入文件
要使用第一行具有sed命令解释器的sed脚本文件,其格式为:
sed脚本文件[选项] 输入文件
不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件, sed从标准输入中
接受输入,一般是键盘或重定向结果。
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,此选项无用,但指定它也没有关系。
f 如果正在调用sed脚本文件,使用此选项。
(1)使用行号,可以是一个简单数字,或是一个行号范围 (2)使用正则表达式
x |
X为行号 |
x,y |
行号范围从x到y |
/pattern/ |
查询包含模式的行 |
/pattern/pattern/ |
查询包含2个模式的行 |
/pattern/,x |
在给定行号上查询包含模式的行 |
x,/pattern/ |
通过行号和模式查询匹配行 |
x,y! |
查询不包含指定行号x和y的行 |
|
p |
打印匹配行 |
q |
第一个模式匹配完成后退出或立即退出 |
= |
显示文件行号 |
l |
显示与八进制ASCII代码等价的控制字符 |
a/ |
在定位行号后附加新文本信息 |
r |
从另一个文件中读文本 |
i/ |
在定位行号后插入新文本信息 |
w |
写文本到一个文件 |
d |
删除定位行 |
{} |
在定位行执行命令组 |
c/ |
用新文本替换定位文本 |
g |
将模式2粘贴到/pattern n/ |
s |
使用替换模式替换相应模式 |
y |
传递字符 |
‘s^.$//g’ |
删除以句点结尾行 |
‘-e/abcd/d’ |
删除包含abcd的行 |
‘s/[][][]*/[]/g’ |
删除一个以上空格,用一个空格代替 |
‘s/^[][]*//g’ |
删除行首空格 |
‘s/^.[][]*/[]/g’ |
删除句点后跟两个或更多空格,代之以一个空格 |
‘^$/d’ |
删除空行 |
‘s/^.//g’ |
删除第一个字符 |
‘s/[]/[]//g’ |
删除所有空格并用tab键代替 |
‘s/COL/(…/)//g’ |
删除紧跟COL后的三个字母 |
‘s/////g’ |
从路径中删除第一个/ |
‘$/^[]//g’ |
删除行首所有tab键 |
‘s/[]*//g’ |
删除所有tab键 |
&命令:保存发现模式以便重新调用它,然后把它放在替换字符串里面。
替换命令格式:[ address [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
命令格式
sort命令的一般格式为:sort -cmu -o output_file [other options] +pos1 +pos2 input_files
sort参数
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储sort结果的输出文件名。
其他选项有:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或tab键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7
个字符开始。
作用: uniq用来从一个文本文件中去除或禁止重复行。
命令一般格式:uniq -u d c -f input-file output-file
常用选项:
-u 只显示不重复行。-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。一些系统不识别- f选项,这时替代使用- n。
作用:将来自两个分类文本文件的行连在一起。
格式:join [options] input-file1 input-file2
常用选项:
an n 为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
j n m n为文件号,m为域号。使用其他域做连接域。
t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:。
作用:cut用来从标准输入或文本文件中剪切列或域。
格式:cut [options] file1 file2
常用选项:
-c list 指定剪切字符数。 -f field 指定剪切域数。
-d 指定与空格和t a b键不同的域分隔符。
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5 剪切第1域,第5域。
- f 1,10-12 剪切第1域,第1 0域到第1 2域。
作用:cut用来从文本文件或标准输出中抽取数据列或者域,然后再用p a s t e可以将这些数据粘贴起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
格式:paste -d -s -file1 file2
常用选项:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。
作用:用来将大文件分割成小文件。
格式:split -output_file-size input-filename output-filename
作用:tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
格式:tr -c -d -s ["string 1_t o_translate_from"] ["string 2_to_triannpsulta_te_to"] <input_file
常用选项:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
tr中特定控制字符的不同表达方式:
/a |
Ctrl-G铃声 |
/007 |
/b |
Ctrl-H退格符 |
/010 |
/f |
Ctrl-L走行换页 |
/014 |
/n |
Ctrl-J新行 |
/012 |
/r |
Ctrl-M回车 |
/015 |
/t |
Ctrl-I tab键 |
/011 |
使用示例:
删除重复字符:tr -s “[a-z]” <testfile
删除空行: tr -s “[/012]” <testfile 或 tr -s “[/n]”<testfile
大小写转换:
小写到大写:tr “[a-z]” “[A-Z]”<testfile 或 tr “[:lower:]” ”[:upper:]” <testfile
大写到小写:tr “[A-Z]” “[a-z]”<testfile 或 tr ”[:upper:]” “[:lower:]” <testfile
删除指定字符:
将文件每行中所有不包含[a-z][A-Z]的字符串放到字符串1中并转换成一新行:
tr -cs "[a-z][A-Z]" "[/012*]" <testfile
&& 操作符 :命令1 && 命令2
作用:如果& &左边的命令(命令1)返回真(即返回0,成功被执行)后,& &右边的命令(命令2)才能够被执行。
||操作符: 命令1 || 命令2
作用:如果| |左边的命令(命令1)未执行成功,那么就执行| |右边的命令(命令2)
(命令1;命令2;. . .): 在当前shell中执行一组命令;
{命令1;命令2;. . .}: 命令将在子shell中作为一个整体被执行;
command>filename |
把标准输出重定向到一个新文件中 |
command>>filename |
把标准输出重定向到一个文件中(追加) |
command 1 >filename |
把标准输出重定向到一个文件中 |
command >filename 2>&1 |
把标准输出和标准错误一起重定向到一个文件中 |
command 2>filename |
把标准错误重定向到一个文件中 |
command 2 >>filename |
把标准错误重定向到一个文件中(追加) |
command >>filename 2>&1 |
把标准输出和标准错误一起重定向到一个文件中(追加) |
command <filename>filename2 |
command命令以filename文件作为标准输入,以filename2文件作为标准输出 |
Command <filename |
Command 命令以filename文件作为标准输入 |
Command <<delimiter |
从标准输入中读入,直至遇到delimiter分界符 |
Command <&m |
把文件描述符m作为标准输入 |
Command>&m |
把标准输入重定向到文件描述符m中 |
Command <&- |
关闭标准输入 |
备注:/dev/null系统垃圾箱
l 字符串参数最好用双引号引起;
l 调用变量时候用双引号;
l 调用模式时候用单引号。
必须使用- n选项来禁止echo命令输出后换行,使用-e选项才能使转义符生效:
/c 不换行 /f 进纸 /t 跳格 /n 换行
作用:可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
备注:空格作为输入分隔符
作用:显示文件内容以及控制字符,创建文件。
注意:它不会在文件分页符处停下来。它会一下显示完整文件。如果希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令中,如:
cat myfile | more或 cat myfile | pg (-v 选项:显示控制字符)
作用:把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
tee -a files(-a表示追加到文件末尾)。
作用:本地变量在用户现在的s h e l l生命期的脚本中使用。
变量设置时的不同模式
Variable-name=value |
设置实际值到variablename |
Variable-name+value |
如果设置variable-name,则重设其值 |
Variable-name:?value |
如果未设置variable-name,显示未定义用户错误信息 |
Variable-name?value |
如果未设置variable-name,显示系统错误信息 |
Variable-name:=value |
如果未设置variable-name,设置其值 |
Variable-name:-value |
同上,但是取值并不设置到variable-name,可以被替换 |
清除变量: unset variable-name 显示所有本地shell变量命令:set
设置只读变量 : (1) variable-name = value (2) readonly variable-name
查看所有只读变量:readonly
环境变量用于所有用户进程(经常称为子进程)。环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。shell中执行的用户进程均称为子进程。不像本地变量(只用于现在的s h e l l)环境变量可用于所有子进程,这包括编辑器、脚本和应用。环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在. profile文件中定义。系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被初始化。传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。环境变量与本地变量设置方式相同。
设置环境变量:VARIABLE-NAME=value;export VARIABLE-NAME
查看所有的环境变量:env。
预留的环境变量(这些变量名不能用作其他用途)
1. CDPATH 改变目录路径变量,保留一系列由冒号隔开的路径名,用于cd命令。
2. EXINIT 保存使用vi编辑器时的初始化选项。例如,调用vi时,要显示行号,且在第10个空格加入tab键,命令为:$ EXINIT='set nu tab=10';export EXINIT
3. HOME HOME目录,通常定位于passwd文件的倒数第2列,用于保存用户自身文件。
4.IFS IFS用作shell指定的缺省域分隔符。
5. LOGNAME 保存登录名
6.MAIL 保存邮箱路径名,缺省为/var/spool/mail/<login name>。
7. MAILCHECK 缺省每60s检查新邮件,
8. MAILPATH 如果有多个邮箱要用到MAILPATH,此变量设置将覆盖MAIL设置。$ MAILPATH=/var/spool/dave : /var/spool/;export MAILPATH
9.PATH 保存进行命令或脚本查找的目录顺序,正确排列这个次序很重要,可以在执行命令时节省时间。
10. PS1 基本提示符包含shell提示符,缺省对超级用户为#,其他为$。
11. PS2 附属提示符,缺省为符号>
12. SHELL 保存缺省shell
13. TERMINFO 终端初始化变量保存终端配置文件的位置。通常在/usr/lib/terminfo或/usr/share/terminfo
14. TERM 保存终端类型。设置TERM使应用获知终端对屏幕和键盘响应的控制序列类型,常用的有
vt100、vt200、vt220-8等。
15. TZ 时区变量保存时区值,只有系统管理员才可以更改此设置。
其他环境变量
1. EDITOR 设置编辑器,最常用。
2. PWD 当前目录路径名,用cd命令设置此选项。
3. PAGER 保存屏幕翻页命令,如pg、more,在查看man文本时用到此功能。
4. MANPATH 保存系统上man文本的目录。目录间用冒号分隔。
5. LPDEST或PRINTER 保存缺省打印机名,用于打印作业时指定打印机名。例如:$ LPDEST=hp3si-systems
导出环境变量方法:除export外还可以用set -a指明所有变量直接被导出。
$0脚本名称 $1……$9存储脚本变量
$# |
传递到脚本的参数个数 |
$* |
以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可以操过9个 |
$$ |
脚本运行的当前进程ID号 |
$! |
后台运行的最后一个进程的进程ID号 |
$@ |
与$#相同,但是使用时加引号,并在引号中返回每个参数 |
$- |
显示shell使用的当前选项,与set命令功能相同 |
$? |
显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误 |
双引号:使用双引号可引用除字符美元符号($)、反引号(`)、反斜线(/)外的任意字符或字符串。
单引号:单引号与双引号类似,不同的是shell会忽略任何引用值。
反引号:反引号用于设置系统命令的输出到变量。反引号用于设置系统命令的输出到变量。shell将反引号中的内容作为一个系统命令,并执行其内容。
反斜线:如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义: & * + ^ $ ` " | ?。
引号使用小结:
l 反馈字符串用双引号;但不要引用反馈本身。
l 如果使用引用得到的结果不理想,再试另一种,毕竟只有三种引用方式,可以充分尝试。
test一般有两种格式,即:test condition 或[ condition ]使用方括号时,要注意在条件两边加上空格。
-d |
目录 |
-s |
文件长度大于0、非空 |
-w |
可写 |
-f |
正规文件 |
-r |
可读 |
-u |
文件有suid位设置 |
-x |
可执行 |
-L |
符号链接 |
注意:0表示成功,其他为失败。
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。
l -a 逻辑与,操作符两边均为真,结果为真,否则为假。
l -o 逻辑或,操作符两边一边为真,结果为真,否则为假。
l ! 逻辑否,条件为假,结果为真。
test “string” |
test string_operator “string” |
test “string” string_operator “string” |
[ string_operator string ] |
[ string string-operator string ] |
其中:string_operator可为:
= |
两个字符串相等 |
!= |
两个字符串不相等 |
-z |
空串 |
-n |
非空串 |
测试数值可以使用许多操作符,一般格式如下:
" number " numeric_operator " number " 或 [ " number " numeric_operator" number" ]
numeric_operator可为:
-eq |
数值相等 |
-gt |
第一个数大于第二个数 |
-ge |
第一个数大于等于第二个数 |
-ne |
数值不相等 |
-lt |
第一个数小于第二个数 |
-le |
第一个数小于等于第二个数 |
expr命令一般用于整数值,但也可用于字符串。一般格式为:expr argument operator argument
可当作手工计数器:expr number operator number(使用乘号时,必须用反斜线屏蔽其特定含义)
增量计数:expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量。
(1) LOOP (2) LOOP=`expr $LOOP+1`
数值测试: 可以用expr测试一个数。如果试图计算非整数,将返回错误。
模式匹配: 可以使用expr通过指定冒号选项计算字符串中字符数。. *意即任何字符重复0次或多次。
在expr中可以使用字符串匹配操作,例:使用模式. doc抽取文件附属名:expr $VALUE : ‘/(.*/).doc’
if then else语句 if 条件1 如果条件1为真;then 那么 命令1 执行命令1 elif 条件2 如果条件1不成立; then 那么 命令2 执行命令2 else 如果条件1,2均不成立 命令3 那么执行命令3 fi 完成 if语句必须以单词fi终止。 |
case语句 case 值 in 模式1) 命令1 . . . ;; 模式2) 命令2 . . . ;; esac 模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,即: * 任意字符; ? 任意单字符;[..] 类或范围中任意字符。 |
||
for循环 for循环一般格式为: for 变量名 in 列表 do 命令1 命令2 … done |
until循环 until 条件 命令1 ... done 条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次。
|
while循环 while 命令 do 命令1 命令2 ... done w hile循环用于不断执行一系列命令,也用于从输入文件中读取数据。 |
|
break命令允许跳出循环。break通常在进行一些处理后退出循环或case语句。如果是在一个嵌入循环里,可以指定跳出的循环个数。例如如果在两层循环内,用break 2刚好跳出整个循环。
continue命令类似于break命令,只有一点重要差别,它不会跳出循环,只是跳过这个循环步。
函数名() { . . . } |
函数名(){ . . . } |
function 函数名() { ... } |
方式: function_name variable-name1 ….
函数中的使用:在函数内部可以使用$1…..$9来获取传递的参数;一般而言,在函数内部常通过
_ variable-name=$1…. 来为传递的参数定义个新的名字,这样方便使用和调试。
return从函数中返回, 用最后状态命令决定返回值;Return 0 无错误返回;Return 1 有错误返回
返回值测试:
(1)通过判断$?状态; (2)通过 if (function variable ..)来判断。
(1) 在要使用的脚本头部使用 “. /路径文件名”来引用函数集所在的文件
(2) 在命令行通过“. /路径文件名”来注册函数,通过set命令可以查看已经注册的函数,如果要修改函数,可以通过unset function_name来取消注册,但是在修改后需要通过重新注册才能使用。
(1) 使用$1…$9向脚本传递参数
(2) 使用shift命令向脚本传递参数
(3) 使用getopts形成构成命令行处理标准形式,一般格式为:getopts option_string variable,并且可以使用变量后加个:指定其为必选项。
-a |
扩展 |
-c |
计数,拷贝 |
-d |
目录、设备 |
-e |
执行 |
-f |
文件名、强制 |
-q |
退出 |
-h |
帮助 |
-i |
忽略状态 |
-l |
注册文件 |
-o |
完整输出 |
-v |
显示方式或版本 |
-p |
路径 |
获取命令行输入的最后一个参数:eval echo /$$#;使用shift命令:shift 'expr $# -2'。