,,Linux Shell 脚本编程入门教程

,,Linux Shell 脚本编程入门教程

Linux的Shell有很多种,有Bourne Shell(/usr/bin/sh或者/bin/sh),Bourne Again Shell(/bin/bash),C Shell(/usr/bin/csh),K Shell(/usr/bin/ksh),Root的Shell(/sbin/sh)。

从程序员的角度来看,Shell本身就是一个用C语言编写的程序。从用户的角度来看,Shell是用户和Linux操作系统之间的桥梁。用户不仅可以输入命令执行,还可以使用Shell脚本编程,完成更复杂的操作。在Linux GUI日益完善的今天,Shell编程仍然在系统管理等领域发挥着重要作用。深刻理解并熟练掌握Shell编程,是每个Linux用户的必修课之一。

Linux的Shell有很多种,有Bourne Shell(/usr/bin/sh或者/bin/sh),Bourne Again Shell(/bin/bash),C Shell(/usr/bin/csh),K Shell(/usr/bin/ksh),Root的Shell(/sbin/sh)。不同的Shell语言有不同的语法,所以不能互换使用。每个贝壳都有自己的特点。基本上掌握其中任何一项就够了。本文重点介绍Bash,即Bourne Again Shell。Bash由于其易用性和免费性,在日常工作中被广泛使用;同时,Bash是大多数Linux系统的默认Shell。一般人不会把Bourne Shell和Bourne Again Shell区分开来,所以,在下面的文字中,我们可以看到#!/bin/sh,也可以改成#!/bin/bash .

使用文本编辑器(如vi)编写Shell脚本的格式是固定的,如下所示:

#!/bin/sh

#评论

您的命令放在这里

第一行的符号#!告诉系统,下面路径指定的程序是解释这个脚本文件的Shell过程。如果第一行没有这样的句子,脚本文件执行时就会出错。下面的部分是主程序。像高级语言一样,Shell脚本也有变量赋值和控制语句。除了第一行,以#开头的行都是注释行,直到这一行结束。如果一行不完整,可以在行尾加上'。这个符号表示下一行和这一行将合并成同一行。

编辑后,将脚本保存为filename.sh。文件名的后缀sh表示这是一个Bash脚本文件。执行脚本时,首先将脚本文件的属性更改为可执行:

chmod x文件名. sh

执行脚本的方法是:/filename.sh

先从经典的《hello world》开始,看看最简单的Shell脚本。

#!/bin/sh

#在控制台窗口中打印hello world

“你好,世界”

echo $a

脚本是一种弱类型语言。使用变量时,不需要先声明它们的类型。新变量将在本地数据区分配内存用于存储。该变量由当前Shell拥有,任何子过程都不能访问该局部变量。这些变量不同于环境变量。环境变量存储在另一个内存区域,称为用户环境区域。子进程可以访问内存中的变量。变量的赋值方式如下:

变量名称=变量值

如果您为已经有值的变量赋值,新值将替换旧值。取值时,在变量名前加$即可。$variable_name可以用在引号中,这和其他高级语言明显不同。在混淆的情况下,可以用花括号来区分,例如:

echo“嗨,$as”

将不会输出“嗨,hello worlds”,而是“嗨”。这是因为Shell将$as视为变量,但是$as没有赋值,其值为空。正确的做法是:

echo“嗨,${a}s”

单引号中的变量不会被变量替换。

有几个与变量相关的Linux命令。

Env用于在用户环境区域显示变量及其值;Set用于显示本地数据区和用户环境区的变量及其值;Unset用于删除指定变量的当前值,该值将被指定为NULL;export命令用于将本地数据区中的变量传输到用户环境区。

让我们看一个更复杂的例子。结合这个例子,我们来说一下Shell脚本的语法。

#!/bin/bash

#我们的争论少于。打印帮助文本:

