【Linux】【Shell】【Basic】字符串操作
1. 字符串切片: ${var:offset:number} 取字符串的子串; 取字符趾的最右侧的几个字符:${var: -length} 注意:冒号后必须有一个空白字符; 2. 基于模式取子串: ${var#*word}:其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符; ${var##*word}:其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符; mypath="/etc/init.d/functions" ${mypath##*/}: functions ${mypath#*/}: etc/init.d/functions ${var%word*}:其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符; ${var%%word*}:其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符; mypath="/etc/init.d/functions" ${mypath%/*}: /etc/init.d url=http://www.magedu.com:80 ${url##*:} ${url%%:*} 3. 查找替换: ${var/PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串; ${var//PATTERN/SUBSTI}:查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部替换为SUBSTI所表示的字符串; ${var/#PATTERN/SUBSTI}:查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串; ${var/%PATTERN/SUBSTI}:查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串; 注意:PATTERN中使用glob风格和通配符; 4. 查找删除: ${var/PATTERN}:以PATTERN为模式查找var字符串中第一次的匹配,并删除之; ${var//PATERN} ${var/#PATTERN} ${var/%PATTERN} 5. 字符大小写转换: ${var^^}:把var中的所有小写字符转换为大写; ${var,,}:把var中的所有大写字符转换为小写; 6. 变量赋值: ${var:-VALUE}:如果var变量为空,或未设置,那么返回VALUE;否则,则返回var变量的值; ${var:=VALUE}:如果var变量为空,或未设置,那么返回VALUE,并将VALUE赋值给var变量;否则,则返回var变量的值; ${var:+VALUE}:如果var变量不空,则返回VALUE; ${var:?ERROR_INFO}:如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值; 练习:写一个脚本,完成如下功能 (1) 提示用户输入一个可执行命令的名称; (2) 获取此命令所依赖到的所有库文件列表; (3) 复制命令至某目标目录(例如/mnt/sysroot,即把此目录当作根)下的对应的路径中 bash, /bin/bash ==> /mnt/sysroot/bin/bash useradd, /usr/sbin/useradd ==> /mnt/sysroot/usr/sbin/useradd (4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下; /lib64/ld-linux-x8664.so.2 ==> /mnt/sysroot/lib64/ld-linux-x8664.so.2 进一步: 每次复制完成一个命令后,不要退出,而是提示用户继续输入要复制的其它命令,并重复完成如上所描述的功能;直到用户输入“quit”退出脚本; 写一个脚本: ping命令去查看172.16.1.1-172.16.67.1范围内的所有主机是否在线;在线的显示为up, 不在线的显示down,分别统计在线主机,及不在线主机数; 分别使用for, while和until循环实现。 #!/bin/bash # declare -i uphosts=0 declare -i downhosts=0 for i in {1..17}; do if ping -W 1 -c 1 172.16.$i.1 &> /dev/null; then echo "172.16.$i.1 is up." let uphosts+=1 else echo "172.16.$i.1 is down." let downhosts+=1 fi done echo "Up hosts: $uphosts, Down hosts: $downhosts." #!/bin/bash # declare -i uphosts=0 declare -i downhosts=0 declare -i i=1 hostping() { if ping -W 1 -c 1 $1 &> /dev/null; then echo "$1 is up." return 0 else echo "$1 is down." return 1 fi } while [ $i -le 67 ]; do hostping 172.16.$i.1 [ $? -eq 0 ] && let uphosts++ || let downhosts++ let i++ done echo "Up hosts: $uphosts, Down hosts: $downhosts." 写一个脚本,实现: 能探测C类、B类或A类网络中的所有主机是否在线; #!/bin/bash # cping() { local i=1 while [ $i -le 5 ]; do if ping -W 1 -c 1 $1.$i &> /dev/null; then echo "$1.$i is up" else echo "$1.$i is down." fi let i++ done } bping() { local j=0 while [ $j -le 5 ]; do cping $1.$j let j++ done } aping() { local x=0 while [ $x -le 255 ]; do bping $1.$x let x++ done } 提示用户输入一个IP地址或网络地址;获取其网络,并扫描其网段;【Linux】【Shell】【Basic】字符串操作的更多相关文章
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- Linux Shell 截取字符串
Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...
- Linux shell去除字符串中所有空格
Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'
- shell脚本—— 字符串操作(长度,查找,替换)
表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有 ...
- shell中字符串操作【转】
转自:http://blog.chinaunix.net/uid-29091195-id-3974751.html 我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,当然shell编程也不例 ...
- Linux shell 获得字符串所在行数及位置
shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...
- Linux shell 判断字符串为空等常用命令
1.判断字符串为空 if [ -z "$str" ]; then echo "empty string" fi 2.判断文件是否存在 if [ -f /home ...
- linux shell basic command
Learning basic Linux commands Command Description $ ls This command is used to check the contents of ...
- linux shell中读写操作mysql数据库
本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...
- Linux shell 将字符串分割成数组
原文链接:http://1985wanggang.blog.163.com/blog/static/776383320121745626320/ a="one,two,three,four& ...
随机推荐
- macos command 'clang' failed with exit status 1
export CC=$(which gcc)export CXX=$(which g++)pip install fbprophet CC=clang pip install gevent
- sql常见题目
1 --student学生表(sno,sname,sex,birthday,tel) 2 --Course课程表(cno,cname) 3 --Sc 学生成绩表(sno,cno,score) 4 1. ...
- 带allow-create的el-select限制长度
需求:给el-select添加新增字段长度限制且新增内容不能为空 1.首先给el-select绑定一个id(例如:selectSku),这个id会传到组件里面,绑定在那个input上面, <el ...
- [cf1178G]The Awesomest Vertex
2020年论文题,这里给出了一个$o(n\log^{2}n+m\log^{3}n)$的做法,例题3即为原题 1.例题1 题面 给定$n$个一次函数$f_{i}(x)$,$m$次查询$F(x)=\max ...
- [nowcoder5671D]Data structure
问题相当于统计$且\sum_{l\le x<y\le r且lca(x,y)=x}1=c(sz[x],2)-\sum_{son}c(sz[son],2)$,考虑用莫队来维护区间,那么相当于要支持: ...
- Aggregated APIServer 构建云原生应用最佳实践
作者 张鹏,腾讯云容器产品工程师,拥有多年云原生项目开发落地经验.目前主要负责腾讯云 TKE 云原生 AI 产品的开发工作. 谢远东,腾讯高级工程师,Kubeflow Member.Fluid(CNC ...
- c语言if语句是如何变成汇编代码的?
1. 要编译的测试代码: int a; int b = 3; int main(void) { if (3) a = 4; else b = 5; } 2. 词法分析 词法分析将c源代码解析成一个个的 ...
- SpringMVC---Json的使用
1.所需文件 2.pom中加入json <?xml version="1.0" encoding="UTF-8"?> <web-app xml ...
- 谱文混排之lilypond-book
Lilypond有自带的谱文混排的工具lilypond-book,但是作为外行,一直很难搞清楚这个操作是怎样做的.很久之前请教过别人,但介于我的个人能力,只有粗浅理解,操作不得要领.在许多信息的拼凑之 ...
- 【Redis】(1)-- 关系型数据库与非关系型数据库
关系型数据库与非关系型数据库 2019-07-02 16:34:48 by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...