Linux的shell脚本函数教程

  • 一、shell介绍
  • 二、shell函数的介绍
  • 三、函数的定义
  • 四、shell中函数使用示例

一、shell介绍

二、shell函数的介绍

三、函数的定义

四、shell中函数使用示例

一、shell介绍

1.在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
2.同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
3.Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

二、shell函数的介绍
Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。
Shell 中的函数和C++、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。

三、函数的定义
要定义一个函数可以用以下两种方式

function funcname ()
{
shell commnads
}

 funcname ()
{
shell commnads
}

四、shell中函数使用示例
编辑名为user_login.sh的脚本,内容如下:

#!/bin/bash
##########################################################
#File Name:user_login.sh
#Version:V1.0
#Created Time:2021-04-27 22:53:52
#Description:
#查看用户是否登录
#语法: user_login loginname
##########################################################function user_login ()
{if who |grep $1 > /dev/nullthenecho "user $1 is on"elseecho "user $1 is off"fi
}
~

执行结果

[root@control scripts]# source user_login.sh
[root@control scripts]# user_login root
user root is on
[root@control scripts]# user_login admin
user admin is off
[root@control scripts]# 

分析:这个user_login.sh脚本查看作为参数传入的用户名是否登录在本机上。通过source命令使得函数从文件中读入,在当前shell中生效,函数就如同命令一样变得可调用,将文件后的参数传入函数体,来判断用户是否在线。

五、函数的参数和返回值

#!/bin/bash
##########################################################
#File Name:add.sh
#Version:V1.0
#Created Time:2021-04-27 23:10:05
#Description: 数字相加
##########################################################add ()
{let "sum=$1+$2"return $sum
}

执行结果

[root@control scripts]# source add.sh
[root@control scripts]# add 3 4
[root@control scripts]# echo $?
7

其他示例:

#!/bin/bash
##########################################################
#File Name:function.sh
#Version:V1.0
#Created Time:2021-04-27 23:19:51
#Description:
##########################################################funWithParam(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"echo "第十个参数为 $10 !"echo "第十个参数为 ${10} !"echo "第十一个参数为 ${11} !"echo "参数总数有 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

执行结果:

[root@control scripts]# ./function.sh
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意,10不能获取第十个参数,获取第十个参数需要10 不能获取第十个参数,获取第十个参数需要10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。

Linux的shell脚本函数教程相关推荐

  1. 一本不错的Linux/Unix Shell脚本学习教程

    找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://www.dingbing.com/book/linuxshell.zip 点这 ...

  2. 2021-04-09 linux的shell脚本简单教程

    linux 的基本操作(编写shell 脚本) 如果文章中的图片再次挂掉了,麻烦请去公众号内查看  终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本 ...

  3. Linux 中shell脚本编写教程

    1.文本处理工具 1.1 grep工具 Linux grep 命令用于查找文件里符合条件的字符串.  grep [选项] '关键字 文件名 grep 指令用于查找内容包含指定的范本样式的文件,如果发现 ...

  4. Linux中Shell脚本函数库的笔记

    Shell函数库的作用:函数库就是对一些十分常用的功能,独立出来,然后集中存放在一些独立的文件中,这些文件可以理解为函数库.函数库本质上也是函数,一般情况下函数库的函数建议使用下划线开头. 示例: c ...

  5. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

  6. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  7. Linux Shell脚本入门教程系列之(十四) Shell Select教程

    本文是Linux Shell脚本系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句 ...

  8. Linux Shell脚本入门教程系列之(三)Shell变量

    本文是Linux Shell脚本系列教程的第(三)篇,更多shell教程请看:Linux Shell脚本系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的.继上一篇之后,今天就为大家介 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

最新文章

  1. java 动态解析_Java 如何解析key为动态的json操作
  2. 虚拟化对VMcpu分配的理解
  3. 产品下级分类显示太宽了,请问在哪调整?
  4. U(优)盘安装FreeBSD-9.0+GNOME_lite桌面
  5. Anaconda安装找不到的依赖包,以DBUtils包为例
  6. 杭电计算机组成原理教材答案,杭电计算机组成原理包建课后作业答案详解.doc...
  7. TeeChart 2022.2 for .NET
  8. 忍无可忍,决定宁可错杀千万,也不漏掉一个,弹已出膛,剑已出鞘!
  9. 打造Android不死进程
  10. Springboot无法启动:At least one base package must be specified
  11. 实验:通过MUX-vlan实现vlan隔离
  12. @Primary 和 @Qualifier
  13. Jira-使用docker安装jira(支持最新版本)
  14. MS17_010(永恒之蓝)漏洞复现。
  15. Java操作Bat文件,启动Bat
  16. 测试用例(功能用例)——资产维修、资产报废
  17. 商业智能掌控ERP金蝶BI前景被看好的点
  18. 【学术相关】申请审核制下,到双一流大学读博的难度有多大?
  19. 服务器fru信息删掉一行,华为服务器 故障处理-收集信息
  20. JS中同步和异步问题及其区别

热门文章

  1. python学习--for循环详解
  2. java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector解决方法
  3. Linux 修改mac 地址方法记录
  4. Golang 之 Base62 编码
  5. HDU 5727 Necklace
  6. 1.1 开始起步,配置ruby on rails运行环境
  7. 美媒:中国大陆最火的工作,教人工智能识图
  8. 关于string类型的字符串是否以\0结尾
  9. 原理 msc_解析应用在气象站中的GPRS通信原理及优势
  10. linux无显卡运行程序,Ubuntu中在应用程序菜单添加未显示的应用程序启动器