shell(shell函数、shell正则表达式)
本章内容
- shell函数
- shell正则表达式
1、shell函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.
格式:
funname () {
CMD #函数体
}
例子:
#!/bin/bash
fun () {
echo "hello world"
}
fun
...
╭─root@localhost.localdomain ~
╰─➤ bash test8.sh
hello world
return 函数传参
#!/bin/bash
fun () {
echo "hello world"
return $i
}
for i in {1..4}
do
fun
done
...
╭─root@localhost.localdomain ~
╰─➤ bash test8.sh
hello world
hello world
hello world
hello world
╭─root@localhost.localdomain ~
╰─➤ echo $?
4
return 在函数中定义状态返回值
返回并终止函数
返回的只能是 0-255 的数字,类似于 exit
#!/bin/bash
fun () {
echo "hello world"
return $i
echo "how beautiful!"
}
for i in {1..4}
do
fun return
done
...
╭─root@localhost.localdomain ~
╰─➤ bash test8.sh
hello world
hello world
hello world
hello world
函数参数
摘自菜鸟教程:https://www.runoob.com/linux/linux-shell-func.html
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
带参数的函数示例:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
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
[test@root]:# bash funWithParam
#输出结果:
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
#注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
另外,还有几个特殊字符用来处理参数:
参数处理
# 说明
$# -->#传递到脚本或函数的参数个数
$* --># 以一个单字符串显示所有向脚本传递的参数
$$ -->#脚本运行的当前进程ID号
$! -->#后台运行的最后一个进程的ID号
$@ -->#与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- -->#显示Shell使用的当前选项,与set命令功能相同。
$? -->#显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
2、正则表达式(基于grep讲解)
- 功能就是用来检索、替换那些符合某个模式(规则)的文本,正则表达式在每种语言中都会有;
- 正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法
- 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串
- Linux正则表达式一般以行为单位处理
基础正则表达式
| 符号 | 描述 |
|---|---|
| . | 匹配任意单个字符(必须存在) |
| ^ | 匹配以某个字符开头的行 |
| $ | 配以什么字符结尾的行 |
| * | 匹配前面的一个字符出现0次或者多次;eg:a*b |
| .* | 表示任意长度的任意字符(*号表示前面的.出现0次或多次,.表示任意字符且存在) |
| [] | 表示匹配括号内的一个字符(不是字符串) |
| [^] | 匹配[^字符]之外的任意一个字符 |
| [] | 匹配非[^字符]内字符开头的行 |
| \< | 锚定 单词首部;eg:\<root |
| \> | 锚定 单词尾部:eg:\>root |
| \{m,n\} | 表示匹配前面的字符出现至少m次,至多n次 |
| \(\) | 表示对某个单词进行分组;\1表示第一个分组进行调用 |
扩展正则
- egrep ...
- grep -E ...
- 扩展正则支持所有基础正则;并有补充
- 扩展正则中{}和[]不用转义可以直接使用;
| 符号 | 描述 |
|---|---|
| + | 表示前面的字符至少出现1次的情况 |
| | | 表示“或” |
| ? | 表示前面的字符至多出现1次的情况 |

shell(shell函数、shell正则表达式)的更多相关文章
- 我们一起来学Shell - shell的函数
文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...
- Linux操作系统shell与函数详解
shell和函数的定义 1. linux shell 函数 将一组命令集或语句形成一个可用的块, 这些语句块称为函数. 2. shell 函数的组成 函数名:函数名字,注意一个脚本中函数名要唯一, ...
- Linux&shell之高级Shell脚本编程-创建函数
写在前面:案例.常用.归类.解释说明.(By Jim) 使用函数 #!/bin/bash # testing the script function myfun { echo "This i ...
- shell 中函数放回字符串问题
shell 中函数放回字符串问题 shell 中不可以直接 return 字符串 ,可以return 数字.如果要return 字符串 改为 echo "hello world" ...
- shell从函数文件里调用函数
碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在以下直接调用:一种是通过加载shell,在shell中直接调用:第三种是将函数写入文件 ...
- linux shell自定义函数(定义、返回值、变量作用域)介绍
http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...
- Linux shell 自定义函数
一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...
- Shell学习之结合正则表达式与通配符的使用(五)
Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...
- shell脚本--函数
shell的函数和Javacript和php的函数声明一样,只不过shell在调用函数的时候,只需要写函数名就可以调用函数,注意不要在函数名后面加括号 创建并使用函数 #!/bin/bash #文件名 ...
- shell进阶函数
函数的定义和用途 函数function是由若干条shell命令组成的语句块,实现shell代码的重用和模块化编程. 函数和shell程序的异同点 它与shell程序形式上是相似的,不同的是它不是一个单 ...
随机推荐
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL serve 错误1130:主机192.168.1.3& ...
- 强化学习 1 --- 马尔科夫决策过程详解(MDP)
强化学习 --- 马尔科夫决策过程(MDP) 1.强化学习介绍 强化学习任务通常使用马尔可夫决策过程(Markov Decision Process,简称MDP)来描述,具体而言:机器处在一个环境 ...
- 如何利用Typora编写博客,快速发布到多平台?
在不同的平台发布同样的文章,最让人头疼的就是图片问题,如果要手动一个个去重新上传,耗时耗力,还容易搞错.下面分享的方法,可以将Typora编写的文章快速发布到CSDN.微信公众号.博客园.简书等平台. ...
- 常用的Git命令清单
目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...
- 面试官:Mysql 中主库跑太快,从库追不上怎么整?
写这篇文章是因为之前有一次删库操作,需要进行批量删除数据,当时没有控制好删除速度,导致产生了主从延迟,出现了一点小事故. 今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题. 坐好了, ...
- VirtualBox安装ubuntu 开发环境 配置
一 下载VirtualBox安装程序以及ubuntu光盘镜像 1.下载VirtualBox安装程序(本文选用的是6.0.12版本) 建议从清华大学镜像站 https://mirrors.tuna.ts ...
- C++ 简单输出当前日期时间
根据https://www.runoob.com/cplusplus/cpp-date-time.html编写. 首先介绍2个数据类型. 一个是time_t,与时间函数相关的变量,定义的变量记录着自 ...
- 【剑指 Offer】03.数组中重复的数字
题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- 【Linux】vim小技巧,如何批量添加或者删除注释
环境:centos vim或者vi都可以 例如文件如下: aaa bbb ccc ddd 有四行文件,想将前三行都添加注释 先查看行数: :set nu 可以这样做: :1,3s%^%#% 即可,如 ...
- 跨平台导PDF,结合wkhtmltopdf很顺手
前言 好东西要分享,之前一直在使用wkhtmltopdf进行pdf文件的生成,常用的方式就是先安装wkhtmltopdf,然后在程序中用命令的方式将对应的html生成pdf文件,简单而且方便:但重复的 ...