linux shell编程学习笔记

文本过滤常用命令

find使用

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一般格式为: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

egrepexpressionextended grep)接受所有的正则表达式, egrep可以使用-f选项并以一个文件作为保存的字符串将之传给egrep作为参数;

awk使用

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)

模式和动作

模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段BEGINEND。使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式, awk总是匹配或打印行数。实际动作在大括号{ }内指明。动作大多数用来打印,但是还有些更长的代码诸如if和循环(looping)语句及循环退出结构。如果不指明采取动作, awk将打印出所有浏览出来的记录。

awk注意事项

l   确保整个a w k命令用单引号括起来。

l   确保命令内所有引号成对出现。

l   确保用花括号括起动作语句,用圆括号括起条件语句。

awk元符号

常用/      ^     $     .      []     |       ()     *     +     ?

只适用于a w k而不适用于grepsed

+ 使用+匹配一个或多个字符。

匹配模式出现频率。例如使用/XY?Z/匹配XYZYZ

awk内置变量

ARGC

命令行参数个数

ARGV

命令行参数排列

ENVIRON

支持系统队列中系统环境变量的使用

FILENAME

Awk浏览的文件名

FNR

浏览文件的记录数

FS

设置输入域分隔符 等价于-F选项

NF

浏览记录的域个数

NR

已读的记录数

OFS

输出域分隔符

ORS

输出记录分隔符

RS

控制记录分割符

      

awk操作符

=, +=, *=, /=, %=,^=

赋值操作符

||, &&,!

并,与,非

条件表达操作符

~, ~!

匹配操作符

<,<=,==,!=,>>

关系操作符

+,-*,//%,^

算术操作符

++

前缀操作符

--

后缀操作符

 

为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用if语句。awkif后面的条件()括起来。

复合操作符

&& AND : 语句两边必须同时匹配为真 || O R:语句两边同时或其中一边匹配为真  ! 非求逆

1.        域值比较操作

有两种方式测试一个数值域是否小于另一数值域。

1)         BEGIN中给变量名赋值。

2)         在关系操作中使用实际数值。

2.        修改数值域取值

当在awk中修改任何域时,实际输入文件是不可修改的,修改的只是保存在缓存里的awk复本。awk会在变量NRNF变量中反映出修改痕迹。

3.        只打印修改部分

awk '{if($1 == "J.Troll") {$1="luo"; print $1}}' grade.txt

awk内置函数

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

awk printf修饰符

-左对齐|width 域的步长,用0表示0步长|.prec最大字符串长度,或小数点右边的位数

awk printf的格式

%c

ASCII字符

%e

浮点数,科学计数法

%f

浮点数

%d

整数

%o

八进制数

%g

Awk决定使用哪种浮点数转换ef

%s

字符串

%x

十六进制数

awk数组

使用前不必先定义,常用循环来取值并对数组的每一个元素进行处理;

for (element in array ) print array[element]

sed使用

作用

sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。

使用sed命令行格式

sed [选项]  sed命令输入文件。

使用sed脚本文件,格式为:

sed [选项] -f sed脚本文件输入文件

要使用第一行具有sed命令解释器的sed脚本文件,其格式为:

sed脚本文件[选项] 输入文件

不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件, sed从标准输入中

接受输入,一般是键盘或重定向结果。

sed选项如下:

n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。

c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,此选项无用,但指定它也没有关系。

f 如果正在调用sed脚本文件,使用此选项。

使用sed在文件中查询文本的方式

1)使用行号,可以是一个简单数字,或是一个行号范围  2)使用正则表达式

使用sed在文件中定位文本的方式

x

X为行号

x,y

行号范围从xy

/pattern/

查询包含模式的行

/pattern/pattern/

查询包含2个模式的行

/pattern/,x

在给定行号上查询包含模式的行

x,/pattern/

通过行号和模式查询匹配行

x,y!

查询不包含指定行号xy的行

 

sed编辑命令

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命令的一般格式为: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 传递到mnm为域号,n为开始分类字符数;例如46意即以第5域分类,从第7

个字符开始。

uniq用法

