最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

BASH脚本编程

来源:动视网 责编:小OO 时间:2025-09-30 22:28:10
文档

BASH脚本编程

一个最简单的脚本这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程.在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。一个最经典的HelloWorld程序#!/bin/bashechoHelloWorld这个脚本只有二行,它的第一行这个脚本程序由那个程序来解释.第二行只有一个简单的动作,它的功能是在终端上打印出一行”HelloWorld”。如果你测试着执行这个命令时(./hello.sh),你将会得到一个commandnotfound的信息,这种情况大部分可能是你的
推荐度:
导读一个最简单的脚本这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程.在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。一个最经典的HelloWorld程序#!/bin/bashechoHelloWorld这个脚本只有二行,它的第一行这个脚本程序由那个程序来解释.第二行只有一个简单的动作,它的功能是在终端上打印出一行”HelloWorld”。如果你测试着执行这个命令时(./hello.sh),你将会得到一个commandnotfound的信息,这种情况大部分可能是你的
一个最简单的脚本

这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程.

在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。

一个最经典的HelloWorld程序

#!/bin/bash

echoHelloWorld

这个脚本只有二行,它的第一行这个脚本程序由那个程序来解释.第二行只有一个简单的动作,它的功能是在终端上打印出一行”HelloWorld”。如果你测试着执行这个命令时(./hello.sh),你将会得到一个commandnotfound的信息,这种情况大部分可能是你的第一行#!/bin/bash这个程序有问题,你一定要确保bash可以找到并且可用。(一般情况下你还要对这个脚本附一个可执行权限)

#chmodu xhello.sh

一个非常简单的备份脚本

#!/bin/bash

tar-cZf/var/my-backup.tgz/home/me/

在这个脚本中,它替换了上一个例子的将一行信息打印在终端上的功能,取尔代之的是一个备份/home目录的tar备份命令。

关于重定向的一些信息

最基本的理论基础

这里有对于三个文件的重定向定义:stdin(标准输入),stdout(标准输出)andstderr(标准错误输出)(std=standard).

基本上你可以

1.重定向stdout到一个文件

2.重定向stderr到一个文件

3.重定向stdout到stderr

4.重定向stderr到stdout

5.重定向stderr到stdout中并且成为一个文件

6.重定向stderrandstdouttostdout

7.重定向stderrandstdouttostderr

在Linux中1代表'标准输出',2代表’标准错误’

标准输出

这个例子将会使ls的显示结果重定向到一个文件中.

ls-l>ls-l.txt

标准错误

这个例子将会使grep命令在运行过程中出现的错误输出到一个文件中

grepda*2>grep-errors.txt

管道

这一节我们将解释一个非常简单的并且你以后一定会用到的功能,它就是管道。

为什么大家都会用到管道?

管道可以使你非常方便的将一个程序的结果转向到另外一个程序中。

一个sed的例子

这个例子使用了非常简单的管道功能:

ls-l|sed-e"s/[aeio]/u/g"

当我们执行以下命令后:首先ls–l会先执行并且它会输出结果信息但是如果它的后面跟是一个管道符的话,那么它就会将结果重新定向到sed这个程序中,sed使用了替换功能,所以这个例子执行完会,会将ls–l结果中所有含有aeio的英文单词替换成单词u.

通过另外的方法实现ls–l*.txt

也许这种方法不同于ls–l*.txt,但是它避免了出现一条NoSuchfileOrDirectory这种信息。

ls-l|grep".txt"

当ls–l执行后,它会将程序结果输出到grep这个程序中,并且去匹配.txt这条信息。

变量

你可在任何编程语言中使用变量,但是在脚本编程中它们是没有类型的,简称弱类型编程语言,在这个变量中可以保含一个数字,一个字符串,一个单词等。你并不需要声明这个变量,它会在引用这个变量时创建它。

使用变量来实现一个简单的HelloWorld

#!/bin/bash

STR="HelloWorld!"

echo$STR

第二行建立一个STR的变量并且为其附了一个“HelloWorld”的字符串变量值。当在这个变量前面加上一个$符号时,我们就将会得到这个变量的值。

例子(一个使用变量的备份脚本)

#!/bin/bash

OF=/var/my-backup-$(date Ymd).tgz

tar-cZf$OF/home/me/

局部变量

局部变量的生命是有限的,请看下面的例子

#!/bin/bash

HELLO=Hello

functionhello{

localHELLO=World

echo$HELLO

}

echo$HELLO

hello

echo$HELLO

条件语句

条件语句可以使你决定是完成一个运作或是不去完成一个动作时,通过一些判断来实现,一般情况都是通过一些操作符来实现判断。

