Shell脚本基础

2023-11-07

1、$[变量#匹配规则]       (懒惰模式最短匹配)             #从头开始匹配,最短删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var2=${var1#*ve}
[root@liudongyi ~]# echo $var2
you,but you love he

2、$[变量##匹配规则]        (贪婪模式最长匹配)          #从头开始匹配,最长删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var3=${var1##*ve}
[root@liudongyi ~]# echo $var3

3、$[变量%匹配规则]          *代表任意多个字符           #从尾开始匹配,最短删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var4=${var1%ov*}
[root@liudongyi ~]# echo $var4
l love you,but you l

4、$[变量%%匹配规则]                  #从尾开始匹配,最长删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var5=${var1%%ov*}
[root@liudongyi ~]# echo $var5
l l

5、$[变量/旧字符串/新字符串]            #替换变量内的旧字符串为新字符串,只替换

如果我要把var1中的love替换成like

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var6=${var1/love/like}
[root@liudongyi ~]# echo $var6
l like you,but you love he
[root@liudongyi ~]# 

我们发现只替换了第一个匹配到的love,后面你的love没有被替换

6、$[变量//旧字符串/新字符串]           #替换变量内的旧字符串为新字符串,替换全部

我们把var1中的字符全部替换成like

[root@liudongyi ~]# var7=${var1//love/like}
[root@liudongyi ~]# echo $var7
l like you,but you like he
[root@liudongyi ~]# 

  

计算机字符串的长度

方法1:${#string}

[root@liudongyi ~]# var1="Hello World"
[root@liudongyi ~]# len=${#var1}
[root@liudongyi ~]# echo $len

方法:2:expr length $string

[root@liudongyi ~]# len1=`expr length "$var1"`
[root@liudongyi ~]# echo $len1

获取字符索引位置

方法:expr index "$string" substr

查找start在字符串中的位置(其实寻找字符start中任意一个字符在完整字符串中的位置,那个最快匹配返回那个值)

[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" start`
[root@liudongyi ~]# echo $inde

比如uniq中的字符q是var1中的第一个字符,所以返回值为1

[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" uniq`
[root@liudongyi ~]# echo $inde
1

在var1中的cnk中的字符c字符最先匹配,所以返回值为4

[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" cnk`
[root@liudongyi ~]# echo $inde

抽取字符串中的子串

方法1:

1)${string:position}指定开始提取的位置

意味着var的字符串,我是从第10个字符开始提取后面的字符

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr=${var1:10}
[root@liudongyi ~]# echo $substr

2)  ${string:position:length}

从var1指定位置10开始匹配5个字符,包括空格符

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1:10:5}
[root@liudongyi ~]# echo $substr1

3)  ${string: -position}  或者 ${string :(position)}

截取后三个字符的字符串:

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1: -3}
[root@liudongyi ~]# echo $substr1

截取var1字符串从第七个字符开始的字符子串

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1: (7)}
[root@liudongyi ~]# echo $substr1

方法2

expr substr $string $position $length

从var1中的字符串第五个位置截取10个长度的子串

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr=`expr substr "$var1" 5 10`
[root@liudongyi ~]# 
[root@liudongyi ~]# echo $substr
a hadoop y

注意:使用expr,索引计数是从1开始计算:使用${string:position},索引计数从0开始

编写一个小脚本:

用户输入1|2|3|4,可以执行对应项的功能:输入Q|q则退出

(1)、打印string长度

(2)、删除字符串中所有的Hadoop

(3)、替换第一个Hadoop为Mapreduce

(4)、替换全部Hadoop为Mapreduce

#!/bin/bash
#
string="Bigdata process framework is Hadoop,Hadoop is an open source project"

function print_tips
{       
        echo "*************************"
        echo "(1)打印string长度"
        echo "(2)删除字符串中所有的Hadoop"
        echo "(3)替换第一个Hadoop为Mapreduce"
        echo "(4)替换全部Hadoop为Mapreduce"

}

function len_of_string
{       
        echo "${#string}"

}
function del_hadoop
{
        echo "${string//Hadoop/}"
}
function rep_hadoop_mapreduce_first
{
        echo "${string/Hadoop/Mapreduce}"
}
function rep_hadoop_mapreduce_all
{
        echo "${string//Hadoop/Mapreduce}"
}

while true
do
        echo "  [string=$string]     " 
        echo
        print_tips
        read -p "please input your choice(1|2|3|4|q|Q):" choice

        case $choice in
                1)      len_of_string
                        ;;
                2)      del_hadoop
                        ;;
                3)      rep_hadoop_mapreduce_first
                        ;;
                4)      rep_hadoop_mapreduce_all
                        ;;
                q|Q)    exit
                        ;;
                *)      echo "Error,input only in{1|2|3|4|q|Q}"
                        ;;
        esac
