shell脚本中一切变量皆字符串,所以必须掌握字符串的常用处理方法。比如获取字符串长度、获取字符串指定位置字符、替换字符串中的指定字符或者删除某些字符等操作。

1、字符串操作列表

(1)var=value,变量定义

$ var="Shell"

(2)${var},变量取值

$ var="Shell"
$ echo ${var}
Shell

(3)$#var},获取变量长度

$ var="Shell"
$ echo ${#var}

(4)${var:pos} ,获取变量var从指定pos位置开始到结束的字符串

$ var="Hello World"
$ echo ${var:}
World

(5)${var:pos:length},获取变量var从指定pos位置开始提取长度为length的字符串

$ var="Hello World"
$ echo ${var::}
Hello

(6)${var#substring},表示从变量var的起始位置删除最短匹配$substring的字符串

$ var="/home/oracle/script.sh"
$ echo ${var#*/}
home/oracle/script.sh

(7)${var##substring},表示从变量var的起始位置 删除最长匹配$substring的字符串

$ var="/home/oracle/script.sh"
$ echo ${var##*/}
script.sh

(8)${var%substring},表示从变量var的结束位置开始删除最短匹配$substring的字符串

$ var="/home/oracle/script.sh"
$ echo ${var%/*}
/home/oracle

(9)${var%%substring},表示从变量var的结束位置开始删除最长匹配$substring的字符串

$ var="root/home/oracle/script.sh"
$ echo ${var%%/*}
root

(10)${var/substring/replace_str},表示使用$replace_str来代替从变量var开始位置第一个匹配到的$substring

$ var="/oracle/oracle/script.sh"
$ echo ${var/oracle/opt}
/opt/oracle/script.sh

(11)${var//substring/replacement},表示使用$replacement代替所有匹配的$substring

$ var="/oracle/oracle/script.sh"
$ echo ${var//oracle/opt}
/opt/opt/script.sh

(12)${var/#substring/replace_str},表示如果变量var的前缀匹配$substring, 那么就用$replace_str来代替匹配到的$substring。必须是第一个字符开始就满足匹配条件。

$ var="oracle/oracle/script.sh"
$ echo ${var/#oracle/opt}
opt/oracle/script.sh

(13)${var/%substring/replace_str} ,表示如果$string的后缀匹配$substring, 那么就用$replace_str来代替匹配到的$substring。必须是结尾部分满足匹配条件。

$ var="/oracle/oracle/script.sh"
$ echo ${var/%sh/txt}
/oracle/oracle/script.txt

说明:(1)substring可以是正则表达式;(2)${string#substring}与${string%substring}是从开始还是结尾开始匹配总是容易混淆,可以这么理解,注释符#总是在前面,#号是从前面开始匹配的。

典型操作实例

(1)判断输入字符串是否全部为数字

#!/bin/bash

VAR1="AaBb1234"
VAR2=""
VAR3="123 456"
[[ -z "${VAR1//[0-9]/}" ]] && printf "VAR1 all number\n" || printf "VAR1 not all number\n" # VAR1 not all number
[[ -z "${VAR2//[0-9]/}" ]] && printf "VAR2 all number\n" || printf "VAR2 not all number\n" # VAR2 all number
[[ -z "${VAR3//[0-9]/}" ]] && printf "VAR3 all number\n" || printf "VAR3 not all number\n" # VAR3 not all number

2、字符串判断和替换

字符串的判断和替换表达式有很多,但是记住var=${str:-expr}这个最常用的表达式就够了。var=${str:-expr}表达式含义为假设str变量为设置或者为空,则将expr值赋值给var变量。实例如下

$ var=${str:-"hello"} #str变量为设置
$ echo $var
hello
$ str="" #str变量值为空
$ var=${str:-"hello"}
$ echo $var
hello
$ str="hi" #str变量值为hi
$ var=${str:-"hello"}
$ echo $var
hi

实例

(1)如果变量没有设置值,指定默认值No

#!/bin/bash

read -p "Please check the parameters and input Yes or No continue.[Deafult:Yes]:" YN

YN=${YN:-"No"}

[[ "X${YN}" == "XNo" ]] && printf "No\n" || printf "Yes\n" #No

(2)判断字符串的长度,如果不为指定长度,提示错误信息

#!/bin/bash

telphone_num=""
[[ ${#telphone_num} != ]] && printf "Bad number\n" || printf "Good number\n" #output-> Good number

(3)删除字符串中的大写字符

$ VAR="ABC123"
$ VAR=$(sed 's/^[A-Z]*//g' <<<${VAR})
$ echo $VAR

shell字符串基本操作的更多相关文章

  1. JAVASE02-Unit01: API文档 、 字符串基本操作

    API文档 . 字符串基本操作 文档注释 package day01; /** * 文档注释只能定义在三个地方: * 类,方法,常量 * * 文档注释是功能注释,用来说明功能作用 * 在类上使用的目的 ...

  2. linux shell 字符串操作(长度,查找,替换)详解

    linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...

  3. Shell 字符串比较

    转自网络 Shell字符串比较 收藏 Shell 中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等. 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. --- ...

  4. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  5. Shell 脚本基本操作练习

    这里主要是熟悉了shell的基本操作,包括变量赋值引用修改.函数的使用.信号的获取及一些判断方法等,具体详见代码: #!/bin/sh str="Hello World !" ec ...

  6. 【转】shell字符串截取

    shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...

  7. 关于python字符串基本操作

    python字符串基本操作,比如字符串的替换.删除.截取.复制.连接.分割等.都是一些关于字符串的一些方法.下面来列举一些,相信对学习python还是有些帮助的. 1.去除空格--strp(): &g ...

  8. shell字符串的用法

    shell字符串的用法 注意:shell4.2和shell4.1会有差别,较低版本的shell可能不支持某些功能 获取字符串长度:${#string} 获取子串: 注:(左边的第一个字符是用 0 表示 ...

  9. Linux脚本shell字符串处理

    Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...

随机推荐

  1. angular4+中的数据绑定

    1,基本的属性绑定,下面的两种形式是一样的 2.dom属性和html属性 3.两者关系的进一步总结 4.dom属性绑定 5.html属性绑定

  2. Iptabels防火墙和SElinux

    两者的区别: iptables用于设置防火墙(firewall), 即管理内外通信. iptables是Linux下功能强大的应用层防火墙工具iptables 能做到“控制内部机器上网与不上网,访问哪 ...

  3. UE4中多种颜色轮廓线的后期处理

    转自:http://blog.csdn.net/pizi0475/article/details/50396277 随着近来虚幻引擎4的一些变化,渲染多种颜色的轮廓线已经可以实现了!通过自定义模板,类 ...

  4. Linux常用指令之一

    1.基础命令 ls --查看当前目录下的文件     cd --切换目录或者直接回到home目录     cd - --切换最近使用的两次目录     cd .. --切换到上一级目录     pwd ...

  5. nodejs使用案例-mysql操作

    1.package.json: { "scripts": { "start": "node app.js" }, "devDepe ...

  6. 由web项目中上传图片所引出的路径问题

    我在做javaweb项目的时候,有个项目中需要进行图片的上传,有次我重新部署项目后,发现之前上传的图片不见了,最后找出原因:图片上传在服务器目录上,而不是绝对路径,所以特别想弄清楚javaweb项目中 ...

  7. python+selenium+PhantomJS批量投递智联简历(不要用自己的账号进行测试,请使用小号,很烦人的,哈哈哈)

    1.环境python2.7+selenium+PhantomJS(软件安装和库的安装网上都有教程我们跳过,so easy) 2.原理 绕过首页登录需要验证码,直接进入搜索栏,输入搜索的职位+地区搜索出 ...

  8. Android Notification通知栏的使用,通知栏在Android8.0系统不显示的问题;

    1.正常使用通知栏: /** * 创建通知栏管理工具 */ NotificationManager notificationManager = (NotificationManager) getSys ...

  9. python 打印调用栈

    import traceback def BBQ(): traceback.print_stack() 引入 traceback 包,在某个函数中执行 traceback.print_stack().

  10. 十年阿里java架构师的六大设计原则和项目经验

      先看一幅图吧: 这幅图清晰地表达了六大设计原则,但仅限于它们叫什么名字而已,它们具体是什么意思呢?下面我将从原文.译文.理解.应用,这四个方面分别进行阐述. 1.单一职责原则(Single Res ...