Linux shell 使用函数

Linux shell 使用函数
与使用其他编程语言类似,shell程序也支持函数。

shell允许将一组命令集或者一行语句形式一个可用块,这些块被称为shell函数。

函数是完成特定处理功能的一个shell程序;在shell程序内部可以重复使用同一函数多次。

在编写shell程序时,使用函数有助于消除重复代码和组织整个程序。

函数由函数标题和函数体两部分组成。

标题是函数名;函数体是指函数内的命令集合。

函数名称应当是惟一的,不可以重复。

在bash shell中,函数的语法格式
两种形式都可以。

另外,也可以使用如下所示的形式:
可以根据自己的爱好和习惯选用任一种。

函数可以放在一个文件中作为一段代码,也可以单独放在一个文件中。

调用函数的格式为:
参数param1、param2等是可选的。

可以将参数作为一个串进行传递,例如$@。

函数可以分析参数,就如同它们是从命令行上作为命令行参数传递给shell程序的位置参数一样,但是函数使用传递到脚本内的值。

例如,下面的shell脚本使用了函数showmonth(),该函数用于显示月份的名称,若向其传递的月份数超出了1到12的
该程序在执行时并未在命令行上给出参数,因为在脚本内,已经为函数传递了相应的参数,执行结果如图21所示。

图21 使用函数
向函数传递参数就像在一般脚本中使用特殊变量$1、$2...一样,函数取得所传参数后,将原始参数传回shell脚本,因而最好先在函数内设置变量保存所传的参数。

当函数完成处理或者希望函数基于某一测试语句返回时,可做两种处理:
●让函数正常执行到函数末尾,然后返回脚本中调用函数的控制部分
●使用return语句返回脚本中函数调用的下一条语句,可以带返回值,0表示无错误,1
表示有错误。

shell中的函数把若干命令集合到一起,通过一个函数名加以调用。

如果需要,还可以调用多次。

执行函数并不创建新的进程,而是通过shell进程执行。

通常,函数中的最后一个命令执行之后,就退出被调函数。

也可利用return命令立即退出函数,其语法格式为:
其中,n值是退出函数时的退出值(退出状态),即$?的值。

当n值为默认值时,退出值就是最后一个命令执行后的返回值。

合集下载

linux shell延时函数

linux shell延时函数

linux shell延时函数
在Linux Shell中,有多种延时函数可供选择,其中最常用的是`sleep`和`usleep`函数。

`sleep`函数的默认单位为秒,可以接受一个参数,表示延时的时间长度。

例如,`sleep 1`表示延时一秒,`sleep 1m`表示延时一分钟,`sleep 1h`表示延时一小时,`sleep 1d`表示延时一天。

`usleep`函数的默认单位为微秒,可以接受一个参数,表示延时的时间长度。

例如,`usleep 100000`表示延时一毫秒,即千分之一秒。

在实际使用中,可以根据具体需求选择合适的延时函数,并根据需要设置延时时间。

需要注意的是,延时函数可能会影响脚本的性能和响应时间,因此在使用时需要谨慎考虑。

shell-函数之参数使用详解

shell-函数之参数使用详解

shell-函数之参数使⽤详解参数的调⽤⽅法在其他语⾔中,函数参数分为形参和实参,其中,形参是函数定义时就指定的参数;⽽实参是函数被调⽤时才指定的参数(通常放在括号⾥,参数之间⽤逗号隔开)shell的函数参数⽐较特殊,实际上shell将脚本的参数和函数的参数统⼀处理,怎么调⽤脚本参数就怎么调⽤函数参数。

function_name arg arg1 arg2 ...function_name是函数名,arg表⽰函数参数,通过空格隔开。

通过位置变量接受函数参数和shell脚本相同,shell函数通过系统变量获取参数值。

从命令⾏传递给shell函数的参数叫做位置参数,shell会根据参数的位置来接受对应的值。

在shell内部,⽤户可以通过⼀系列的系统变量来获取参数,这些变量的名称都是固定的,⾮常简单,只⽤⼀个字符表⽰,例如$0表⽰脚本名称;$1表⽰传递的第⼀个参数......常⽤于参数传递的系统变量变量说明$n n是⼀个参数,从1开始表⽰参数的位置,例如:$1表⽰第⼀个参数,$2表⽰第⼆个参数$#命令⾏参数的个数$0当前shell脚本的名称$?前⼀个命令或者是函数的返回状态码,0代表执⾏成功,⾮0即失败$*以”参数1参数2....“的形式将所有函数通过⼀个字符串返回$@以”参数1“”参数2“....的形式返回每个参数$_保存之前执⾏的命令的最后的⼀个参数举个简单的例⼦:#!/bin/bashfunc (){echo "这是第 $2 个参数"echo "这是第 $4 个参数"echo "这是第 $1 个参数"}func 1 2 3 4输出结果为:shift移动位置参数shift命令可以使位置参数向左移。

