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…...
FPGA状态机实战:用Verilog实现自动售卖机(附三段式完整代码)
FPGA状态机实战:用Verilog实现自动售卖机(附三段式完整代码) 在数字电路设计中,状态机是最核心的设计思想之一。它能够将复杂的控制逻辑分解为有限的状态和状态之间的转换,使得设计更加清晰、可维护。自动售卖机作为一…...
从乱码到清晰:一位开发者与iText7中文PDF的三年斗争史
从乱码到清晰:一位开发者与iText7中文PDF的三年斗争史 【免费下载链接】itext7-chinese-font 项目地址: https://gitcode.com/gh_mirrors/it/itext7-chinese-font "为什么我的PDF中文又变成方块了?" 这可能是每个Java开发者在处理中文P…...
你的产品过不了EMC测试?很可能是电源接口这3个PCB布局坑没避开
电源接口EMC设计避坑指南:PCB布局中的三个致命细节 当你的产品在EMC测试中屡屡碰壁时,问题往往不在于防护电路设计本身,而是隐藏在PCB布局的细微之处。许多工程师精心设计了符合规范的防护拓扑,却在传导骚扰测试中遭遇滑铁卢。本文…...
GME-Qwen2-VL-2B效果实测:抽象文字如何匹配具体图片?
GME-Qwen2-VL-2B效果实测:抽象文字如何匹配具体图片? 1. 多模态搜索的突破性体验 想象一下,你脑海中浮现出一句富有哲理的句子:"人生不是裁决书",却想找一张能表达这种意境的图片。传统搜索引擎会怎么做&a…...
Llama-3.2V-11B-cot快速部署:单命令启动+自动加载双卡4090
Llama-3.2V-11B-cot快速部署:单命令启动自动加载双卡4090 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具,专为双卡4090环境深度优化。这个工具解决了传统大模型部署中的几个关键痛点:…...
华为光猫配置解密工具技术架构解析与实现机制
华为光猫配置解密工具技术架构解析与实现机制 【免费下载链接】HuaWei-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/hu/HuaWei-Optical-Network-Terminal-Decoder 在网络设备运维领域,华为光猫配置文件的安全加密机制为设备…...
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配 1. 环境准备与快速部署 SenseVoice-Small ONNX模型是一个经过量化处理的高效语音识别解决方案,特别适合跨境电商场景中的多语言语音处理需求。这个模型支持超过50种语言&#x…...
Obsidian移动端深度评测:安卓/iOS同步技巧+5个必装生产力插件
Obsidian移动端深度评测:安卓/iOS同步技巧5个必装生产力插件 在移动办公场景下,Obsidian作为一款强大的知识管理工具,其跨平台能力与插件生态为商务人士和学生群体提供了独特的价值。本文将深入解析Obsidian在Android和iOS平台的核心差异&…...
OpenClaw调用百川2-13B量化模型实测:Token消耗降低30%的3个技巧
OpenClaw调用百川2-13B量化模型实测:Token消耗降低30%的3个技巧 1. 为什么选择量化模型 当我第一次在本地部署OpenClaw时,最让我头疼的就是显存问题。我的RTX 3090显卡在运行百川2-13B原版模型时,显存占用经常突破20GB,导致其他…...
PCL点云凹包计算实战:从2D投影到3D建模的Alpha-Shape算法解析
1. Alpha-Shape算法:点云凹包计算的灵魂 第一次接触点云凹包计算时,我被这个看似简单实则精妙的问题难住了。传统凸包算法就像给点云套上一个紧绷的橡皮筋,而实际项目中我们经常需要保留物体表面的凹陷特征。这时候Alpha-Shape算法就派上了大…...