作用: uniq用来从一个文本文件中去除或禁止重复行。

命令一般格式:uniq -u d c -f input-file output-file

常用选项:

-u 只显示不重复行。-d 只显示有重复数据行,每种重复行只显示其中一行

-c 打印每一重复行出现次数。

-f n为数字,前n个域被忽略。一些系统不识别- f选项,这时替代使用- n

join用法

作用:将来自两个分类文本文件的行连在一起。

格式:join [options] input-file1 input-file2

常用选项:

an n 为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。

o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个nm必须用逗号分隔,如1 . 32 . 1

j n m n为文件号,m为域号。使用其他域做连接域。

t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:。

cut用法

作用:cut用来从标准输入或文本文件中剪切列或域。

格式:cut [options] file1 file2

常用选项:

-c list 指定剪切字符数。    -f field 指定剪切域数。

-d 指定与空格和t a b键不同的域分隔符。

- c用来指定剪切范围,如下所示:

- c 15-7 剪切第1个字符,然后是第5到第7个字符。

-c1-50 剪切前5 0个字符。

-f 格式与- c相同。

-f 15 剪切第1域,第5域。

- f 110-12 剪切第1域,第1 0域到第1 2域。

paste用法

作用:cut用来从文本文件或标准输出中抽取数据列或者域,然后再用p a s t e可以将这些数据粘贴起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。

格式:paste -d -s -file1 file2

常用选项:

-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @

-s 将每个文件合并成行而不是按行粘贴。

- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。

split用法

作用:用来将大文件分割成小文件。

格式:split -output_file-size input-filename output-filename

tr 用法

作用: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   调用模式时候用单引号。

常用命令注意事项

echo命令在Linux下使用注意事项

必须使用- n选项来禁止echo命令输出后换行,使用-e选项才能使转义符生效:

/c 不换行  /f 进纸      /t 跳格      /n 换行

read命令注意事项

作用:可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。

备注:空格作为输入分隔符

cat命令注意事项

作用:显示文件内容以及控制字符,创建文件。

注意:它不会在文件分页符处停下来。它会一下显示完整文件。如果希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令中,如:

cat myfile | more cat myfile | pg    -v 选项:显示控制字符)

tee命令注意事项

作用:把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中

tee -a files-a表示追加到文件末尾)。

shell编程

linux shell脚本变量

本地变量

作用:本地变量在用户现在的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=valueexport 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使应用获知终端对屏幕和键盘响应的控制序列类型,常用的有

vt100vt200vt220-8等。

15. TZ                  时区变量保存时区值,只有系统管理员才可以更改此设置。

其他环境变量

1. EDITOR           设置编辑器,最常用。

2. PWD                当前目录路径名,用cd命令设置此选项。

3. PAGER             保存屏幕翻页命令,如pgmore,在查看man文本时用到此功能。

4. MANPATH       保存系统上man文本的目录。目录间用冒号分隔。

5. LPDESTPRINTER  保存缺省打印机名,用于打印作业时指定打印机名。例如:$ 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命令一般用于整数值,但也可用于字符串。一般格式为: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 如果条件12均不成立

命令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循环用于不断执行一系列命令,也用于从输入文件中读取数据。

    

使用breakcontinue控制循环

break命令允许跳出循环。break通常在进行一些处理后退出循环或case语句。如果是在一个嵌入循环里,可以指定跳出的循环个数。例如如果在两层循环内,用break 2刚好跳出整个循环。

continue命令类似于break命令,只有一点重要差别,它不会跳出循环,只是跳过这个循环步。

shell 函数

函数定义格式

函数名()

{ . . .

}

函数名(){

. . .

}

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,并且可以使用变量后加个:指定其为必选项。

Unix/Linux常用选项含义

-a

扩展

-c

计数,拷贝

-d

目录、设备

-e

执行

-f

文件名、强制

-q

退出

-h

帮助

-i

忽略状态

-l

注册文件

-o

完整输出

-v

显示方式或版本

-p

路径

获取命令行输入的最后一个参数:eval echo /$$#;使用shift命令:shift 'expr $# -2'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值