⽐如shift 3表⽰位置参数$4 向左移动三变成 $1,原来的$5现在变成$2,⽽原来的$1、$2、$3丢弃,** 因为$0是脚本名嘛!**。

Linux操作系统(第4版)shell编程

Linux操作系统(第4版)shell编程
• varible_name=value • 同时,shell也允许在变量间进行相互赋值。
引用变量时,需在变量名前面加“$”符号。 • 使用变量时,需要在变量名前加“$”符号,
例如echo $season。当然使用时也会遇到一些 比较特殊的情况,就是变量名包含在其他字符 串中,这时就需要用“{}”将变量名括起来。
10.1.3 管道
• 管道和输入输出重定向十分类似。管道的 作用是在一个命令的标准输出和另一个命 令的标准输入之间建立一个通道。
10.1.4 shell里的特殊字符
• 和其他编程语言一样,shell里也有特殊字 符,常见的有美元符号“$”、反斜线“\” 和引号。美元符号表示变量替换,即用其 后指定的变量的值来代替变量。反斜线“\” 为转义字符,用于告诉shell不要对其后面 的那个字符进行特殊处理,只当作普通字 符。而shell下的引号情况比较复杂,分为3 种:双引号“"”、单引号“'”和倒引号 “`”。
• conditionN为分支条件,每个分支条件后必须以两个分号“;;” 结尾。如果都无法匹配,可用“*”代替,相当于default。 10.4.2小节中的if/elif/.../else结构多重分支语句示例也可改写 成如下形式。
• #!/bin/bash • case "$#" in • 0) echo "You didn't enter any parameter" • ;; • 1) echo "You entered only one parameter" • ;; • *) echo "You entered $# parameters" • ;; • esac • 当分支条件较多时,case语句将比if的多重分支显得简洁清晰。

shell 高阶函数

shell 高阶函数

shell 高阶函数在Shell编程语言中,高阶函数是指可以接受一个或多个函数作为参数,并且/或者返回一个函数的函数。

这种编程范式被称为函数式编程,它允许我们将函数看作是数据的一种处理方式,将函数本身作为参数进行传递和使用。

在Shell中,高阶函数可以实现很多有用的功能。

下面是一些常见的使用高阶函数的示例:1.命令组合:通过将多个命令通过管道连接起来使用,我们可以将它们视为函数的组合。

我们可以编写一个高阶函数,接受两个函数作为参数,将它们通过管道连接起来,以便重复使用。

例如:```shelllocal f=$1local g=$2shift 2echo "hello world" , $reverse```2. 映射:在Shell中,我们可以使用`read`命令逐行读取标准输入,并对每一行数据进行处理。

我们可以编写一个高阶函数,用于将给定的函数应用于每一行输入,并返回处理后的结果。

例如:```shellfunction malocal f=$1while IFS= read -r line; do"$f" "$line"donedouble=$(map 'echo $((2某$1))')echo -e "1\n2\n3" , $double```上述示例中,map函数接受一个函数和标准输入,并使用`read`命令读取每一行输入。

然后,它将给定的函数应用于每一行,并输出结果。

我们可以使用`double`函数将输入的每一行乘以2并输出。

3.过滤:有时候我们只需要输入流中符合特定条件的数据。

我们可以编写一个高阶函数,接受一个谓词函数作为参数,并在标准输入中过滤出符合条件的行。

例如:```shellfunction filtelocal f=$1while IFS= read -r line; doif "$f" "$line"; thenecho "$line"fidoneeven=$(filter '[[ $(( $1 % 2 )) -eq 0 ]]')echo -e "1\n2\n3\n4" , $even```在上述示例中,filter函数接受一个谓词函数,并使用`read`命令逐行读取标准输入。

linux shell function参数

linux shell function参数

linux shell function参数在Linux Shell脚本中,函数(function)是一种可重用的代码块,可以接受参数并执行特定的任务。

函数参数允许您在调用函数时传递值,以便函数内部可以根据这些值执行不同的操作。

在Shell脚本中定义函数时,您可以在函数名后面的括号内指定参数。

这些参数在函数体内部可以通过特殊变量 $1、$2、$3 等来访问,其中数字表示参数的顺序。

$1 表示第一个参数,$2 表示第二个参数,以此类推。

以下是一个简单的示例,演示了如何在Shell脚本中使用函数参数:bash#!/bin/bash# 定义一个带有参数的函数greet() {local name=$1 # 将第一个参数赋值给局部变量nameecho "Hello, $name!" # 输出问候语}# 调用函数并传递参数greet "Alice" # 输出: Hello, Alice!greet "Bob" # 输出: Hello, Bob!在上面的示例中,我们定义了一个名为 greet 的函数,它接受一个参数(即要问候的人的名字)。

