当前位置: 首页 > news >正文

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变量的范围 &#xff08;1&#xff09;从0开始的范围 &#xff08;2&#xff09;从指定数始…...

高并发编程:线程池

一、概述 线程池首先有几个接口先了解第一个是Executor&#xff0c;第二个是ExecutorService&#xff0c;在后面才是线程池的一个使用ThreadPoolExecutor。 二、Executor Executor看它的名字也能理解&#xff0c;执行者&#xff0c;所以他有一个方法叫执行&#xff0c;那么执…...

微信小程序开发uni-app-8分钟上手开发

本篇文章uni-app微信小程序开发-8分钟上手开发 -首先到微信小程序官网登录/注册微信小程序 微信小程序官网 uni-app 微信小程序 注册微信小程序 这里要注意&#xff1a; 激活邮箱之后&#xff0c;选择主体类型为 “个人类型”&#xff0c;并按要求登记主体信息。主体信息提…...

【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下载的&#xff0c;先是在 使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6&#xff0c;使用uname -r看到内核是3.10.0-957.el7.x86_64。 在代码顶级目录下&#xff0c;执行make。 发现报错&#xff1a; ./fi…...

万字长文+示例代码详解DDD中常用的架构(含代码示例)

目录 分层架构&#xff08;Layered Architecture&#xff09; 概念 示例代码 总结 领域驱动设计的六边形架构&#xff08;Hexagonal Architecture&#xff09; 概念 示例代码 总结 CQRS&#xff08;Command Query Responsibility Segregation&#xff09; 概念 示例…...

Debezium UI On ECS编译安装及开放Web访问

1. 访问debezium-ui的代码仓库&#xff0c;下载源码 GitHub - debezium/debezium-ui: A web UI for Debezium; Please log issues at https://issues.redhat.com/browse/DBZ. 2. 解压zip源码包&#xff1a; TEST[hadoopshdcvfsla1894 ~]$ cd /data/module TEST[hadoopshd…...

【支付系统】核心支付流程

支付在产品中常见的用处为购买和充值.这两种功能操作大相径庭,其中购买相对充值多了很多步骤,它需要锁商品或者库存,还需要超时未支付取消订单等操作.在这篇文章中主要探讨支付部分,属于购买和充值公共部分. 下面是绘制的简易支付时序图 以上时序图并非完整,其实核心步骤就是, …...

电脑系统可以直接备份到其它硬盘上吗

在日常使用电脑的过程中&#xff0c;我们都希望能够保护好重要的系统数据&#xff0c;以防止意外数据丢失或系统崩溃。那么&#xff0c;能否将电脑系统直接备份到其他硬盘上呢&#xff1f;本文将为您解答这个问题&#xff0c;并探讨备份系统的方法和注意事项。 工具/原料&…...

springboot项目如何优雅停机

文章目录 前言kill -9 pid的危害如何优雅的停机理论步骤优雅方式1、kill -15 pid 命令停机2、ApplicationContext close停机3、actuator shutdown 停机4、ApplicationListener 监听延时停机 前言 相信很多同学都会用Kill -9 PID来杀死进程&#xff0c;如果用在我们微服务项目里…...

springboot mybatis-plus 代码生成工具

介绍 基于mybatis-plus代码生成工具 后续会不断完善 规划 后续会基于此功能搞低代码平台&#xff0c;会有前端VUE mybatis-plus介绍&特性 • 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑 • 损耗小&#xff1…...

超全、超详细的Redis学习笔记总结

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

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的毕业生信息招聘平台设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在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)是什么&#xff1f;请简要解释TVM调度器的作用和工作原理。 TVM中的调度器(Scheduler)是负责将计算图映射到特定硬件目标上的组件。调度器在TVM中起着关键的作用&#xff0c;它决定了计算图的执行方式、并行化策略以及内存布局等&#xff0c;以优化…...

CSS相关面试题

1、标准盒子模型和IE怪异盒子模型&#xff1f; 标准盒子模型就是指的元素的宽度和高度仅包括的内容区域&#xff0c;不包括边框和内边距&#xff0c;也就是说&#xff0c;元素的实际宽度和高度等于内容区域的宽度和高度IE怪异盒子是指元素的高度和宽度&#xff0c;包括内容区域…...

6.11总结

这周准备了蓝桥杯&#xff0c;主要看了一些以前学过的东西&#xff0c;看了二分&#xff0c;树状数组&#xff0c;树状数组二分&#xff0c;复习了利用倍增相关的算法。 周六去打的蓝桥杯&#xff0c;总体来说也就一般吧&#xff0c;出了考场突然想起来我b题中间的称号写成了加…...

Hazel游戏引擎(008-009)事件系统

文中若有代码、术语等错误&#xff0c;欢迎指正 文章目录 008、事件系统-设计009、事件系统-自定义事件前言自定义事件类与使用声明与定义类代码包含头文件使用事件 事件调度器代码 C知识&#xff1a;FunctionBind用法function基本使用 012、事件系统-DemoLayer用EventDispache…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...