变量子串

  • 格式:${变量}
  • 主要的作用:变量子串的效率要比相应的命令执行的效率高
  • man bash 参考 parameter
内容 parameter 变量 含义
${para} 返回变量的内容
${#para} 返回变量para的长度
按照范围cut截取
${para:offset} 在para中。从位置offset之后开始截取字符串
删除
${para#word} 从para开头删除最短匹配word的子串
${para##word} 从para开头,删除最长匹配word的子串
${para%word} 从para结尾,删除最短匹配word的子串
${para%%word} 从para结尾,删除最长匹配word的子串
替换
${para/pattern/string} 使用string替换第一个匹配pattern的子串
${para//pattern/string 使用syringe替换所有匹配pattern的子串

${para}

返回变量的内容

wxl@ubuntu:~/workspace/shellScripts$ semd=111.111
wxl@ubuntu:~/workspace/shellScripts$ echo ${semd}
111.111

${#para}

返回变量内容的长度

wxl@ubuntu:~/workspace/shellScripts$ echo ${#semd}
7wxl@ubuntu:~/workspace/shellScripts$ echo ${semd}|awk '{print length()}'
7wxl@ubuntu:~/workspace/shellScripts$ echo ${semd}|wc -L
7# 测试命令的效率
wxl@ubuntu:~/workspace/shellScripts$ time for n in {1..10000}; do echo ${n}|wc -L >/dev/null ;donereal    0m9.732s
user    0m7.202s
sys     0m3.259s
wxl@ubuntu:~/workspace/shellScripts$ time for n in {1..100000}; do echo ${#n} >/dev/null ;donereal    0m0.343s
user    0m0.309s
sys     0m0.031s

面试题:I am semdaaa linux, welcome to our country. 显示字符串大于6的单词

#/bin/bash#tips:
# 去除语句中的,. echo sentence|tr '想要替换的字符' '用什么字符代替替换的字符'
# -gt --> greater than 表示大于 -ge --> greater equal 表示大于等于
# 需要将命令的执行结果放到变量中的话,需要将命令用``框起来
text=`echo I am semdaaa linux, welcome to our country.|tr ',.' ' '`
echo ${text}for word in ${text}
doif [ ${#word} -gt 6 ];thenecho "${word} is greater than 6 ---"fi
done# awk方法
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo I am semdaaa linux, welcome to our country|awk -F'[ ,.]' '{for(i=1;i < NF;i++) if(length($i)>6) print $i}'|||  # awk方法
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo I am semdaaa linux, welcome to our country|awk -F'[ ,.]' '{
for(i=1;i < NF;i++)if(length($i)>6)print $i
}'#方法2  RS=后面的参数表示遇到就结束这一行,所以可以将这些字符串分割
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo I am semdaaa linux, welcome to our country|awk -vRS="[ ,.]" 'length()>6'
semdaaa
welcome
country

${para:offset}

在para中,提取offset之后的字符串

wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ semd=111..111
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${semd:1}
11..111
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${semd:4}
.111# 表示取第4个字符开始的3个字符串
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${semd:4:3}
.11
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${semd:4:2}
.1# 同样的cut命令也可以达到这样的效果
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo $semd |cut -c 1-3
111# 两者的效率对比
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ time for n in {1..10000}; do echo ${semd:1:3} >/dev/null ;donereal    0m0.038s
user    0m0.028s
sys     0m0.010s
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ time for n in {1..10000}; do echo $semd |cut -c 1-3 >/dev/null ;donereal    0m6.871s
user    0m5.489s
sys     0m2.132s
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$

${para#word}

删除字符串

# 删除字符串:${字符串#i} 从左边开始删除,只删除第一个匹配的字符
# ${字符串##*i} 从左边开始删除,删除所有匹配i之前的内容
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ text='i am a nio engineer'
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text#i}
am a nio engineer
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text#* }
am a nio engineer
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text##* }
engineer# ${变量%内容} 删除从右边开始的内容
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ text1='i am a good man'
传输n开始的字符串
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text1%n}
i am a good ma
# 删除从所有匹配的m开始往后的所有的字符串
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text1%%m*}
i a# 用于取出路径的文件名和目录
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ name=/etc/systemd/system.conf
# 取出文件名
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${name##*/}
system.conf
# 取出文件路径
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${name%/*}
/etc/systemd

${para/pattern/string}

替换子串

wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ text='i am an engineer'
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text/a/b} # 只替换了第一个匹配的子串
i bm an engineer
wxl@ubuntu:~/workspace/shellScripts/Day3-parameter$ echo ${text//a/b} # 替换所有匹配的子串
i bm bn engineer

变量扩展

${para:-word}

当para没有赋值或者值为空的时候,para就等于默认值word

wxl@ubuntu:~$
wxl@ubuntu:~$ echo ${para:-/tmp}
/tmp
wxl@ubuntu:~$ para=/back
wxl@ubuntu:~$ echo ${para}
/back

${para:=word}

当para没有赋值或者值为空的时候,para就等于默认值word,并且修改变量的值

# para还是为空
wxl@ubuntu:~$ echo ${para:-/tmp/}
/tmp/
wxl@ubuntu:~$ echo ${para}wxl@ubuntu:~$ # para的值变为/tmp
wxl@ubuntu:~$ unset para
wxl@ubuntu:~$ echo ${para:=/tmp}
/tmp
wxl@ubuntu:~$ echo ${para}
/tmp

${para:?word}

表示如果para是空或者没有,就会把word作为错误输出;有值的话就会按照赋值输出

wxl@ubuntu:~$ echo ${para:?/tmp}
-bash: para: /tmp
wxl@ubuntu:~$ $?
1: command not found

${para:+word}

如果para是空或者没有赋值的话就什么都不做,如果赋值的话就会把赋的值覆盖为word

wxl@ubuntu:~$ para=/mnt
wxl@ubuntu:~$
wxl@ubuntu:~$
wxl@ubuntu:~$ echo ${para:+/tmp}
/tmp

补充:变量的赋值

直接复制 a=1
引用命令赋值:test=text=ping baidu.com
read赋值:
-p: 输入提示信息,参数放在最后
-s:不显示输入信息
-t:设置超时时间,超过时间就会结束命令

wxl@ubuntu:~$ read -p "ip:" addr
ip:10.0.0.1
wxl@ubuntu:~$ echo ${addr}
10.0.0.1#隐藏输入内容
wxl@ubuntu:~$ read -p -s "ip:" addr
ip:
wxl@ubuntu:~$ echo ${addr}
10.0.0.1#设置超时
wxl@ubuntu:~$ read -t 5 -s -p "ip:" addr
ip:10.0.0.1
wxl@ubuntu:~$ echo ${addr}
10.0.0.1

小结

目前学习了一些变量
表示位置的变量:$0 $n $# $* $@

表示状态:$? $$ $_ $!

变量子串:${arg} ${#arg}

删除:${arg#word} ${arg%word}

替换:${arg/ / } ${arg// / }

# 参考目前linux的脚本中使用到的一些语句
wxl@ubuntu:~$ ll /etc/init.d/

Shell脚本笔记(3)- 变量子串相关推荐

  1. shell脚本中的变量

    shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...

  2. 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量

    2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言  aming_linux  blog.lishiming.net ...

  3. Linux:shell脚本中实现变量自增的几种方式

    #!/bin/sh #本脚本测试shell脚本中整型变量自增 加1的几种方法   #定义整型变量 a=1 echo $a   #第一种整型变量自增方式 a=$(($a+1)) echo $a   #第 ...

  4. shell脚本由基础变量及特殊变量($@、$*、$#等)到实战。

    shell脚本由基础变量及特殊变量($@.$*.$#等)到实战. 一.shell脚本建立: shell脚本通常是在编辑器(如vi/vim)中编写,也可以在命令行中直接执行: 1.脚本开头:     规 ...

  5. 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量...

    2019独角兽企业重金招聘Python工程师标准>>> 20.1 shell脚本介绍 shell 是一种脚本语言:和传统的开发语言比较,会比较简单 shell有自己的语法:可以使用逻 ...

  6. 利用shell脚本添加环境变量

    在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误 error while loading shared lib ...

  7. shell脚本 定义一个变量 if else判断变量是否等于某个值

    好的,那么 shell 脚本中定义一个变量的方法是: 变量名=变量值 例如: myvar=hello 定义了一个名为 "myvar" 的变量,值为 "hello" ...

  8. 详解shell脚本中的变量

    目录 一.变量的定义及存在的意义 二.shell脚本中变量的定义方法 1.环境级别 2.用户级别 3.系统级别 三.变量名称 四.变量的转译 1.转译 2.声明 3.变量的数组 五. Linux中命令 ...

  9. shell脚本基础(环境变量、重定向、数学运算、退出脚本)

    一.使用环境变量 1.环境变量 所谓环境变量,就是用来存储有关shell会话和工作环境信息的特性,这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们.这也是存储持久数据 ...

最新文章

  1. Nutch2.4 存储方式配置
  2. mysql读写分离和分布式_MySQL主从复制与读写分离
  3. 服务器系统授权,授权方案说明
  4. mvc php 分页,MVC+jQuery.Ajax异步实现增删改查和分页_jquery
  5. C#操作Word书签模板
  6. 关于ACM竞赛的题型分析
  7. c# TcpClient 客户端断线重连类库
  8. 分形植物的c语言源代码,C语言源代码实例.rar
  9. 如何定位web前后台的BUG
  10. Unity 使用陀螺仪判断手机方向
  11. linux如何解压.z文件,linux文件解压缩命令(史上最全教程)
  12. 苹果手机点击输入框时页面自动放大
  13. 二分法求多项式单根 — c语言
  14. 2020-12-3 QQ通讯录(不完整内容)
  15. 泊松分布 指数分布 及其数字特征
  16. 编译原理-16-语法分析概述
  17. itoa进制转换函数
  18. ubuntu 16.04搭建OpenGrok
  19. 直播预告丨Oracle数据库网络及存储技术详解-2022云和恩墨大讲堂
  20. UI设计课程介绍:UI设计都有哪些课程

热门文章

  1. db2 replace函数的用法_48R软件数据的基本处理之删除重复数据(duplicated()、unique()、distinct()函数)...
  2. mysql中comment(注释)的一些用法
  3. 面向交通预测的动态图卷积循环神经网络:基准和方法(重磅推荐)
  4. python日本 老龄化分析_中国离老龄化社会还有多远?数据图表源代码一览
  5. 以太坊闪电网络实现原理
  6. dso与Android,DSO 安装及运行 —— dso_ros + Android 手机摄像头
  7. MySQL Utilities
  8. 汽车标志国内品牌国际品牌列表
  9. SSD固态硬盘能否恢复--争议
  10. c/c++编程日记:纯C实现登录注册和忘记密码功能(附源码)