shell-7.shell 字符串的使用

1.查看字符串的长度
${#var} 可计算出变量值的长度:
[root@10-222 ~]# var='yuanji'
[root@10-222 ~]# echo ${#var}
6
    
2.再论单引号,双引号区别
1> 单引号
    变量名称,或者任何其他文本都会不经修改而原样传出来。
    单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

2>双引号    
    变量名称,或者任何其他文本都会不经修改而传出来
  (双引号里可以有变量名,  双引号里可以有转义字符)

3.对比 echo $变量名   和 echo "$变量名"
【实例】
[root@10-222 html]# mystr="a b    f        exit"
[root@10-222 html]# echo $mystr
a b f exit
[root@10-222 html]# echo "$mystr"
a b    f        exit

可以看到
 echo $变量名   和 echo "$变量名" 的不同

4.用常使用 "$变量名" 或  ${变量名},尽量不要使用 $变量名,在很多地方会报错或者出现意想不到的结果
【实例】
[root@10-222 home]# name="yuan ji"                        
[root@10-222 home]# if [ -z $name ];then echo "empty";fi
-bash: [: yuan: binary operator expected

-z:判断制定的变量是否存在值
改成这样正常
if [ -z "$name" ];then echo "empty";fi

当name="yuan ji"时,[ -z $name ]变成 [ -z yuan ji ],这时-z后有两个参数,而-z只需要一个参数。这时shell解释器会报错:[: too many arguments 等类似的错误。
所以当这类条件判断语句时,最好采用"$变量名"方法,这样无论变量的值是什么?在执行时会将值看成一个整体。

5.拼接字符
"要连接的字符串"${变量名}"要连接的字符串"
【实例】
[root@10-222 home]# name="yuanji"
[root@10-222 home]# address="ShenZhen"
[root@10-222 home]# info="Name is :"$name".Address is :"$address
[root@10-222 home]# echo $info
Name is :yuanji.Address is :ShenZhen

${变量名}${变量名}
【实例】
[root@10-222 home]# name="yuanji"                               
[root@10-222 home]# address="ShenZhen"                          
[root@10-222 home]# info=${name}${address}
[root@10-222 home]# echo $info
yuanjiShenZhen

6.字符串截取
方法一:
1>从左边第几个字符开始以及字符的个数,用法为:start:len
[root@10-222 log]# mystr="hello world"
[root@10-222 log]# echo ${mystr:1:4}
ello
其中的 1 表示左边第一个字符开始,4 表示字符的总个数。

2>从左边第几个字符开始一直到结束,用法为:start
[root@10-222 log]# mystr="hello world"
[root@10-222 log]# echo ${mystr:6}
world
其中的 6 表示左边第7个字符开始

3>从右边第几个字符开始以及字符的个数,用法:0-start:len
[root@10-222 log]# mystr="hello world"
[root@10-222 log]# echo ${mystr:0-5:3}
wor
其中的 0-5 表示右边算起第5个字符开始,3 表示字符的个数。

4>、从右边第几个字符开始一直到结束,用法:0-start
[root@10-222 log]# mystr="hello world"
[root@10-222 log]# echo ${mystr:0-5}                   
world

注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

方法二:
url="http://yuanji6699.blog.51cto.com/11568362/1771741"

1> # 号截取,删除左边字符,保留右边字符。
echo ${url#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :yuanji6699.blog.51cto.com/11568362/1771741

2>  ## 号截取,删除左边字符,保留右边字符。
echo ${url##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://yuanji6699.blog.51cto.com/11568362/        
结果是 1771741

3>  %号截取,删除右边字符,保留左边字符
echo ${url%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://yuanji6699.blog.51cto.com/11568362

4>  %% 号截取,删除右边字符,保留左边字符
echo ${url%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:

【实例】
[root@10-222 log]# file_path="d:/log/192.168.10.222/syslog.txt"
[root@10-222 log]# echo ${file_path##*/}                       
syslog.txt
[root@10-222 log]# echo ${file_path%/*}                        
d:/log/192.168.10.222

${file_path##*/},${file_path%/*} 分别是得到文件名,和目录地址的方法

${变量名#substring正则表达式}从字符串开头开始配备substring,删除匹配上的表达式。
${变量名%substring正则表达式}从字符串结尾开始配备substring,删除匹配上的表达式。

方法三:
用cut,sed,awk命令 【后续说明】
[root@10-222 log]# file_path="d:/log/192.168.10.222/syslog.txt"
[root@10-222 log]# echo ${file_path} | cut -d "/" -f 4
syslog.txt

[root@10-222 log]# echo ${file_path} | awk -F '/' '{print NF-=1}'
syslog.txt

7.字符串替换
${变量/查找/替换值} 一个“/”表示替换第一个,”//”表示替换所有,当查找中出现了:”/”请加转义符”\/”表示

[root@10-222 log]# file_path="d:/log/192.168.10.222/syslog.txt"   
[root@10-222 log]# echo ${file_path/\//\\}
d:\log/192.168.10.222/syslog.txt
[root@10-222 log]# echo ${file_path//\//\\}
d:\log\192.168.10.222\syslog.txt

也可用用awk,sed
[root@10-222 log]# echo $file_path | sed -e 's/\//\\/'
d:\log/192.168.10.222/syslog.txt
[root@10-222 log]# echo $file_path | sed -e 's/\//\\/g'
d:\log\192.168.10.222\syslog.txt

[root@10-222 log]# echo $file_path | awk '{sub("/","\\",$0);printf("%s\n",$0)}'
d:\log/192.168.10.222/syslog.txt
[root@10-222 log]# echo $file_path | awk '{gsub("/","\\",$0);printf("%s\n",$0)}'
d:\log\192.168.10.222\syslog.txt

[root@10-222 log]# echo $file_path | tr "/" "\\"
tr: warning: an unescaped backslash at end of string is not portable
d:\log\192.168.10.222\syslog.txt

8.查找子字符串
[root@10-222 log]# string="this is my shell script"   
[root@10-222 log]# echo `expr index "$string" is`  
3
[root@10-222 log]# echo `expr index "$string" h`
2
仅仅可以返回某个字符或者多个字符中第一个字符出现的位置【这个很不好用,不推荐用】

使用下面的方法
[root@10-222 log]# string="this is my shell script"
[root@10-222 log]# echo $string | awk '{printf("%d\n", match($0,"shell"));}'
12

以下几个部分在后续内容介绍
sed,awk,cut,等

以上是个人点点总结和理解,水平不高,文笔水平很烂,请各位大大见谅。
可以一起交流学习。

我的QQ:610851588
  可以加入我建的群(现在群人很少,希望慢慢多起来)
  Linux  群:183932302
  Python ,shell 交流群:469094734

转载于:https://blog.51cto.com/yuanji6699/1775013

​shell-7.shell 字符串的使用相关推荐

  1. shell中(字符串截取)

    cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要是接 ...

  2. 用shell将时间字符串与时间戳互转

    http://www.codelast.com/?p=775 在shell中,字符串转换为时间戳可以这样做: 1 date -d "2010-10-18 00:00:00" +%s ...

  3. Shell脚本中字符串的一些常用操作

    Shell脚本中字符串的一些常用操作 字符串长度 ${#string}可以获得${string}的长度 例子: string='How are you' echo ${#string} # 输出结果为 ...

  4. (转)Shell中获取字符串长度的七种方法

    Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...

  5. 《Python Cookbook 3rd》笔记(2.3):用Shell通配符匹配字符串

    用 Shell 通配符匹配字符串 问题 你想使用 Unix Shell 中常用的通配符 (比如 *.py , Dat[0-9]*.csv 等) 去匹配文本字符串 解法 fnmatch 模块提供了两个函 ...

  6. linux awk拼接字符串,shell awk命令字符串拼接

    摘要 腾兴网为您分享:shell awk命令字符串拼接,智联招聘,心视界,同花顺,手机管家等软件知识,以及一师一优课一课一名师登录,去视频水印,防沉迷解除,兼职猫招聘网,c4d渲染插件,社会实践活动登 ...

  7. Shell中判断字符串是否为数字的6种方法

    Shell中判断字符串是否为数字的6种方法 #!/bin/bash # 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]* ...

  8. (38)Shell脚本【字符串运算:相等判断】

    (38)Shell脚本[字符串运算:相等判断] 1 目录 1.1 Shell脚本简介 1.2 Shell脚本文件 1.3 Shell脚本作用 1.4 Shell运行环境 1.5 Shell脚本[字符串 ...

  9. 【linux】shell 编程之字符串与数组

    前言 对字符串的操作在众多的编程语言中可以说是最基础的了,字符串(String)就是一系列字符的组合.字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了). 一.sh ...

  10. shell 查某个字符串_操作系统_4:shell基础 - 一路向北321

    目录: 1.Shell是什么?1分钟理解Shell的概念! 2.Linux Shell脚本攻略 3.一篇文章让你彻底掌握 shell 语言 1.Shell是什么?1分钟理解Shell的概念! 现在我们 ...

最新文章

  1. Hyper-v Server重复数据删除技术
  2. php手册数组函数,PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集...
  3. 公共界面_小区公共区域广告收益究竟归谁?
  4. 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点
  5. “使命召唤”的新“吃鸡”模式味道如何?
  6. HTML 5入门学习,源码中全部使用HTML 5标签
  7. 如何在linux(ubuntu)的wine环境下开启source insight的tabsihost(或tabsiplus)
  8. vue新手入门——vue-cli搭建
  9. 计算机二级python选择题题库_2018年计算机二级python题库精编(1)
  10. 服务器收到消息加入数组,从聊天服务器发送到聊天客户端的数组更新
  11. mysql二进制格式_二进制格式安装 MySQL
  12. 常用的redis命令
  13. 2022年前端面试宝典【1万字带答案】
  14. 毕业生就业管理系统 C++
  15. c盘分小了如何扩大c盘,重新分区扩大c盘
  16. 感冒发烧没想象中可怕:人体自我保护清除体内感染
  17. android back键不退出程序,Android按back键不退出当前Activity
  18. java云闪付,第三方支付-银联云闪付开发教程
  19. 使用MobaXterm tunneling访问集群(服务器)jupyter notebook
  20. 十九、D触发器做二分频器解析:

热门文章

  1. android 快应用原理,快应用初探——写一个快应用练练手。
  2. linux内核报告,Linux升级内核报告.docx
  3. FPGA之道(18)FPGA设计的编译过程
  4. FPGA笔试题解析(二)
  5. Tiny4412 Android5.0 定制:编译生成img后如何删除原厂的apk
  6. crontab定时任务详解
  7. 异常详细信息: System.ArgumentException: 不支持关键字: “metadata”。
  8. Oracle 函数中动态执行语句
  9. (十二)Flask 学习 —— 换装
  10. Memcached 之 .NET(C#)实例分析