条件语句可以有许多实现方法,最多的情况是基于ifexpressionthen这种情况,也就是大家常常说的if判断语句。它的语法基本结构如下:

if[expression];

then

codeif'expression'istrue.

fi

一个最基本的使用if...then的例子

#!/bin/bash

if["foo"="foo"];then

echoexpressionevaluatedastrue

fi

这段代码执行if判断,如果foo等于foo的话,那么你就会执行then语句下的输出语句,最后通过fi来结束,这里我要强调一点,就是很多新手在输入源码时特别是在if语句后面没有空格,在大括号后面没有空格,在等号两边没有空格,这些都会制造出一些麻烦的。

一个简单的控制if..then...else

#!/bin/bash

if["foo"="foo"];then

echoexpressionevaluatedastrue

else

echoexpressionevaluatedasfalse

fi

6.4通过变量进行判断控制

#!/bin/bash

T1="foo"

T2="bar"

if["$T1"="$T2"];then

echoexpressionevaluatedastrue

else

echoexpressionevaluatedasfalse

fi

7.循环结构

在这一节中,你将会学习for、while、untilloops循环

对于for循环它有一点不同于其他的编程语言,它有一点像VB中的foreach语句,就是所谓的递归的循环。

对于while循环,它其实是一个加强的if语句,如果它的条件为真,那么它就一直执行while循环中的语句中的内容。

7.1Forsample

#!/bin/bash

foriin$(ls);do

echoitem:$i

done

在第二行上,我们声明了一个i的变量,它将一直将ls命令的结果全部循环出来。其中do和done之间是所要执行的代码。

While循环例子

#!/bin/bash

COUNTER=0

while[$COUNTER-lt10];do

echoThecounteris$COUNTER

letCOUNTER=COUNTER 1

done

这里面大家可能看到一个-lt的命令选项,这里它代表小于等于

-eq等于

-ne不等于

-gt大于

-ge大于等于

-lt小于

-le小于等于

Until的例子

#!/bin/bash

COUNTER=20

until[$COUNTER-lt10];do

echoCOUNTER$COUNTER

letCOUNTER-=1

done

函数

对于大多数编程语言,你都可以调用函数来执行一段代码,这样可以使用减少重复的书写代码。

函数的例子

#!/bin/bash

functionquit{

exit

}

functionhello{

echoHello!

}

hello

quit

echofoo

在2-4行包含了一个quit函数,在5-7行包含了hello函数,如果你不是很确定这个脚本是是什么意思,那么我建议试试它。Noticethatafunctionsdon'tneedtobedeclaredinanyspecificorder.

当你运行这个脚本时你的程序将会最先调用hello函数,以后再调用quit函数最后才执行echo输出命令。

在函数中使用参数

#!/bin/bash

functionquit{

exit

}

functione{

echo$1

}

eHello

eWorld

quit

echofoo

这个脚本几乎和前一个脚本没有什么不能,但最主要的不同是e这个函数可以使用参数了。

用户接口

使用select命令制作简单的菜单

#!/bin/bash

OPTIONS="HelloQuit"

selectoptin$OPTIONS;do

if["$opt"="Quit"];then

echodone

exit

elif["$opt"="Hello"];then

echoHelloWorld

else

clear

echobadoption

fi

done

如果你运行这个脚本你将会看到一个非常简单的菜单

使用read读入用户输入

在多数情况下你可能会用到提示请进行输入这种状态并且有几种方法可以用。这是其中的一种方法:

#!/bin/bash

echoPlease,enteryourname

readNAME

echo"Hi$NAME!"

对于变量来说,你可以通过多个值来读入。

#!/bin/bash

echoPlease,enteryourfirstnameandlastname

readFNLN

echo"Hi!$LN,$FN!"

算术操作

使用以下的命令:

echo1 1

如果你希望看到2,那么你会很失望,那么我们应该如何进行操作哪?echo$((1 1))

我们可以使用以下方法:

echo$[1 1]

算术操作

-

*

/

(remainder)

关系操作

-lt(<)

-gt(>)

-le(<=)

-ge(>=)

-eq(==)

-ne(!=)

文档

BASH脚本编程

一个最简单的脚本这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程.在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。一个最经典的HelloWorld程序#!/bin/bashechoHelloWorld这个脚本只有二行,它的第一行这个脚本程序由那个程序来解释.第二行只有一个简单的动作,它的功能是在终端上打印出一行”HelloWorld”。如果你测试着执行这个命令时(./hello.sh),你将会得到一个commandnotfound的信息,这种情况大部分可能是你的
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top