简介

昨天在通过shell脚本实现一个功能的时候,由于对shell处理字符串的方法有些不熟悉导致花了不少时间也犯了很多错误,因此将昨日的一些错误记录下来,避免以后再犯。

字符串的定义与赋值

# 定义STR1变量,值为abc

STR1 = "abc"(错误写法)

STR1="abc"(正确写法)

在编写java代码时会考虑到格式化,往往变量定义时会有一些空格或者换行符等,因此在写shell脚本时也就顺手这么写了,在运行时就会报错:"command not found",将空格删除才正常运行。

源码如下:

#!/bin/bash

# file:testStr.sh
# author:13
# date:2017-07-21 STR1="abc"
echo $STR1
STR2 = "abc"
echo $STR2

对STR1定义是正确的,STR2则为错误方式,删除空格即可。

字符串连接

针对字符串的连接操作shell提供了相当简单的做法,直接将变量放到一起或用双引号即可。

#!/bin/bash

# file:testStr.sh
# author:13
# date:2017-07-21 STR1="abc"
STR2="abbcd abc ccc" #连接STR1和STR2变量并赋值给STR3
STR3=$STR1$STR2
echo $STR3 #连接STR1与"abc" 并赋值给STR4
STR4=$STR1"abc"
echo $STR4

if条件语句中的空格

# 比较两个字符串是否相等中if语句的写法

STR1="abc"
STR2="abcd" if[$STR1=$STR2](错误写法) if [ $STR1 = $STR2 ](正确写法)

if语句中如果不添加空格的话,"if["会被识别为一个未知的命令,在运行时就会报错:"command not found",添加正确的空格才能运行。

源码如下:

#!/bin/bash

# file:testStr.sh
# author:13
# date:2017-07-21 STR1="abc"
STR2="abcd" #if[$STR1=$STR2](错误写法)
if [ $STR1 = $STR2 ]
then
echo "相等"
else
echo "不相等"
fi

shell中判断字符串包含关系的方法

利用grep关键字查找

#!/bin/bash

# file:testStr.sh
# author:13
# date:2017-07-21 STR1="abc"
STR2="abbcd abc ccc" result=$(echo $STR2 | grep "${STR1}")
echo $result
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi

利用字符串运算符(更简洁、推荐使用)

#!/bin/bash

# file:testStr.sh
# author:13
# date:2017-07-21 STR1="abc"
STR2="abbcd abc ccc" if [[ $STR2 =~ $STR1 ]]
then
echo "包含"
else
echo "不包含"
fi

总结

在修复一个项目中的bug时所遇到的一些小问题,最终处理完成并且修复了bug差不多花了四五个小时的时间,也都一一记录了下来,提醒自己,同样的,也给其他碰到类似问题的朋友一些参考。

处理的问题是我在github上开源的一个项目,bug被人提出来总要解决掉的,GitHub地址点这里,开源中国地址点这里

shell脚本中字符串的常见操作及"command not found"报错处理(附源码)的更多相关文章

  1. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  2. Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】

    最近发现使用  -z   和  -n  来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ]    ...

  3. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  4. SHELL脚本中执行SQL语句操作MYSQL的5种方法

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  5. python中字符串的常见操作(一)

    如有字符串: str1 = '192.168.1.1' str2 = 'asdfghjk' str3 = 'Asd fg hj ki' str4 = ' ' str5 = '' 以下是常见操作:# i ...

  6. python中字符串的常见操作

    demo:mystr = 'hello python' 1.find:mystr.find(str, start=0, end=len(mystr)),检测字符串中是否有要查询的字符,如果有返回开始的 ...

  7. 01-python中字符串的常见操作

    (1)find 检测str是否包含在myStr中,如果存在则返回开始的索引值,否则返回-1. In [1]: myStr = "hello world tairan and tairanCi ...

  8. shell脚本中关于日期的操作

    一.计算指定日期的前一天的日期 date -d "yesterday 20150401 " +%Y%m%d 二.如果获取当前日期的前一天        date -d " ...

  9. 一张图片在Python操作下的4种玩法(附源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:黄伟呢 1.利用python绘制一个小猪佩奇 turtle库是一个很 ...

随机推荐

  1. ubuntu16.04 英文环境安装google chrome

    1.下载google wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 2.安装缺少的依赖 ...

  2. MySQL存储汉字

    之前在网上查找了很多方法,排在前排的都是修改配置文件my.ini的,没有成功,后来找到了一个解决方法: 在建表的时候,在语句后面加上段"engine = innodb default cha ...

  3. Postgres Linux 维护 随笔1(启动篇)

    关于postgres 起停操作随笔 Linux 环境下,对Postgres 起停常用代码 Postgres 启动 : pg_ctl start Postgres 停止 : pg_ctl stop Po ...

  4. 搭建arm交叉工具链

    1.将arm-linux-gcc-4.4.3压缩包,拷到home/armtoolchain下,进行压缩. 2.压缩命令:tar -xzvf arm-linux-gcc-4.4.3.tgz,解压后得到了 ...

  5. 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联

    看到网上很多关于svn环境配置和关联Android-Studio的很多博文,发现很零散,想集大家所长整理一下: 在AndroidStudio中开发版本控制中,除了Git就是SVN,和Eclipse不同 ...

  6. C# 中文在URL中的编码

      UTF-8中,一个汉字对应三个字节,GB2312中一个汉字占用两个字节. 不论何种编码,字母数字都不编码,特殊符号编码后占用一个字节. //按照UTF-8进行编码 string tempSearc ...

  7. 通过JSP+servlet实现文件上传功能

    在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制. 但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的. 通过为表单元素设置Method=&qu ...

  8. C#简单构架之EF进行读写分离+多数据库(Mysql/SqlService)

    最近因为项目需要,研究了下EF的读写分离,所以做了一个demo进行测试,下面是项目的结构 表现层view 主要提供Web.WebApi等表现层的解决方案 公共层public 主要提供项目公共类库,数据 ...

  9. Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

    有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编 ...

  10. Vulkan Tutorial 19 Vertex input description

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 在接下来几个章节中,我们将会使用内存顶点缓冲区来替换之前硬 ...