done
                                

至此,如果对Shell有兴趣请看下一篇博客

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本基础 的相关文章

  • Ubuntu Linux Host 用adb shell:error: insufficient permissions for device: user in plugdev group; are

    热插拔usb设备的文件的访问权限 简单解决 cd etc udev rules d sudo vim 50 android rules 在文件中添加一行 SUBSYSTEM usb ENV DEVTYPE usb device MODE 0
  • 保持ssh会话不掉线

    客户端 sudo vim etc ssh config 之类的文件名 添加 ServerAliveInterval 20 ServerAliveCountMax 9999 服务器端 sudo vim etc ssh sshd config
  • 提升效率,主流自动化运维工具推荐

    提升效率 主流自动化运维工具推荐 自动化运维工具可以帮助运维团队提高效率 减少错误 并实现持续交付 下面将介绍几个主流的自动化运维工具 分析其应用场景 并提供各自的官网地址供深入了解 1 Ansible 官网地址 https www ans
  • Shell脚本基础

    1 变量 匹配规则 懒惰模式最短匹配 从头开始匹配 最短删除 root liudongyi var1 l love you but you love he root liudongyi var2 var1 ve root liudongyi
  • 2018老男孩脱产班linux运维51期

    2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 链接 https pan baidu com s 1bnIJF6IoBC
  • RabbitMQ两种集群模式配置管理

    一 RabbitMQ集群的两种模式 1 普通模式 默认的集群模式 2 镜像模式 把需要的队列做成镜像队列 存在于多个节点 属于RabbitMQ的HA方案 普通模式 默认的集群模式 RabbitMQ集群中节点包括内存节点 磁盘节点 内存节点就
  • shell脚本系列:3、shell命令

    shell脚本系列 3 shell命令 文章目录 shell脚本系列 3 shell命令 1 保留字 2 简单的命令 3 管道 4 命令列表 5 复合循环指令 5 1 循环结构 5 2 条件结构 5 3 分组命令 6 协程 7 GUN Pa
  • shell脚本不能激活环境变量问题完美解决

    今天在Linux系统写shell脚本时发现配置好java环境变量后 明明写了source etc profile 但还是不能激活 也就是java version没有反应 非要自己手动去激活 后来发现我是用 test sh 来启动的脚本 te
  • [原创]脚本小技巧:awk变量传递到shell变量

    简介 常用网名 猪头三 出生日期 1981 XX XX 个人网站 https www x86asm org QQ交流 643439947 编程生涯 2001年 至今 共20年 职业生涯 18年 开发语言 C C 80x86ASM PHP P
  • shell脚本编程之循环

    内容预知 1 循环的定义 2 for循环 2 1 for循环的基本用法 运用演示1 列表打印 运用演示二 分类打印 运用演示三 累加求和 2 2 for循环读取文件作为循环条件 运用演示 2 3 for循环的多线程运用 运用演示 2 4 f
  • Linux 查看或统计网卡流量的几种方式【全】

    在工作中 我们经常需要查看服务器的实时网卡流量 通常 我们会通过这几种方式查看Linux服务器的实时网卡流量 目录 1 sar 2 proc net dev 3 ifstat 4 iftop 5 nload 6 iptraf ng 7 ne
  • 使用git bash 在windows上 SSH 远程命令行登录Linux主机,git bash的字体适合开发

    推荐使用git bash 没想会推荐这个软件吧 git bash 很牛 比如可以对windows中的源码文件进行grep操作 查找关键字 还可以使用scp 在linux和windows之间拷贝 当然使用windows中的pscp也挺好 多个
  • Linux系统:centos7.2忘记密码怎么办?

    在使用centos系统的时候有时候太久没用忘记登录密码了 这时候该怎么办呢 下面就来教教大家怎么重置root管理员的密码 1 启动系统 在GRUB2引导画面 按E键 编辑引导项 2 删除linux16这一行最后的 rhgb和 quiet参数
  • Shell脚本之数字大小排列(小到大)

    脚本内容 bin bash read p 请输入一个数字 num1 read p 请输入一个数字 num2 read p 请输入一个数字 num3 tmp 0 如果 num1 大于 num2 就把 num1 和和 num2 的值对调 确保
  • shell脚本二:条件语句和多路分支语句

    1 条件语句 bin bash if ne 1 then echo usage 0 filename exit fi if e 1 then echo 1 not exist exit fi if d 1 then echo 1 is a
  • Shell脚本编写教程

    Shell脚本编写教程
  • CentOS 8 安装screen

    CentOS 8安装不上screen 以为是yum源的问题 搞了半天才发现 要在CentOS 8上安装screen 先要安装EPEL库才可以 root centoss8 yum repos d yum y install screen La
  • 服务器硬件知识普及篇(需要配置服务器的朋友可以参考)

    开篇一 服务器主板 服务器主板概述 对于服务器而言 稳定性才是首要 服务器必须承担长年累月高负荷的工作要求 而且不能像台式机一样随意的重起 为了提高起可靠性普遍的做法都是部件的冗余技术 而这一切的支持都落在主板的肩上 下面我就来看看有关服务
  • 微服务+Jenkins 简单的linux自动部署脚本

    No 1 启停脚本 bin bash 加载配置 避免获取不到java home source etc profile SERVICE HOME 项目路径 SERVICE NAME 服务名称 cd SERVICE HOME SERVICE N
  • deepIn 、 DDE 系统桌面黑屏解决方案

    桌面黑屏有两种情况 1 桌面除了底部菜单栏 其它全是黑的 解决方案 Deepin sudo apt install reinstall dde DDE sudo apt fix broken install sudo apt install