在函数体内部,我们使用 local 关键字声明了一个局部变量 name,并将第一个参数的值赋给它。

然后,我们使用 echo 命令输出问候语,其中包含了变量 name 的值。

当我们调用 greet 函数并传递不同的参数时,函数会根据传递的参数值输出不同的问候语。

除了 $1、$2 等特殊变量外,Shell还提供了其他一些与函数参数相关的特殊变量。

例如,$# 表示传递给函数的参数个数,$@ 表示所有传递给函数的参数列表,$* 表示所有传递给函数的参数作为一个单一的字符串。

这些特殊变量可以帮助您在函数内部对参数进行更灵活的处理。

总之,函数参数是Linux Shell脚本中非常有用的特性,它们允许您在函数定义时指定输入,并在函数体内部根据这些输入执行不同的操作。

linux+shell脚本语言基础知识

linux+shell脚本语言基础知识

linux+shell脚本语言基础知识linuxshell脚本语言基础知识一.shell简介linux系统的shell做为操作系统的外壳,为用户提供更多采用操作系统的界面,更确切的说,shell是用户与linux操作系统沟通的桥梁。

用户既可以输入命令执行,又可以利用shell脚本编程,完成更加复杂的操作。

shell就是一个命令解释器,它从输出设备加载命令,再将其变为计算机可以以了解的指令,然后执行它。

在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。

linux的shell种类众多,常用的存有:bourneshell(/usr/bin/sh或/bin/sh)、bourneagainshell(/bin/bash)、cshell(/usr/bin/csh)、kshell(/usr/bin/ksh)、shellforroot(/sbin/sh),等等。

不同的shell语言的语法有所不同,所以不能交换使用。

每种shell都有其特色之处,基本上,掌握其中任何一种就足够了。

通常用bash,也就是bourneagainshell进行编程。

二.shell采用1.建立和运行shell程序shell脚本程序:按照一定的语法结构把若干linux命令非政府在一起,就是这些命令按照我们的要求完成一定的功能。

它可以进行类似程序的编写,并且不需要编译就能执行。

(只需修改其权限)像是撰写高级语言的程序一样,撰写shell程序须要一个文本编辑器,如vi和vim,通常采用vim文本编辑器,积极支持更便捷的填入模式。

首先采用vim编辑器编辑一个hello.sh文件:#!/bin/bash#helloworldexampleecho\这样,一个最简单的shell程序就撰写完了。

第一行:#!说明hello.sh这个文件的类型的,这有点类似于windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。

shell 调用函数

shell 调用函数在Linuxshell中,函数是一种可重复使用、被划分成小段的程序片段,可以减少编写重复代码的时间。

它也可以是形成结构化编程的基础,使代码具有更好的可读性和可维护性。

在shell中,定义一个函数的操作非常简单,它可以是一段shell 脚本代码,也可以作为一个命令,只要在函数名称前加上一个简单的function关键字即可。

虽然shell本身不是一种完整的编程语言,但它支持函数调用,它可以在一个脚本中定义一个函数,并在另一个脚本中使用它。

定义函数的语法如下:function数名 {数主体}函数定义完成后,就可以在脚本中使用它了。

调用函数有两种方式:1、简单地使用函数名,比如:函数名2、使用函数名加括号的方式来调用函数,比如:函数名()上面是shell调用函数的语法,不过,shell中调用函数也可以通过变量进行。

shell中可以把函数名赋值给一个变量,然后就可以使用变量来调用函数,它的语法如下所示:变量名=函数名${变量名}上面的语法表示,可以把函数名赋值给一个变量,然后就可以使用变量这种形式来调用函数了。

另外,shell中还支持传入参数来实现函数重用,其语法如下:函数名数如果希望实现函数重用功能,可以把参数设定为不同的值,这样,函数就可以根据不同的传入参数进行不同的操作,从而达到重用的目的。

在shell中,如果想把函数的结果返回给调用者,可以在函数中使用return关键字,把结果返回给调用者,它的语法如下:return回值另外,在shell中,可以用$?来获取函数的返回值,它可以检测函数是否执行成功,并获取函数的返回值,例如:echo $?上面的语句可以检测函数是否正常执行,并获取函数的返回值。

总而言之,shell中调用函数可以使用两种方式:一种是直接使用函数名,另一种是通过变量来调用函数。

此外,shell中还可以使用传入参数实现函数重用,也可以使用return关键字以及$?来获取函数的返回值。

UNIX和LINUX-SHELL


