简介

昨天在通过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. javascript痛点之一变量作用域

    1.用var声明的变量是有作用域的,比如我们在函数中用var声明一个变量 1 'use strict'; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 ...

  2. MySql的学习笔记

    良好的理解sql语句: 列:理解可以运算的成变量 where: 理解成表达式,放在行中看是否成立 查出来的结果可以当成一张表理解,select 套用select综合查询:   五种查询 where g ...

  3. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  4. iOS gcd 串行,并行,同步,异步代码研究

    参考文章: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #527eff } span.s1 { } http: ...

  5. 数据结构与算法1-2 C语言运行时间检测算法

    #include <stdio.h> #include <math.h> #include <time.h> clock_t start,stop; #define ...

  6. [0] CollectionBase与索引符DictionaryBase与迭代器

    对于简单数组来说,需要用固定的大小来初始化,才能使用: Animal[] myAnimal=new Animal[10]; myAnimal[0]=new Cow("Ken"); ...

  7. [转] (CQRS)命令和查询责任分离架构模式(一) 之 什么是CQRS

    什么是CQRS? 这个问题网上可以找到很多资料,未接触过的童鞋请先查看Udi Dahan, Grey Young, Rinat Abdullin,园子里dax.net,以及Jdon社区上的相关文章. ...

  8. Myeclipse中隐藏jar包

    在package explorer的右上角有一个向下的小三角 点击选择Filter 在打开的对话框中 第一个选框中打上对勾 文字框中填上 *.jar 然后点击OK就行了 多个隐藏内容之间用逗号隔开 如 ...

  9. R语言统计分析技术研究 特征值选择技术要点

    特征值选择技术要点                          作者:王立敏 文章来源:  网络 1.特征值 特征值是线性代数中的一个重要概念.在数学,物理学,化学,计算机等领域有着广泛的应用. ...

  10. SICP-2.2-数据的抽象

    数据的抽象 生活中有许多的事物具有复合结构,例如地理位置所用的经纬度,便是通过一个复合结构来代表位置,在我们的程序当中,我们设法将经度纬度组合成一对,我们既可以把他们当做一个整体单元来进行操作,而且也 ...