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

简介

昨天在通过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地址点这里,开源中国地址点这里

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大神带我来搬砖

Spring mvc中统一对ResponseBody进行封装

在一个前后端分离的项目中,需要对后端RestController里返回的ResponseBody进行统一的封装,让所有的API结果的都是json对象,带有是否成...

12820
来自专栏丑胖侠

Spring注解的(List&Map)特殊注入功能

最近接手一个新项目,已经没有原开发人员维护了。项目框架是基于Spring boot进行开发。其中有两处Spring的注解花费了大量的时间才弄明白到底是怎么用的,...

29090
来自专栏冷冷

SpringMVC 提交表单400 Bad Request

第一种: 后台:  @RequestMapping(value="/add",method=RequestMethod.POST)     public Str...

35350
来自专栏Zephery

Spring中Bean

一、什么是Bean 1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化); 2、凡是有方法或属性的类都需要实例化,这样才能具象...

31760
来自专栏javathings

Spring Boot 中,Json 数据传值方式

之前整理过一篇 Spring MVC 中的传值方式。《Spring MVC 传值方式总结》

67660
来自专栏Ryan Miao

oracle数据库字符集US7ASCII,在java中处理中文问题

原来项目中oracle数据库一直是US7ASCII,我新项目对接的时候,查询以及插入中文,出现乱码问题。 暂时未能解决此问题,最终决定每次转码: 查询的时候: ...

511110
来自专栏为数不多的Android技巧

Android插件化原理解析——Hook机制之Binder Hook

Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, A...

18610
来自专栏后台及大数据开发

springBoot系列教程06:参数验证及验证信息国际化

在springboot应用中要验证参数是否正确很简单,web应用已经包含了validation的

14620
来自专栏颇忒脱的技术博客

Spring、Spring Boot和TestNG测试指南 - 测试@Configuration

在Spring引入Java Config机制之后,我们会越来越多的使用@Configuration来注册Bean,并且Spring Boot更广泛地使用了这一机...

12920
来自专栏Linyb极客之路

在Spring Boot中读取application.properties

通过这篇简短的博客文章,我将与您分享一些可以从Spring Boot中的application.properties文件中读取应用程序属性的方法。 我将分享3种...

53740

扫码关注云+社区

领取腾讯云代金券