函数:代码复用 模块编程
语法:
function f_name { 函数体 } f_name() { 函数体 }
调用:使用函数名
函数名出现的地方,会被自动替换为函数代码;
练习:利用函数改写此前的服务脚本:
#!/bin/bash # prog=`basename $0` lockfile=/var/lock/subsys/$prog start() { if [ -e $lockfile ]; then echo "$prog is already running." else touch $lockfile [ $? -eq 0 ] && echo "Starting $prog finished." fi } stop() { if [ -e $lockfile ]; then rm -f $lockfile [ $? -eq 0 ] && echo "Stoping $prog finished." else echo "$prog is stopped yet." fi } case $1 in "start") start ;; "stop") stop ;; "restart") stop start ;; *) echo "Usage: $prog {start|stop|restart}" exit 1 esac
函数的返回值:
函数的执行结果返回值:
函数中使用打印语句:echo, printf
函数体中OS命令执行结果的输出
函数的退出状态码:
默认取决于函数体执行的最后一个命令的退出状态码;
自定义退出状态码:
return [0-255]
注意:函数体运行时,一旦遇到return语句,函数即返回;
函数可接受参数:
传递参数给函数:调用函数时,在函数名后给出参数列表即可;例如“testfunc arg1 arg2 arg3”
在函数体中可使用$1, $2,...来调用传递过来的各参数;
可使用类似脚本的特殊变量:
$*, $@: 一次性获取参数列表:
$#: 参数的个数
#!/bin/bash # showuserinfo() { [ $# -lt 1 ] && return 1 ! id $1 &> /dev/null && return 2 grep "^$1\>" /etc/passwd | cut -d: -f7 [ $? -eq 0 ] && return 0 || return 3 } while true; do read -p "Enter a username: " username [ "$username" == 'quit' ] && break showuserinfo $username [ $? -ne 0 ] && echo "There is something wrong." done
练习:写一个脚本,完成如下功能(使用函数):
1、提示用户输入一个可执行命令;
2、获取这个命令所依赖的所有库文件(使用ldd命令);
3、复制命令至/mnt/sysroot/对应的目录中
解释:假设,如果复制的是cat命令,其可执行程序的路径是/bin/cat,那么就要将/bin/cat复制到/mnt/sysroot/bin/目录中,如果复制的是useradd命令,而useradd的可执行文件路径为/usr/sbin/useradd,那么就要将其复制到/mnt/sysroot/usr/sbin/目录中;
4、复制各库文件至/mnt/sysroot/对应的目录中;
#!/bin/bash # target=/mnt/sysroot [ -d $target ] || mkdir $target preCmd() { if which $1 &> /dev/null; then cmdpath=$(which --skip-alias $1) return 0 else echo "No such command." return 1 fi } cmdCopy() { cmddir=$(dirname $cmdpath) [ -d $target/$cmddir ] || mkdir -p $target/$cmddir [ -f $target/$cmdpath ] || cp $1 $target/$cmddir return 0 } libCopy() { for lib in $(ldd $1 | grep -E -o "/[^[space::]]+"); do libdir=$(dirname $lib) [ -d $target/$libdir ] || mkdir -p $target/$libdir [ -f $target/$lib ] || cp $lib $target/$libdir done return 0 } main() { while true; do read -p "Plz enter a command(quit): " cmd [ "$cmd" == 'quit' ] && break preCmd $cmd if [ $? -eq 0 ]; then cmdCopy $cmdpath libCopy $cmdpath fi done } main
函数递归:
函数直接或间接调用函数自身;
1 1 2 3 5 8 13
阶乘:10!
n(n-1)!
n(n-1)(n-2)!
阶乘函数:
fact() { if [ $1 -eq 0 -o $1 -eq 1 ]; then echo 1 else echo $[$1*$(fact $[$1-1])] fi }
相关推荐
**Bash高级编程详解** Bash(Bourne-Again SHell)是Unix/Linux系统中最常用的命令行解释器,也是脚本编程的强大工具。对于任何想要深入理解和掌握Linux系统操作或者自动化任务处理的IT专业人士来说,学习Bash高级...
对于系统管理员和开发者来说,掌握高级Bash脚本编程技巧是提高工作效率的关键。这份“高级Bash脚本编程指南”涵盖了从基础到进阶的各个层面,旨在帮助用户深入理解和熟练运用Bash脚本。 首先,让我们了解一下Bash的...
Linux Bash脚本编程是Linux系统管理与自动化任务执行的核心技能之一。Bash,全称Bourne-Again SHell,是Unix及Linux操作系统中最常用的命令行解释器,它提供了丰富的命令行工具和强大的脚本编写能力。这本书《Linux ...
书中后续章节将深入到变量、函数、数组、流程控制、错误处理、输入/输出重定向、子shell、程序调用、正则表达式、脚本调试等多个方面,全面覆盖了Bash脚本编程的各个方面。每个主题都配有丰富的示例和实用的技巧,...
在Linux开发中,Bash编程是一个基础但非常重要的技能。Shell脚本广泛应用于系统管理、安装、任务调度、网络管理等方面。由于Shell脚本能够将常用的命令序列整合到一个文件中,用户只需运行一个脚本文件即可完成一...
【Bash编程1】概述 Bash编程,也被称为Shell脚本编程,是Linux和Unix系统中常用的一种自动化任务执行方式。它利用Bourne-Again SHell (Bash) —— Linux默认的Shell,来编写一系列可执行的命令,形成一个可执行文件...
《高级Bash脚本编程指南》是一本深入探讨Bash编程的资源,提供了丰富的示例和详尽的解释。以下是根据提供的压缩包文件名所涉及的一些核心知识点: 1. **数组操作**: - `array-append.bash`:Bash从4.0版本开始...
### 高级Bash编程知识点概述 #### 一、引言 本教程旨在为初学者提供一条通往高级Bash编程的道路。它不仅适用于自学,也是课堂教学的理想材料,尤其是在教授编程概念方面。通过丰富的实例和练习,读者将逐步掌握...
首先,我们来了解Bash编程的基础。Bash脚本通常以`#!/bin/bash`作为开头,声明使用Bash解释器执行该文件。脚本中的每一行都是一个命令,可以是内置命令、shell函数、外部程序,或者通过分号或换行符隔开的多个命令。...
《高级Bash编程指南》还讨论了高级特性,如进程子系统、异步执行(使用`&`符号)、信号处理、函数式编程概念,以及如何编写交互式的shell程序。这些高级话题对于开发复杂的系统级脚本和工具是必不可少的。 总的来说...
**高级Bash编程指南**是针对Linux或Unix系统中Bash shell脚本编写的一份深入教程,这份PDF版教程旨在帮助用户充分利用Bash的强大功能,提高自动化任务处理和系统管理的效率。Bash(Bourne-Again SHell)是大多数...
**高级Bash编程指南中文版**是一本深入探讨Bash shell脚本编程的资源,源自英文版的**Advanced Bash Programming Guide**。Bash是Linux和类Unix系统中最常用的命令行解释器,也是编写自动化任务和脚本的强大工具。这...
**Linux高级Bash编程(ABS)** Bash(Bourne-Again SHell)是Linux系统中最常用的命令行解释器,也是系统脚本编写的重要工具。深入理解和掌握Bash编程,能够极大地提升Linux系统的使用效率和自动化处理能力。在本文...
《高级Bash编程指南》是一本深入探讨Shell脚本编程艺术的专业书籍,由Mendel Cooper撰写,旨在帮助读者从初学者进阶为Bash编程的高手。这本书以丰富的实例和详尽的解释,覆盖了Bash编程的各个方面,不仅适合初学者,...
### bash编程实例:基础知识与应用场景 #### 一、Shell与Bash简介 Shell是一种命令解释器,也是操作系统内核与用户之间的桥梁。它不仅能够解释并执行用户输入的命令,而且还是一种强大的编程语言。通过创建一系列...
bash-lambda, bash的匿名函数和FP内容 Bash注意:由于性能原因,由于切换到 zsh,我不再积极维护这个项目。 我可以能会编写类似于wince的类似的内容,但是很希望自动散列支持更快。对 bash ( 一个功能完备的黑客)的...
**精通Bash编程** Bash(Bourne-Again SHell)是Unix和类Unix操作系统中最常用的一种命令行解释器,也是Linux系统默认的shell。它由GNU项目开发,是自由软件,广泛应用于各种Linux发行版及macOS。这本书《精通Bash...
本书《高级Bash脚本编程指南》是一本深入探讨UNIX®/Linux环境下Bash Shell脚本编程的权威指南,由Mendel Cooper所著。全书内容覆盖广泛,旨在为读者提供从基础到高级的Shell编程技能,并假定读者没有任何脚本编程或...