Linux中的shell脚本编程——函数

概述:

本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值。除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用。最重要的是讲解shell脚本编程中函数的用法。这些内容都要熟练掌握。

一、循环语句的特殊用法:

1.while循环的特殊用法(遍历文件的每一行)

□语法:while read line; do

循环体

done < /PATH/FROM/SOMEFILE

□意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line

练习:

1.求所有用户的id之和

2.扫描/etc/passwd文件每一行,如发现GECOS字段为空,则填充用户名和单位电话为62985600,并提示该用户的GECOS信息修改成功。

2.for循环的特殊用法:

1)双小括号方法,即((…))格式,也可以用于算术运算

双小括号方法也可以使bash Shell实现C语言风格的变量操作

#I=10

#((I++))

2)for循环的特殊格式:

语法:for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))

do

循环体

done

控制变量初始化:仅在运行到循环代码段时执行一次

控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

意义:第一个分号之前相当于变量的一个初始值,只执行一次,然后进行条件判断,满足条件进入循环体,每轮循环结束后会执行修正表达式,然后再做判断,条件满足进入循环体,结束后再做修正,在判断,如此而已...直到条件判断不满足时,就退出循环。实际上,二三分号,是while循环的意思。

场景:对于数字运算,比较适用,更叫简单明了。

示例1:

2.打印九九乘法表

3.select循环与菜单

语法:select variable in list ;do

循环体命令

done

意义:select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入

用法:1)用户输入菜单列表中的某个数字,执行相应的命令

2)用户输入被保存在内置变量REPLY 中

3)select 是个无限循环,因此要记住用break 命令退出循环,或用exit 命令终止脚本。也可以按ctrl+c 退出循环。

4)select 经常和case 联合使用

5)与for 循环类似,可以省略in list ,此时使用位置参量

二、函数:function

1.函数介绍:

1)函数function是由若干条shell命令组成的语句块,实现代码重用模块化编程。

2)把一段独立功能的的代码当做一个整体,并为之一个名字,命名的代码段,此即为函数;

3)它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分。

4)函数和shell程序比较相似,区别在于:

Shell程序在子Shell中运行

而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改

2语法:

函数由两部分组成:函数名和函数体。

语法一:

function f_name{

...函数体...

}

语法二:

f_name() {

...函数体...

}

3.函数的定义和使用:

1)可在交互式环境下定义函数

可将函数放在脚本文件中作为它的一部分

可放在只包含函数的单独文件中

2)调用:函数只有被调用才会执行;

调用:在代码中给定函数名

函数名出现的地方,会被自动替换为函数代码

3)函数的生命周期:被调用时创建,返回时终止

4.函数有两种返回值:

1)函数的执行结果返回值:

使用echo或printf命令进行输出

函数体中调用命令的输出结果

2)函数的退出状态码:

默认取决于函数中执行的最后一条命令的退出状态码

自定义退出状态码return

return 从函数中返回,用最后状态命令决定返回值

return 0 无错误返回。

return 1-255 有错误返回

5.交互环境下定义和使用函数:

示例:

$dir() {

ls-l

}

定义该函数后,若在$后面键入dir,其显示结果同ls-l的作用相同。

$dir

该dir函数将一直保留到用户从系统退出,或执行了如下所示的unset命令: $ unsetdir

6.在脚本中定义和使用函数

1)函数在使用前必须定义,因此应将函数定义放在脚本开始部分,直至shell首次发现它后才能使用

2)调用函数仅使用其函数名即可

7.使用函数文件

可以将经常使用的函数存入函数文件,然后将函数文件载入shell。

1)文件名可任意选取,但最好与相关任务有某种联系。例如:                                                                               functions.main

2)一旦函数文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数。

3)若要改动函数,首先用unset命令从shell中删除函数。改动完毕后,再重新载入此文件。

8.创建函数文件

9.函数的载入,执行,检查和删除

函数文件已创建好后,要将它载入shell,使用source或 .

1)定位函数文件并载入shell的格式:

. filename 或source filename

注意:此即<点> <空格> <文件名>

这里的文件名要带正确路径(绝对或相对路径)

示例:上例中的函数,可使用如下命令:

. functions.main

2)使用set命令检查函数是否已载入。set命令将在shell中显示所有的载入函数

3)删除shell函数

现在对函数做一些改动。首先删除函数,使其对shell不可用。使用unset命令完成此功能.

命令格式为:unset function_name

实例:$unset findit   再键入set命令,函数将不再显示

