shell脚本编写辅助命令
目录
一、echo 命令
二、字符串相关操作
1.截取字符串
2.获取字符串长度
3.字符串追加字符
4.从开头或结尾删除字符串指定格式内容
三、随机数
1.使用 $RANDOM
2.指定RANDOM变量的范围
(1)从0开始的范围
(2)从指定数始的范围
四、从文件获取循环语句的取值
1.for 循环从文件取值
2. while 循环从文件取值
五、IFS变量指定字段分隔符
1.查看IFS变量指定的字段分隔符
2.永久修改字段分隔符
3.临时修改字段分隔符
一、echo 命令
echo [选项] ... 将指定内容(字符、变量、命令等)标准输出到屏幕
-n 不换行输出(默认是换行输出)
-e 输出转义字符,将转义后的内容输出
-e 支持输出内容常用转义字符
| 转义字符 | 作用 |
|---|---|
| \b | 转义后相当于退格键(删除前一个字符,可使用多次) |
| \c | 不换行输出,在“\c”后面不存在字符的情况下,相当于echo -n 在“\c”后面存在字符的情况下,后面的字符不会被输出 |
| \n | 换行,被输出的字符从“\n”处开始另起一行输出 |
| \f | 换行,“\f”后换行输出的字符,开头从上一行结尾开始 |
| \v | 与“\f”相同 |
| \t | 转义后相当于插入tab制表符 |
| \r | 光标移至行首(不换行)将\r后的字符从头输出,覆盖原有长度的内容 |
| \ | 输出特殊字符本身,如\ 输出\ 本身,$ 输出 $本身 |
[root@localhost1 ~]#echo "abcd" && echo "abcd"
abcd
abcd
[root@localhost1 ~]#echo -n "abcd" && echo "abcd"
abcdabcd
[root@localhost1 ~]#echo -e "abcd\befg"
abcefg
[root@localhost1 ~]#echo -e "abcd\cefg"
abcd
[root@localhost1 ~]#echo -e "abcd\nefg"
abcd
efg
[root@localhost1 ~]#echo -e "abcd\fefg"
abcdefg
[root@localhost1 ~]#echo -e "abcd\vefg"
abcdefg
[root@localhost1 ~]#echo -e "abcd\tefg"
abcd efg
[root@localhost1 ~]#echo -e "abcd\refg"
efgd
[root@localhost1 ~]#echo -e "\\ \$"
\ $
![]()
二、字符串相关操作
1.截取字符串
${变量名:索引:长度}
注:索引是指一个字符串中,字符排序的编号,索引编号以0开头(第一个字符编号为0)
//定义变量string
[root@localhost1 ~]#string=nicetomeetyou
//截取
[root@localhost1 ~]#echo ${string:6:4}
meet
[root@localhost1 ~]#echo ${string:0:4}
nice
![]()
2.获取字符串长度
${#变量名}
[root@localhost1 ~]#string=nicetomeetyou
[root@localhost1 ~]#echo ${#string}
13
![]()
3.字符串追加字符
变量+=字符串或变量 //将原有的变量值后追加指定的字符串或变量值
[root@localhost1 data]#vim string.sh
#!/bin/bash
string1=abcdefg
string1+=hijk -- 追加字符串
echo $string1
string2="nice to meet "
yourname=jack
string2+=$yourname -- 追加变量的值
echo $string2
[root@localhost1 data]#bash string.sh
abcdefghijk
nice to meet jack
4.从开头或结尾删除字符串指定格式内容
echo ${变量名%指定格式内容}
echo ${变量名%%指定格式内容}
echo ${变量名#指定格式内容}
echo ${变量名##指定格式内容}
| % | 从末尾往前匹配最短符合指定格式的内容并删除 |
|---|---|
| %% | 从末尾往前匹配最长符合指定格式的内容并删除 |
| # | 从开头往后匹配最短符合指定格式的内容并删除 |
| ## | 从开头往后匹配最长符合指定格式的内容并删除 |
| 指定格式内容 | 字符串中符合某个内容特征的格式(如:*是以:开头后面有若干字符) |
最短符合可理解为只有一段满足指定格式的内容;最长符合可理解为所有满足指定格式的内容。
//定义一个变量i
[root@localhost1 ~]#i="11,22,33,44"
[root@localhost1 ~]#echo $i
11,22,33,44
//对$i中从结尾开始最短满足,*格式的内容进行删除
[root@localhost1 ~]#echo ${i%,*}
11,22,33
//对$i中从结尾开始最长满足,*格式的内容进行删除
[root@localhost1 ~]#echo ${i%%,*}
11
//对$i中从开头开始最短满足*,格式的内容进行删除
[root@localhost1 ~]#echo ${i#*,}
22,33,44
//对$i中从开头开始最长满足*,格式的内容进行删除
[root@localhost1 ~]#echo ${i##*,}
44
//对$i中从结尾开始最短满足*,*,格式的内容进行删除
[root@localhost1 ~]#echo ${i#*,*,}
33,44
三、随机数
1.使用 $RANDOM
$ RANDOM //RANDOM变量可以生成随机数(默认范围 0 ~ 32767)
[root@localhost1 ~]#echo $RANDOM
6584
[root@localhost1 ~]#echo $RANDOM
14161
![]()
2.指定RANDOM变量的范围
(1)从0开始的范围
$[ RANDOM % n ] //n代表指定数字,使用取余操作可实现指定随机数范围( 0 ~ n-1)
//取 0~9 的随机数
[root@localhost1 ~]#echo $[RANDOM % 10]
0
[root@localhost1 ~]#echo $[RANDOM % 10]
4
[root@localhost1 ~]#echo $[RANDOM % 10]
6
[root@localhost1 ~]#echo $[RANDOM % 10]
8
![]()
(2)从指定数始的范围
$[ RANDOM % n + x ] //x为指定数字,n 后加上 x ,代表的随机数范围是( x ~ n-1+x)
//取 1~100 范围的随机数
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
38
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
49
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
76
[root@localhost1 ~]#echo $[RANDOM % 100 + 1]
12
![]()
四、从文件获取循环语句的取值
首先创建文件用于下面的脚本取值,这里每个取值使用换行符分割,实际上每个取值默认可以通过空格、制表符、换行符
//创建文件用于脚本取值
[root@localhost1 ifstest]#vim value.txt
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba
![]()
1.for 循环从文件取值
for 变量名 in $(cat 文件位置)
do
命令序列
done
//for 循环从文件取值
[root@localhost1 ifstest]#vim CatchFileValue.sh
#!/bin/bash
for i in $(cat /ifstest/value.txt)
doecho $i
done
[root@localhost1 ifstest]#bash CatchFileValue.sh
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba
![]()
2. while 循环从文件取值
while read 变量名
do
命令序列
done < file
[root@localhost1 ifstest]#vim CatchFileValue.sh
#!/bin/bash
while read i
doecho $i
done < /ifstest/value.txt
[root@localhost1 ifstest]#bash CatchFileValue.sh
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba
![]()
cat 文件位置 | while read 变量名
do
命令序列
done
[root@localhost1 ifstest]#vim CatchFileValue.sh
#!/bin/bash
cat /ifstest/value.txt | while read i
doecho $i
done[root@localhost1 ifstest]#bash CatchFileValue.sh
zhangsan
lisi
wangwu
zhaoliu
qianqi
zhuba
![]()
五、IFS变量指定字段分隔符
1.查看IFS变量指定的字段分隔符
[root@localhost ~]# set | grep IFS //使用此命令可以查看IFS指定的字段分隔符
-- IFS变量指定的字段分隔符默认为 (空格)、\t(tab制表符)、\n(enter换行符)
[root@localhost1 ~]#set | grep IFS
IFS=$' \t\n' local i IFS='local i IFS=" "'local i IFS=" "'local i IFS='local i IFS='local c i=0 IFS='local IFS='local IFS='local option option2 i IFS='IFS='local IFS='local IFS='local IFS='local IFS='local IFS='local IFS='local i IFS='local IFS='local i c='' IFS='local OIFS=$IFS IFS='IFS=$OIFS;local IFS='local IFS='local IFS='local IFS='
![]()
2.永久修改字段分隔符
//直接修改IFS变量的值,可以实现永久修改字段分隔符
[root@localhost1 ~]#IFS=$'/n'
[root@localhost1 ~]#set | grep IFS
IFS=/n -- 这里显示已经被修改成/n(换行符)local i IFS='local i IFS=" "'local i IFS=" "'local i IFS='
...
3.临时修改字段分隔符
//指定文件用于循环语句取值
[root@localhost2 ~]#vim value.txt
zhang san
li si
wang wu
zhao liu
qian qi
zhu ba
//默认情况的$IFS会指定空格、制表符、换行符为字段分割符
[root@localhost2 ~]#vim CatchFileValue.sh
#!/bin/bash
for i in `cat /root/value.txt`
doecho $i
done
//文件中的值输出效果如下
[root@localhost2 ~]#bash CatchFileValue.sh
zhang san
li si
wang wu
zhao liu
qian qi
zhu ba
zhang
san
li
si
wang
wu
zhao
liu
qian
qi
zhu
ba
![]()
在一个脚本中,如果某段命令行程序需要使用特定的字段分隔符,可使用如下操作
IFSb=$IFS -- 自定义一个变量,将$IFS的变量值赋给此变量
IFS='\n' -- 修改$IFS指定的字段分隔符
命令序列 -- 修改后的命令序列将会使用修改后的$IFS指定的字段分隔符
IFS=$IFSb -- 将自定义的变量再赋值给$IFS,即恢复原本的$IFS
命令序列 -- 之后的命令将不会受到之前修改的$IFS的影响
[root@localhost2 ~]#vim CatchFileValue.sh
#!/bin/bash
IFSb=$IFS
IFS=$'\n' -- 将字段分割符改为\n(换行符)
for i in `cat /root/value.txt`
doecho $i
done
echo "------------"
IFS=$IFSb -- 将原本的$IFS变量值恢复
for j in `cat /root/value.txt`
doecho $j
done
[root@localhost2 ~]#bash CatchFileValue.sh
zhang san -- 实现只取换行符分割的字段
li si
wang wu
zhao liu
qian qi
zhu ba
------------
zhang --恢复后不受之前修改的影响,与原本输出效果相同
san
li
si
wang
wu
zhao
liu
qian
qi
zhu
ba
![]()
相关文章:
shell脚本编写辅助命令
目录 一、echo 命令 二、字符串相关操作 1.截取字符串 2.获取字符串长度 3.字符串追加字符 4.从开头或结尾删除字符串指定格式内容 三、随机数 1.使用 $RANDOM 2.指定RANDOM变量的范围 (1)从0开始的范围 (2)从指定数始…...
高并发编程:线程池
一、概述 线程池首先有几个接口先了解第一个是Executor,第二个是ExecutorService,在后面才是线程池的一个使用ThreadPoolExecutor。 二、Executor Executor看它的名字也能理解,执行者,所以他有一个方法叫执行,那么执…...
微信小程序开发uni-app-8分钟上手开发
本篇文章uni-app微信小程序开发-8分钟上手开发 -首先到微信小程序官网登录/注册微信小程序 微信小程序官网 uni-app 微信小程序 注册微信小程序 这里要注意: 激活邮箱之后,选择主体类型为 “个人类型”,并按要求登记主体信息。主体信息提…...
【C++11】 initializer_list | 右值引用 | 移动构造 | 完美转发
文章目录 1. 统一的列表初始化{ } 初始化initializer_list 2. 引用左值引用右值引用左值引用与右值引用的相互转换右值引用的真正使用场景移动构造 C98与C11传值返回问题注意事项总结 3. 完美转发 1. 统一的列表初始化 { } 初始化 C11 扩大了括号括起的列表(初始化列表)的使用…...
基于html+css的图展示122
准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...
《Unix环境高级编程》/bin/sh: ./fixup.awk: Permission denied
我的代码是从http://www.apuebook.com/code3e.html下载的,先是在 使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 在代码顶级目录下,执行make。 发现报错: ./fi…...
万字长文+示例代码详解DDD中常用的架构(含代码示例)
目录 分层架构(Layered Architecture) 概念 示例代码 总结 领域驱动设计的六边形架构(Hexagonal Architecture) 概念 示例代码 总结 CQRS(Command Query Responsibility Segregation) 概念 示例…...
Debezium UI On ECS编译安装及开放Web访问
1. 访问debezium-ui的代码仓库,下载源码 GitHub - debezium/debezium-ui: A web UI for Debezium; Please log issues at https://issues.redhat.com/browse/DBZ. 2. 解压zip源码包: TEST[hadoopshdcvfsla1894 ~]$ cd /data/module TEST[hadoopshd…...
【支付系统】核心支付流程
支付在产品中常见的用处为购买和充值.这两种功能操作大相径庭,其中购买相对充值多了很多步骤,它需要锁商品或者库存,还需要超时未支付取消订单等操作.在这篇文章中主要探讨支付部分,属于购买和充值公共部分. 下面是绘制的简易支付时序图 以上时序图并非完整,其实核心步骤就是, …...
电脑系统可以直接备份到其它硬盘上吗
在日常使用电脑的过程中,我们都希望能够保护好重要的系统数据,以防止意外数据丢失或系统崩溃。那么,能否将电脑系统直接备份到其他硬盘上呢?本文将为您解答这个问题,并探讨备份系统的方法和注意事项。 工具/原料&…...
springboot项目如何优雅停机
文章目录 前言kill -9 pid的危害如何优雅的停机理论步骤优雅方式1、kill -15 pid 命令停机2、ApplicationContext close停机3、actuator shutdown 停机4、ApplicationListener 监听延时停机 前言 相信很多同学都会用Kill -9 PID来杀死进程,如果用在我们微服务项目里…...
springboot mybatis-plus 代码生成工具
介绍 基于mybatis-plus代码生成工具 后续会不断完善 规划 后续会基于此功能搞低代码平台,会有前端VUE mybatis-plus介绍&特性 • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 • 损耗小࿱…...
超全、超详细的Redis学习笔记总结
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...
Day05 04-MySQL分库分表介绍
文章目录 第十七章 MySQL分库分表17.1 什么是分库分表17.2 为什么要分库分表17.3 垂直切分17.3.1 垂直分库17.3.2 垂直分表 17.4 水平切分17.4.1 水平分库17.4.2 水平分表17.4.3 常见的水平切分规则 第十七章 MySQL分库分表 17.1 什么是分库分表 MySQL数据库常见的优化方案中…...
基于SpringBoot+vue的毕业生信息招聘平台设计和实现
博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…...
git一定要学会,加油
gitgit文档http://file:///F:/%E8%B5%84%E6%96%99%E5%A4%8D%E4%B9%A0/Git%E4%BC%98%E7%A7%80%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Git%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Pro%20Git%E4%B8%AD%E6%96%87PDF%E7%89%88.pdf init 初始化仓库 这个命令在当前目录下初始化一个 G…...
TVM面试题
1、TVM中的调度器(Scheduler)是什么?请简要解释TVM调度器的作用和工作原理。 TVM中的调度器(Scheduler)是负责将计算图映射到特定硬件目标上的组件。调度器在TVM中起着关键的作用,它决定了计算图的执行方式、并行化策略以及内存布局等,以优化…...
CSS相关面试题
1、标准盒子模型和IE怪异盒子模型? 标准盒子模型就是指的元素的宽度和高度仅包括的内容区域,不包括边框和内边距,也就是说,元素的实际宽度和高度等于内容区域的宽度和高度IE怪异盒子是指元素的高度和宽度,包括内容区域…...
6.11总结
这周准备了蓝桥杯,主要看了一些以前学过的东西,看了二分,树状数组,树状数组二分,复习了利用倍增相关的算法。 周六去打的蓝桥杯,总体来说也就一般吧,出了考场突然想起来我b题中间的称号写成了加…...
Hazel游戏引擎(008-009)事件系统
文中若有代码、术语等错误,欢迎指正 文章目录 008、事件系统-设计009、事件系统-自定义事件前言自定义事件类与使用声明与定义类代码包含头文件使用事件 事件调度器代码 C知识:FunctionBind用法function基本使用 012、事件系统-DemoLayer用EventDispache…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