if[$ #-lt];然后

凯瑟普

ren -使用sed正则表达式重命名多个文件

用法:ren 'regexp' 'replacement '文件

示例:重命名所有*。HTM档案在*。html:

任' HTM$' 'html' *。html文件的后缀

帮助

出口

船方不负担装货费用

OLD='$ '

NEW='$ '

shift命令从列表中删除一个参数

#命令行参数。

变化

变化

# $*现在包含所有文件:

对于$*中的文件;做

if[-f ' $ file '];然后

NEW file=` echo ' $ file ' | sed ' s/$ { OLD }/$ { NEW }/g ' ` 1

if[-f ' $ new file '];然后

回显'错误:$newfile已经存在'

其他

回显'将$file重命名为$newfile '

mv '$file' '$newfile '

船方不负担装货费用

船方不负担装货费用

完成的

从一开始我们就可以看到,前面两行在前一个例子中已经解释过了。从第三行开始,有了新的东西。If语句类似于其他编程语言,是一个流控制语句。它的语法是:

如果……;然后

elif…;然后

其他

船方不负担装货费用

与其他语言不同,Shell脚本中if语句的条件部分要用分号隔开。第三行中的[]表示条件测试。有以下常用的条件测试:

[-f '$file']确定$file是否是文件。

[$a -lt 3]判断$a的值是否小于3。类似地,-gt和-le分别表示大于或小于或等于

[-x '$file']确定$file是否存在以及是否具有可执行权限,同时-r测试文件的可读性。

[-n '$a']判断变量$a是否有值,用-z测试空字符串。

['$a'='$b']确定$a和$b的值是否相等

【cond1 -a cond2】判断cond1和cond2是否同时成立,-o表示cond1和cond2成立。

注意条件测试部分的空格。方括号两边有空格,还有-f、-lt和=等符号两边也有空格。如果没有这些空格,Shell将在解释脚本时出错。

$ #表示命令行参数的数量,包括$0。在Shell中,脚本名称本身是$0,其余的是$0、$1、$2、${10}、${11}等等。$ *表示整个参数列表,不包括$0,即不包括文件名的参数列表。

现在我们明白了,第三行的意思是,如果脚本文件的参数少于三个,将执行if和fi语句之间的内容。然后,第四行到第十一行的内容在Shell脚本编程中被称为Here document,Here document用于向一个命令传递多行文本。Here文档的格式以开头,后跟一个字符串。在Here文档的末尾,该字符串也会出现,表示文档的结尾。本例中,Here文档输出到cat命令,即文档内容打印在屏幕上,起到显示帮助信息的作用。

第十二行的Exit是一个Linux命令,意思是退出当前进程。所有Linux命令都可以在Shell脚本中使用。使用上面的cat和exit,一方面熟练使用Linux命令可以大大减少Shell脚本的长度。

第14和15句是赋值语句,分别将第一个和第二个参数赋给变量OLD和NEW。下面两句是注释。注释下面两个shift的作用是删除参数表中的第一个和第二个参数,后面的参数会依次成为新的第一个和第二个参数。请注意,参数列表最初不包含$0。

然后,从第21行到第31行是一个循环语句。Shell脚本中的循环具有以下格式:

而[条件1 ] { || } [条件2]…;做

完成的

对于…中的var做

完成的

for((cond 1;cond2cond3 )) do

完成的

直到[条件1 ] { || } [条件2]…;做

完成的

在上面的循环中,还可以使用类似于C语言中的break和continue语句来中断当前的循环操作。第21行的循环是将参数表中的参数逐个放入变量文件中。然后进入循环判断文件是否是文件,如果是,使用sed命令搜索并生成新的文件名。基本上,sed可以被视为一个搜索和替换程序,它从标准输入(如管道)中读取文本,并将结果输出到标准输出。sed使用正则表达式进行搜索。在第23行中,反勾(`)的作用是取出两个反勾之间的命令输出结果,这里也就是取出结果赋给变量newfile。此后,判断新文件是否已经存在,否则,文件将被改变为新文件。这样,我们就可以理解这个脚本的功能了。Shell Script编写的其他脚本与此类似,只是语法和用法略有不同。

通过这个例子,我们了解了Shell脚本的编写规则,但还是有几点要讲的。

第一,Shell脚本中除了if语句,还有类似C语言中多分支结构的case语句。它的语法是:

大小写变化

模式1)

… ;

模式2)

… ;

*)

… ;

environmental systems applications center 环境系统应用程序中心

让我们以下面的例子来看看case语句的用法。

while getopts vc: OPTION

case $选项在

c)副本=$OPTARG

ehco ' $ COPIES;

v)echo‘苏阳’;

\?)出口1;

environmental systems applications center 环境系统应用程序中心

完成的

上面的getopts类似于C语言提供的函数getopts。在Shell脚本中,getopts通常与while语句结合使用。getopts的语法如下:

getopts选项_字符串变量

Option_string包含一个单字符选项字符串。如果getopts在命令行参数中找到连字符,它会将连字符后面的字符与option_string进行比较。如果匹配成功,它会将变量的值设置为该选项。如果没有匹配,它会将变量的值设置为?有时候,一个选项也会有一个值,比如-c5等。此时,应该在option_string中选项的字母后面加一个冒号。当getopts找到冒号时,它将读取该值,然后将其放入特殊变量OPTARG中。这个命令相当复杂。如有需要,读者可以详细参考壳牌撰写的相关资料。

上面循环的作用是依次取出脚本名后面的选项,并进行处理。如果输入了非法选项,请输入'?指定部分,退出脚本程序。

其次,Bash为交互式应用程序提供了扩展选择,用户可以从一组不同的值中进行选择。其语法如下:

在…中选择var做

打破;

完成的

例如,以下程序的输出是:

#!/bin/bash

回声“你的选择?”

在“a”“b”“c”中选择var做

破裂

完成的

echo $var

-

你的选择?

1)答

2) b

3) c

第三,还可以在Shell脚本中使用自定义函数,其语法如下:

函数名()

{

}

比如我们可以把上面第二个例子的第四到第十二行放到一个叫做help的函数里,然后每次调用的时候直接写help。在function中处理函数调用参数的方法是直接用上面提到的$1和$2分别表示第一个和第二个参数,用$ *表示参数列表。

第四,我们还可以在Shell下调试Shell script脚本。当然,最简单的方法是使用echo输出来检查变量值。Bash还提供了一个真正的调试方法,就是在执行脚本时使用-x参数。

嘘?x文件名. sh

这将执行脚本并显示脚本中所有变量的值。还可以使用参数-n,它不执行脚本,只返回所有语法错误。

以上是边肖老师介绍的Linux Shell脚本编程入门教程的全部内容。我希望你喜欢它。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: