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 20.04 不休眠

    将系统配置文件 etc systemd logind conf 的其中一行 改成如下所示 sudo vim etc systemd logind conf HandleLidSwitch ignore 重启服务 sudo service s
  • Chrony时间同步服务器

    文章目录 一 时间同步基本概念 1 什么是时间同步 2 为什么需要时间同步 3 时间同步是如何完成 二 Chrony时间服务 1 Chrony介绍 2 为何需要Chrony 3 Chrony安装 4 Chrony服务端 5 Chrony客户
  • 提升效率,主流自动化运维工具推荐

    提升效率 主流自动化运维工具推荐 自动化运维工具可以帮助运维团队提高效率 减少错误 并实现持续交付 下面将介绍几个主流的自动化运维工具 分析其应用场景 并提供各自的官网地址供深入了解 1 Ansible 官网地址 https www ans
  • kubesphere jenkins 构建java项目报错Could not parse metadata

    kubesphere jenkins 构建java项目报错Could not parse metadata 问题描述 ERROR Failed to execute goal org apache maven plugins maven i
  • NFS 高可用方案(NFS+keepalived+Sersync)

    NFS 高可用方案 NFS keepalived Sersync 1 简述 1 1 介绍 本方案 NFS 的高可用方案 应用服务器为 Client 两台文件服务器分别Master和 Slave 使用 keepalived 生成一个虚拟 IP
  • 2018老男孩脱产班linux运维51期

    2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 链接 https pan baidu com s 1bnIJF6IoBC
  • shell脚本之awk命令——分隔符介绍

    文章目录 awk入门 awk F awk命令之 分割符 awk命令之 分割符 awk入门 关于awk命令的基础用法 请参考Linux awk命令 awk F awk F F相当于内置变量FS 指定分割字符 fs是一个字符串或者是一个正则表达
  • 批量文本文件内容替换之Linux sed命令

    文章目录 sed命令简介 需求 sed实现批量替换 sed命令简介 Linux sed命令可以使用shell脚本进行文件的批量处理 如批量替换 修改等等 尤其是在需要对大量文本文件进行批量操作时 使用sed命令会起到事半功倍的效果 关于详细
  • 使用Linux脚本更新Weblogic部署的应用程序

    在利用Jenkins实现Weblogic应用自动部署的功能时 如何通过Shell 脚本自动更新Weblogic部署的应用程序呢 可以使用weblogic jar包中的weblogic Deployer这个class 命令如下 java we
  • 查看Linux下网卡状态

    ip link 命令 或者 通过mii tool指令 root localhost root mii tool eth0 negotiated 100baseTx FD link ok eth1 no link 或 root localho
  • Linux开机&关机

    走进Linux系统 开机登录 开机会启动许多程序 它们在Windows叫做 服务 service 在Linux就叫做 守护进程 daemon 开机成功后 它会显示一个文本登录界面 这个界面就是我们经常看到的登录界面 在这个登录界面会提示用户
  • 宝塔面板linux在终端使用命令开启服务保持服务不关闭

    我们经常在宝塔面板终端开启服务 比如socket等服务时 如果关闭面板标签页或者关闭终端 服务也随之关闭了 要保持服务一直运行 就需要把终端进程放在linux后台执行 方法如下 1 先Ctrl z 将命令保持挂载 并且能够继续在终端输入其他
  • 操作系统终端输入大小限制

    问题描述 使用c 写算法题时 测试用例是一个长字符串 上万字符 但运行结果显示字符串读入的长度远远小于输入长度 并且不同操作系统下面显示出了不同的bug macos 输入字符串长度只有1000 超过这个长度成都就会卡在cin那行代码 ubu
  • 第三周作业

    1 图文并茂说明raid0 raid1 raid10 raid01 raid5等原理 RAID 0 以chunk为单位并行读写数据 速度非常快 但是没有冗余容错能力 如果一块硬盘损坏的话 会导致所有数据的丢失 最少磁盘数 1 RAID 1
  • Linux-3种方法快速找出监听特定端口的进程

    Pre 端口是代表通信端点的逻辑实体 并与操作系统中的给定进程或服务相关联 在之前的文章中 我们解释了如何找出 Linux 中所有开放端口的列表 以及如何使用 Netcat 命令检查远程端口是否可达 在这个简短的指南中 我们将展示在 Lin
  • Linux系统:centos7.2忘记密码怎么办?

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

    Shell脚本编写教程 二 Shell 数组 目录 https blog csdn net shn111 article details 131590488 参考教程 https www runoob com linux linux she
  • Linux笔记之安装配置nginx的两种方式——yum安装和源码安装

    安装配置nginx的两种方式 yum安装和源码安装 访问nginx的官方网站 http www nginx org Nginx版本类型 Mainline version 主线版 即开发版 Stable version 最新稳定版 生产环境上
  • 面试专题:Linux运维精华面试题

    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华 助力大家跳槽找个高薪好工作 1 什么是运维 什么是游戏运维 1 运维是指大型组织已经建立好的网络软硬件的维护 就是要保证业务的上线与运作的正常 在他运转的过程中 对他进
  • linux基本命令大全

    基本命令 关机 shutdown h halt init 0 poweroff 重启 shutdown r reboot init 6 pwd 查看工作目录 ls 查看指定目录的内容 l 列表显示 a 显示所有 包括隐藏文件 h 人性化的显

随机推荐

  • 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