随机推荐

  • freeRTOS---空闲任务与阻塞延时(1)

    在上传这篇文章的时候 同时也上传了代码 欢迎下载 RTOS中的延时是在需要延时的时间内任务放弃CPU的使用权 超过延时时间后重新获得CPU的使用权 叫做 阻塞延时 空闲任务是在启动调度器后创建的 是CPU空闲时候运行的 是优先级最低的 空闲
  • Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别

    本文试图从直观角度 说明SCHED RR调度策略和SCHED OTHER调度策略之间的区别 在Linux上 SCHED OTHER和SCHED NORMAL的意思相同 它们都是指的CFS调度策略 只不过 在内核中 CFS定义为SCHED N
  • java中的next()方法,nextline()方法,hasnext()方法的用法系列(1)。

    这是王秀秀的第23篇博客 看下方目录 next 方法 nextline 方法 hasnext 方法 最近本菜鸡做题呀 遇到了一些很好玩的事情 那就是scanner类中的一些方法 经过了解后 真挺好玩的 next 方法 话不多说上代码 imp
  • Java中的strip(), split() 分割字符串

    jdk11引进了strip 用来去除字符串的前导和后缀空格 eg str hello world str str strip str hello world split 加上正则化用来分割字符串 1 正则表达式 s 表示匹配任何空白字符 表
  • javaSE从入门到精通的二十万字总结(二)

    目录 前言 5 集合 5 1 集合两大类 5 2 Collection 5 2 1 常用方法 5 2 2 迭代器 5 2 3 contains方法 5 2 4 remove方法 5 3 List 5 3 1 ArrayList 5 3 2
  • nnpack详解

    NNPACK详解 一 NNPACK简介 NNPACK由facebook开发 是一个加速神经网络计算的加速包 NNPACK可以在多核CPU平台上提高卷积层计算性能 NNPACK采用的快速卷积算法是基于Fourier transform 和 W
  • win10+vs2015+cuda10.0+cudnn7.6+anaconda3(python3.7)+tensorflow_gpu1.13.1+pycharm(我的电脑配置:i79700k+1070

    win10 vs2015 cuda10 0 cudnn7 6 anaconda3 python3 7 tensorflow gpu1 13 1 pycharm 我的电脑配置 i79700k 1070Ti 提醒 安装之前先查看自己显卡对应的版
  • FTP暴力破解登陆漏洞复现(Windows Server 2003)

    FTP暴力破解漏洞复现 0x01 漏洞简述 FTP弱口令 一般指使用FTP的用户的密码长度太短 复杂度不够 仅包含数字 或仅包含字母等 容易被黑客攻击 发生恶意文件上传或更严重的入侵行为 知道FTP弱口令 可以通过该漏洞获取主机文件系统信息
  • 规则引擎相关开源项目总结

    表达式引擎 Java Groovy https groovy lang org JEXL https commons apache org proper commons jexl mvel https github com mvel mve
  • 【华为OD机试】停车场车辆统计【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 特定大小的停车场 数组cars 表示 其中1表示有车 0表示没车 车辆大小不一 小车占一个车位 长度1 货车占两个车位 长度2 卡车占三个车位 长度3 统计停车场最少
  • Windows下安装CUDA并配置cuDNN教程

    Windows下安装CUDA并配置cuDNN教程 一 查看电脑的显卡驱动版本 1 键盘点击Windows R或者在搜索栏输入cmd 进入命令提示符 2 在命令提示符下 输入nvidia smi 查看显卡驱动版本 本电脑显卡驱动版本为 456
  • React中引入百度地图API 避坑

    BMap is not defined 原因 React脚手架中全局变量都要用window去访问 解决 BMap改成window BMap访问 或者将BMap从window中解构出来 BMap前加了window 页面还是一片空白 原因 没有
  • QT中文输入法状态下获取键盘输入事件

    QT在中文输入法下 获取键盘的输入消息时 始终获取不到 但是在英文输入状态下是可以获取的 具体看代码 bool mytest eventFilter QObject obj QEvent ev if QEvent KeyPress ev g
  • 诚之和:自嗨锅能颠覆海底捞吗?

    为了避免独自外出就食的尴尬 实现独乐乐的满足感 催生了 一人食经济 2015年 自热火锅横空出世 一经面世就迅速在自热方便类食品中占据一席之地 特别受到年轻人的青睐 九成以上的消费者年龄在40岁以下 自热火锅以其新潮 便利等优势备受消费者欢
  • python实现螺旋矩阵

    import numpy 使用递归解决 def helixMatrix matrix x cur y cur number n if n 0 print matrix return 0 if n 1 matrix x cur y cur n
  • Python 程序设计-系统登录页面设计

    Python 程序设计 系统登录页面设计 目录 Python 程序设计 系统登录页面设计 1 需求分析 2 总体设计 3 详细设计 4 程序运行结果测试与分析 5 完整源代码 1 需求分析 系统要有管理员登录 普通用户登录和退出三个选项可供
  • Modbus协议简易入门教程

    背景 介绍modbus rtu之前 我们可以了解到 Modbus是施耐德电气公司 于1979年发明的 是全球第一个真正用于工业现场的总线协议 四十多年过去了 现在仍然被广泛使用在各个工业控制领域 除了这个协议很稳定的原因之外 1 免费 2
  • 【机会约束、鲁棒优化】机会约束和鲁棒优化研究优化【ccDCOPF】研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 随机规划的三个分支分别为期望值模型 机会约
  • 用一个变量控制线程里面的资源问题,线程可见性问题

    线程资源不可见原因 1 CPU高速缓存造成极短时间内数据的不可见 2 指令重排导致不可见 不可见测试 由上图可知 当我们改变eatFlag为true时 并没有输出我们预想的数据 例如 线程中资源正在运行 解决办法 1 线程休眠 sleep
  • Shell脚本基础

    1 变量 匹配规则 懒惰模式最短匹配 从头开始匹配 最短删除 root liudongyi var1 l love you but you love he root liudongyi var2 var1 ve root liudongyi