shell脚本中字符串的常见操作及"command not found"报错处理(附源码)
时间:2022-05-04
本文章向大家介绍shell脚本中字符串的常见操作及"command not found"报错处理(附源码),主要内容包括简介、字符串的定义与赋值、字符串连接、if条件语句中的空格、shell中判断字符串包含关系的方法、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
简介
昨天在通过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地址点这里,开源中国地址点这里。
- 自然语言处理构建文本向量空间1.百科2.源代码3.参考:
- 小爬虫之爬取豆瓣电影排行榜1.技术路线2.任务3.分析4.运行结果5.源码
- Numpy 修炼之道 (5)—— 索引和切片
- 深入理解final关键字
- Numpy 修炼之道 (4)—— 基本运算操作
- 一些APT攻击案例分享
- 浅谈命令查询职责分离(CQRS)模式
- Numpy 修炼之道 (3)—— 数据类型
- 熔断器设计模式
- 树链剖分详解
- 洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)
- 学习使用Jieba1.Jieba2. 特点3.功能4.安装5.使用6.其他中文分词工具
- 如何使用sklearn加载和下载机器学习数据集
- 洛谷P3224 [HNOI2012]永无乡
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringBoot常用注解的简单理解
- Qt多线程编程之线程的同步和互斥
- TS 设计模式06 - 代理模式
- TS 设计模式07 - 观察者模式
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)
- 前京东陌陌高级架构师的直播笔记分享(Java 内存问题排查和解决:内存概览,内存问题出现的原因,问题代码,案例分析)
- leet笔记-62.不同路径
- leet笔记-63.不同路径II
- 五分钟C语言实现数据结构 之 二叉树链式存储
- 视频上云/网络穿透/网络映射服务EasyNTS前端切换页面卡顿如何优化?
- [译] 在 Vue 组件中分离 UI 和业务逻辑
- Android Notes|BottomNavigationView 爱上 Lottie
- Android Notes|玩转 ShapeableImageView
- 前端技术 Webpack(学习 Webpack 的原因,Webpack 快速入门)
- 每日一问第1期 | 截取字符串