Shell脚本笔记(3)- 变量子串
变量子串
- 格式:${变量}
- 主要的作用:变量子串的效率要比相应的命令执行的效率高
- 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)- 变量子串相关推荐
- shell脚本中的变量
shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...
- 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量
2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net ...
- Linux:shell脚本中实现变量自增的几种方式
#!/bin/sh #本脚本测试shell脚本中整型变量自增 加1的几种方法 #定义整型变量 a=1 echo $a #第一种整型变量自增方式 a=$(($a+1)) echo $a #第 ...
- shell脚本由基础变量及特殊变量($@、$*、$#等)到实战。
shell脚本由基础变量及特殊变量($@.$*.$#等)到实战. 一.shell脚本建立: shell脚本通常是在编辑器(如vi/vim)中编写,也可以在命令行中直接执行: 1.脚本开头: 规 ...
- 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量...
2019独角兽企业重金招聘Python工程师标准>>> 20.1 shell脚本介绍 shell 是一种脚本语言:和传统的开发语言比较,会比较简单 shell有自己的语法:可以使用逻 ...
- 利用shell脚本添加环境变量
在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误 error while loading shared lib ...
- shell脚本 定义一个变量 if else判断变量是否等于某个值
好的,那么 shell 脚本中定义一个变量的方法是: 变量名=变量值 例如: myvar=hello 定义了一个名为 "myvar" 的变量,值为 "hello" ...
- 详解shell脚本中的变量
目录 一.变量的定义及存在的意义 二.shell脚本中变量的定义方法 1.环境级别 2.用户级别 3.系统级别 三.变量名称 四.变量的转译 1.转译 2.声明 3.变量的数组 五. Linux中命令 ...
- shell脚本基础(环境变量、重定向、数学运算、退出脚本)
一.使用环境变量 1.环境变量 所谓环境变量,就是用来存储有关shell会话和工作环境信息的特性,这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们.这也是存储持久数据 ...
最新文章
- Nutch2.4 存储方式配置
- mysql读写分离和分布式_MySQL主从复制与读写分离
- 服务器系统授权,授权方案说明
- mvc php 分页,MVC+jQuery.Ajax异步实现增删改查和分页_jquery
- C#操作Word书签模板
- 关于ACM竞赛的题型分析
- c# TcpClient 客户端断线重连类库
- 分形植物的c语言源代码,C语言源代码实例.rar
- 如何定位web前后台的BUG
- Unity 使用陀螺仪判断手机方向
- linux如何解压.z文件,linux文件解压缩命令(史上最全教程)
- 苹果手机点击输入框时页面自动放大
- 二分法求多项式单根 — c语言
- 2020-12-3 QQ通讯录(不完整内容)
- 泊松分布 指数分布 及其数字特征
- 编译原理-16-语法分析概述
- itoa进制转换函数
- ubuntu 16.04搭建OpenGrok
- 直播预告丨Oracle数据库网络及存储技术详解-2022云和恩墨大讲堂
- UI设计课程介绍:UI设计都有哪些课程
热门文章
- db2 replace函数的用法_48R软件数据的基本处理之删除重复数据(duplicated()、unique()、distinct()函数)...
- mysql中comment(注释)的一些用法
- 面向交通预测的动态图卷积循环神经网络:基准和方法(重磅推荐)
- python日本 老龄化分析_中国离老龄化社会还有多远?数据图表源代码一览
- 以太坊闪电网络实现原理
- dso与Android,DSO 安装及运行 —— dso_ros + Android 手机摄像头
- MySQL Utilities
- 汽车标志国内品牌国际品牌列表
- SSD固态硬盘能否恢复--争议
- c/c++编程日记:纯C实现登录注册和忘记密码功能(附源码)