• 测试文件状态
• 字符串测试 字符串测试: • 这里,s t r i n g _ o p e r a t o r可为: • = 两个字符串相等。 • != 两个字符串不等。 • -z 空串。 • -n 非空串 • 测试数值 • "num" num_operator "num" 或者 [ "num" num_operator "num" ] • num_operator可为: • -eq 数值相等。 • -ne 数值不相等。 • -gt 第一个数大于第二个数。 • -lt 第一个数小于第二个数。 • -le 第一个数小于等于第二个数。 • -ge 第一个数大于等于第二个数
• 4. 使用 使用exec命令 命令 • exec command • 此时这个Script将会被所执行的命令所取代。当这个命令执行完毕,这 个Script也会随之结束 • 5. 使用命令替换 • 如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这 个方法 • 将命令列於两个"`" 号之间,而Shell 会以这个命令执行後的输出结果代 替这个命令以及两个"`" 符号。 • exap1: • str='Current directory is '`pwd` • echo $str • 结果如下: • Current directory is /users/cc/mgtsai • exap2: • number=`expr $number + 1`
• 2 变元和符号
• 用户变元 用户变元(本地变元) • var=string • 若加上唯读,则加 readonly • 系统变元 系统变元(环境变元) 元 • 需要 export name • 已设定好的系统变元: 元 • $HOME 使用者自己的目录 • $PATH 执行命令时所搜寻的目录 • $TZ 时区 • $MAILCHECK 每隔多少秒检查是否有新的信件 • $PS1 在命令列时的提示号 • $PS2 当命令尚未打完时,Shell 要求再输入时的提示号 • $MANPATH man 指令的搜寻路径

Shell高级用法-----函数(function)及expect用法


else echo "-----代码校验失败" && exit
fi }
fun_deploy_direct_restart(){ #$direct_DIR/restart.sh systemctl restart httpd systemctl restart nginx echo "后端服务重启成功!!!" }
1、 function用 法
1、函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。 2、它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运 行,而是shell程序的一部分,定义函数只对当前的会话窗口有 效,如果再打开一个窗口再定义另外一个函数,就对另一个窗口有效,两者互不影响。 3、函数和shell程序比较相似,区别在于以下两种: (1)Shell程序在子Shell中运行。 (2)而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改。
[root@centos-7 data]# cat score.sh #!/bin/bash source /data/functions # 调用指定的函数文件的绝对路径 read -p "Input your score:" SCORE func_is_digit $SCORE # 直接调用上面的functions文件 if [ $? -ne 0 ];then #判断上面的命令执行不等于0(不成功)就退出
4、 函 数 返 回 值
函数有两种返回值: 1、函数的执行结果返回值: (1) 使用echo等命令进行输出 (2) 函数体中调用命令的输出结果
2、函数的退出状态码: (1) 默认取决于函数中执行的最后一条命令的退出状态码 (2) 自定义退出状态码,其格式为: return 从函数中返回,用最后状态命令决定返回值:

linuxshell字符串操作详解(长度,读取,替换,截取,连接,对比,删除,位置)

linuxshell字符串操作详解(长度,读取,替换,截取,连接,对⽐,删除,位置)1.Linux shell 截取字符变量的前8位实现⽅法有如下⼏种:1. expr substr “$a” 1 82. echo $a|awk ‘{print substr(,1,8)}’3. echo $a|cut -c1-84. echo $5. expr $a : ‘\(.\\).*’6. echo $a|dd bs=1 count=8 2>/dev/null2.按指定的字符串截取(1)第⼀种⽅法:从左向右截取最后⼀个string后的字符串${varible##*string}从左向右截取第⼀个string后的字符串${varible#*string}从右向左截取最后⼀个string后的字符串${varible%%string*}从右向左截取第⼀个string后的字符串${varible%string*}“*”只是⼀个通配符可以不要请看下⾯的例⼦:$ MYVAR=foodforthought.jpg$ echo ${MYVAR##*fo}rthought.jpg$ echo ${MYVAR#*fo}odforthought.jpg(2)第⼆种⽅法:${varible:n1:n2}:截取变量varible从n1开始的n2个字符,组成⼀个⼦字符串。

可以根据特定字符偏移和长度,使⽤另⼀种形式的变量扩展,来选择特定⼦字符串。

试着在 bash 中输⼊以下⾏:$ EXCLAIM=cowabunga$ echo ${EXCLAIM:0:3}cow$ echo ${EXCLAIM:3:7}abunga这种形式的字符串截断⾮常简便,只需⽤冒号分开来指定起始字符和⼦字符串长度。

3.按照指定要求分割:⽐如获取后缀名ls -al | cut -d “.” -f2⼩结:shell对应字符串的处理⽅法很多,根据需求灵活选择。

在做shell批处理程序时候,经常会涉及到字符串相关操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档