注意:定义好的函数要存放在一个单独的文件当中,如要要使用直接点或者source FILE 就可以。

10.函数参数

函数可以接受参数:

1)传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可;例如“testfunc arg1 arg2 ...”

2)在函数体中当中,可使用$1, $2, ...调用这些参数;还可以使用[email protected], $*, $#等特殊变量

11.函数变量

1)变量作用域:

环境变量:当前shell和子shell有效

本地变量:只在当前shell进程有效,为执行脚本会启动专用子shell进程;因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数。

局部变量:函数的生命周期;函数结束时变量被自动销毁

注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量。

2)在函数中定义局部变量的方法

local NAME=VALUE


时间: 2024-10-12 11:34:33

Linux中的shell脚本编程——函数的相关文章

Linux中的shell脚本编程——基础篇

概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础.脚本基本格式.变量.运算.条件测试这几个方面详细介绍shell脚本编程的基础内容,也是我们必须要掌握熟练的内容. 一.编程环境 1.程序:指令+数据 程序编程的风格有两种: 过程式:以指令为中心,数据服务与指令 对象式:以数据为中心,指令服务于数据 2.程序的执行方式: □计算机:只能识别二进制文件

Linux中的shell脚本编程——数组 ,高级字符串操作 ,高级变量 ,配置用户环境

概述: 概述: 本章节将讲述Linux中shell脚本编程的数组,高级字符串处理,高级变量和配置用户的环境. 一.函数和位置参数扩展 1.shift 命令实现在位置参数中的跳跃,会把最左边的参数挤掉     2.匿名函数的使用 第一篇:数组 一.数组的定义: 1.变量:存储单个元素的内存空间 2.数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 3.数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开

Linux中的shell脚本编程---语句控制

概述: shell脚本的语句控制 □前面提到了过程式编程语言有三种过程: 顺序执行:按照顺序一条一条语句执行: 选择执行:按照条件进行选择执行: 循环执行:按照给定的循环条件进行循环执行. □其中,顺序不需要特定的控制,只需按照语句依次执行即可:选择执行,则需要特定的控制语句(如:if,case)来判断执行:循环执行则需要特定的循环控制控制(如:for,while等). 一.使用read 命令来接受输入 □在bash脚本编程过程当中有时程序需要与用户之间进行交互,如提示用户输入一些参数等,此时,

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

Linux中执行shell脚本的4种方法

这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/root/bin目录中并已有执行权限(添加权限的方法:chmod +x hello.sh). 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: ./ 的意思是说在当前的工作目录下执行hello.sh.如果不加上

Linux中执行shell脚本

这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下 bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限.方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:复制代码 代码如下: cd /data/shell./hello.sh ./的意思是说在当前的工作目录下执行hello.s

Linux学习-高级shell脚本编程(一)函数

引文: 通常编写shell脚本时,你会发现很多地方都要用到相同的代码或者说是相同的功能.如果是一段小代码,那无所谓.可如果多次使用而且还是相同的代码,我想你也会感觉很烦的.为了能够让代码重用,这就使用到函数了. 温馨提示 变量赋值的格式为: 变量名=变量值 注意事项: 变量名前面不应加美元"$"符号.(和PHP不同)等号"=" 前后不可以有空格.和C语言不同,Shell中不需要显式的语法来声明变量. 变量名不可以直接和其他字符相连,如果想相连,必须用括号:echo

linux学习笔记:shell脚本编程相关(上)

前言 unix/linux操作系统下的shell,是一种壳,其目的是提供一个用户与计算机相互交互的命令接口,通过输入各种命令,达到操作的目的. 与此同时,shell支持控制流程,进而可以组合出各种各样的应用实例. shell脚本的格式 首行shebang机制: bash脚本,首行添加#!/bin/bash [options] csh脚本,首行添加#!/bin/csh [options] ksh脚本,首行添加#!/bin/ksh [options] -- 描述脚本的注释部分: 包括Author,

Linux自学笔记——shell脚本编程

脚本文件格式: 第一行,顶格:#!/bin/bash 注释信息:# 代码注释: 缩进,适度添加空白行 语言:编程语法格式,库,算法和数据结构: 编程思想: 问题空间 à解空间 变量: 局部变量 本地变量 环境变量 位置参数变量 特殊变量 数据类型:字符型.数值型 弱类型:字符型: Bash中的算术运算: +,-,*,/,%,** 实现算术运算: 1)let var=算术表达式: 2)var=$[算术表达式] 3)var=$((算术表达式)) 4)var=$(expr arg1 arg2 arg3