如果你学过开发,肯定知道函数的作用。如果你是刚刚接触到这个概念的话,也没有关系,其实很好理解的。函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样就节省了时间还节省了空间。

#! /bin/bash
## author:Xiong Xuehao
## Use fun in this script.
function sum(){
sum=$[$1 + $2]
echo $sum
}
sum $1 $2

fun.sh 中的sum() 为自定义的函数,在shell脚本中要用

function 函数名() {

command

}

这样的格式去定义函数。

上个脚本执行过程如下:

提醒你一下,在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。

案例:shell脚本实现中国传统数学里面的9×9乘法口诀表

中国传统数学里面的9*9乘法口诀表:

#! /bin/bash
## author:Xiong Xuehao
## 9 * 9 multiplication formula table of traditional Chinese mathematics.
function MultiplicationFormula(){
for x in `seq 1 9`; do
for y in `seq 1 9`; do
if [ $y -le $x ];then
echo -n "$y × $x = $[$x*$y] "
else
echo ""
break
fi
done
done echo ""
} echo "中国传统数学里面的9*9乘法口诀表:"
MultiplicationFormula;

执行结果如图:

前面及章节的训练脚本: sbin-myfirstbash.tar.gz


【练习题】

shell脚本的练习题,你最好不要偷懒。

1. 编写shell脚本,计算1-100的和;

2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;

3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;

4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组;

5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

6. 编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255,="" 0<n3<255,="" 0<n4<255<="" span="">)。

以下为练习题答案:

1. #! /bin/bash

sum=0

for i in `seq 1 100`; do

sum=$[$i+$sum]

done

echo $sum

2. #! /bin/bash

n=0

while [ $n -lt "1" ]; do

read -p "Please input a number, it must greater than "1":" n

done

sum=0

for i in `seq 1 $n`; do

sum=$[$i+$sum]

done

echo $sum

3. #! /bin/bash

for f in `ls /root/`; do

if [ -d $f ] ; then

cp -r $f /tmp/

fi

done

4. #! /bin/bash

groupadd users

for i in `seq 0 9`; do

useradd -g users user_0$i

done

for j in `seq 10 100`; do

useradd -g users user_$j

done

5. #! /bin/bash

awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt

sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt

awk '$1>10 {print $2}' /tmp/n2.txt

6. #! /bin/bash

checkip() {

if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ; then

a=`echo $1 | awk -F. '{print $1}'`

b=`echo $1 | awk -F. '{print $2}'`

c=`echo $1 | awk -F. '{print $3}'`

d=`echo $1 | awk -F. '{print $4}'`

for n in $a $b $c $d; do

if [ $n -ge 255 ] || [ $n -le 0 ]; then

echo "the number of the IP should less than 255 and greate than 0"

return 2

fi

done

else

echo "The IP you input is something wrong, the format is like 192.168.100.1"

return 1

fi

}

rs=1

while [ $rs -gt 0 ]; do

read -p "Please input the ip:" ip

checkip $ip

rs=`echo $?`

done

echo "The IP is right!"

【完】

shell脚本中的函数的更多相关文章

  1. 在shell脚本中使用函数

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 对于在脚本中重复使用的功能模块,可以封装成为函数. shell脚本中函数的定义可以使用如下两种方式: a. ...

  2. 8、在Shell脚本中使用函数

    学习目标Shell的函数 Shell程序也支持函数.函数能完成一特定的功能,可以重复调用这个函数.函数格式如下: 函数名() {     函数体 }   函数调用方式: 函数名 参数列表   实例:编 ...

  3. 在shell脚本中使用函数的返回值

    #!/bin/bash - function mytest() { echo "arg1 = $1" if [ $1 = "1" ] ;then return ...

  4. shell编程基础(四): shell脚本语法之函数及调试

    一.Shell脚本中的函数 和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表.例如: #! /bin/sh fun(){ echo "Function fun ...

  5. Shell脚本中使用function(函数)示例

    这篇文章主要介绍了Shell脚本中使用function(函数)示例,本文着重讲解的是如何在shell脚本中使用自定义函数,并给出了两个例子,需要的朋友可以参考下   函数可以在shell script ...

  6. Shell脚本中变量和函数变量的作用域

    (1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.(2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变 ...

  7. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  8. shell脚本中局部变量local

    shell脚本中局部变量 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是gl ...

  9. [转帖]Shell脚本中的break continue exit return

    Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 cont ...

  10. shell脚本中一些特殊变量

    在shell脚本中,一些常见的特殊变量表示方式还是需要知道的 如下就是一些经常用到的特殊变量表示方法: $0    当前脚本名$1 $2...    传入脚本or函数的参数(大于10需大括号括起来)$ ...

随机推荐

  1. Excel两张表查重,返回True

    =VLOOKUP(P2,Sheet2!A:A,1,0)=P2 VLOOKUP(A1,Sheet2!A:D,1,0) VLOOKUP--首列查找 A1--查找条件 Sheet2--同一工作簿中的第二工作 ...

  2. 8、tnsnames文件配置

    监听的配置文件 2.tnsnames.ora文件 tnsnames.ora文件:客户端的 配置tnsnames.ora监听文件 1.使用netca命令 指定图像映射机器 [oracle@db11g a ...

  3. ubuntu 使用tree打印树形结构

    ubuntu 使用 tree 命令能打印目录结构 sudo apt-get install tree 安装后使用tree就行了 . ├── index.php ├── phpQuery │   ├── ...

  4. 深入JVM的Class文件结构

    Class文件由顺序的8位字节为基础单位构成的二进制流.各个项目严格按照顺序紧凑排列,无分隔符. 需要用8位字节以上空间数据项时按照高位在前分割成若干个8位字节存储. 只包含2种数据类型: 无符号数 ...

  5. 为什么Spring官方不推荐使用 @Autowired?

    前言 很多人刚接触 Spring 的时候,对 @Autowired 绝对是爱得深沉. 一个注解,轻松搞定依赖注入,连代码量都省了. 谁不爱呢? 但慢慢地,尤其是跑到稍微复杂点的项目里,@Autowir ...

  6. 精橙FPGA,一个承接FPGA代码设计的资深工程师团队。

    一.我们是谁 精橙FPGA,一个承接FPGA代码设计的资深工程师团队. 二.服务内容 面向在校学生.职场工程师等人员,提供FPGA入门指导和FPGA代码设计外包服务. 三.业务范围 主要提供Xilin ...

  7. WxPython跨平台开发框架之用户选择和标签组件的设计

    在系统的权限管理中,往往都会涉及到用户的选择处理,特别是基于角色的访问控制中,很多情况下需要用到选择用户的处理.本篇随笔,基于WxPython跨平台开发框架,采用原有开发框架成熟的一套权限系统理念,对 ...

  8. opencv imshow 大图片显示,拖动显示

    用imshow显示大图片,不能完整显示,不方便.结合网友的代码,修改成现在的代码,可以拖动图片,方便查看完整图片.而且方便调试,只需要用MatShow替换imshow. struct MousePar ...

  9. 【Amadeus原创】Docker安装wikijs wiki系统

    拉取mysql8的镜像并运行 docker pull mysql docker run -d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/con ...

  10. 数据万象 | AIGC 存储内容安全解决方案

    AIGC(人工智能生产内容) 已经成为与PGC(专业生产内容).UGC(用户生产内容)并驾齐驱的内容生产方式.由于 AI 的特性,AIGC在创意.个性化.生产效率等方面具有独特的优势,这些优势可以使得 ...