1.  判断shell里判断字符串是否包含某个字符

  a.  可以用正则式匹配符号      “=~”

    举例:str="this is a string"
      要想在判断str中是否含有"this"这个字符串,下面的语句是可行的
      [[ $str =~ "this" ]] && echo "\$str contains this"
      [[ $str =~ "that" ]] || echo "\$str does NOT contain this"

2. shell 根据路径字符串截取文件和文件名

比如从路径里取出 文件名或者判断中间某一个文件夹是否存在,不存在就创建新文件夹等。

   a. 使用${ }

  规则是:

  #表示左边,第一个,##表示从左边起最后一个

  %表示右边,第一个,%%表示从右边最后一个

  /和*的使用配合左右,当用到左边时,“ * ”在“/ ”的左边,用到右边时,“ * ”在“ / ”的右边。(“ * ”可以看成是所有,“ * ”在“ / ”左边,表示要把“ / ”左边的全部去掉,加一个“#”去一个,加两个“##”意思是去掉从左边数最后一个的“ / ”的全部左边字符)

  举例:${var#*/}  :去掉从左边起第一个出现的“ / ”和它的左边的内容。

 path=“one/two/three”
new_path=${path#*/}
echo $new_path

  结果: two/three

  举例:${var%%/*}:去掉从右边数最后一个“ / ”及其右边的内容 。

 path=“one/two/three”
new_path=${path%%/*}
3 echo $new_path

  结果:one

  --除了和“ / ”配合使用,也可以和其他特殊字符进行匹配使用--

  比如" . " :       举例 ${var##*.} :表示从去掉左边起最后一个" . "以及它左边的全部内容。即返回从左边数最后一个" . "的右边的内容。

 b. basename和 dirname    【此处参考 https://www.jb51.net/article/103875.htm】

  ${var }其实并不是为了截取文件目录和文件名而存在的,但basename和dirname他们是。

       1)、basename

  该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。

  1)从路径中提出出文件名(带后缀),例子如下:

  

  2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:

  

  2、dirname

  该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME

  使用例子如下:

  

  这样就提取出了file.txt文件所在的目录。

  注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:

  

  它提取出了目录dir2所在的目录dir1.

3. shell遍历带有特殊字命名标题的文件和文件夹

linux处理包含空格和特殊字符的文件名可以参考:https://blog.csdn.net/chengxuyuanyonghu/article/details/46820219

  shell处理包含空格的文件名时,echo直接打出来会把空格当做两个文件夹来处理。

  我用的方法是在脚本中替换默认的ifs(internal field separator),脚本运行完之后恢复:

SAVEIFS=$IFS
#更改ifs为换行
IFS=$(echo -en "\n\b") ##执行脚本 IFS=$SAVEIFS

  shell中的IFS解释参考:https://blog.csdn.net/whuslei/article/details/7187639

linux shell 部分问题解决方法的更多相关文章

  1. 关于linux密码忘记问题解决方法

    最近在试装centos,不小心把密码丢了,进不去,查了一下资料,找到了方法,试验成功.存在这里,备用. 1. 在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键 2. 再次用上 ...

  2. Linux - Shell脚本调试方法

    Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...

  3. linux shell数组赋值方法(常用)

    http://blog.csdn.net/shaobingj126/article/details/7395161 Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... ...

  4. Linux虚拟机小问题解决方法系列

    1)使用虚拟机的过程中,会碰到虚拟机占用的空间越来越大的情况,即使删除了虚拟机里的文件,磁盘空间还是似乎还是没有释放,使用“vmware-vdiskmanager”工具解决.解决方法在这里:参考.合并 ...

  5. Linux Shell自动交互/人机交互的三种方法

    如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下. 一.背景 shell脚本在处理自动循环或大的任 ...

  6. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  7. linux shell 中数组使用方法介绍

    linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  8. linux shell根据端口返回进程号杀死进程的方法

    linux shell根据端口返回进程号杀死进程的方法<pre>kill `lsof -t -i:9501`</pre>这个就是杀死9501端口的进程号

  9. linux shell获取show slave status方法

    linux shell获取show slave status方法<pre>#!/bin/basharray=($(mysql -u数据库账号 -p数据库密码 -e "show s ...

随机推荐

  1. java 多线程 yield方法的意义

    Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一 ...

  2. python 钩子函数

    python 在windows下监听键盘按键 使用到的库 ctypes(通过ctypes来调用Win32API, 主要就是调用钩子函数) 使用的Win32API SetWindowsHookEx(), ...

  3. CentOS 搭建Redis4 环境

    下载 wget http://download.redis.io/releases/redis-4.0.10.tar.gz   安装步骤 tar xvf redis-4.0.10.tar.gz mak ...

  4. cmd/bat 判断日期,并删除文件

    代码来自互联网. ---------------------------------------- @echo off set a=2018-07-9 set ndate=%date:~,10%set ...

  5. SpringBoot JPA注解详解

    1.@OneToOne 2.@OneToManytargetEntity: 默认关联的实体类型.如果集合类中指定了具体类型了,不需要使用targetEntity.否则需要targetEntity指定C ...

  6. jeecg3.8popup弹出窗口触发失去焦点事件,引发验证弹窗,影响体验问题的解决办法

    在初始化表单的代码中添加以下加粗部分,有几个popup就定义几个标志位,主要是防止第一次失去焦点时候的弹窗(此时还未来得及选择),提交表单的时候还是会正常校验的. //popup触发失去焦点事件,设置 ...

  7. git合并分支上的commit为一条commit到master

    标签: git 缘由? 有一次被人问到怎么把一个分支的所有commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,很少考虑到这种问题,于是特意搜索了相关资料. 场景 其 ...

  8. 写英文bug的经验总结

    本文链接: https://www.cnblogs.com/hchengmx/p/10800855.html 由于工作原因,开bug的时候需要由英文开,刚开的时候比较痛苦,因为有些词汇老师用的不太准确 ...

  9. Node.js-npm安装包目录修改

    请借我一个哭的表情....=.= 等我发现的时候为时已晚~所有安装的包都去了C盘,而强迫症的我想卸载了之前所有的包再重新下一遍!!! 切记!安装好npm后,记得修改: 原始路径: 修改后的路径(如果没 ...

  10. 【js基础修炼之路】— null和undefined的区别

    在近期的复习期间遇到null和nudefined,于是通过查找资料,想写一篇文章来说明他们的区别.. javaScript高级程序设计: 在使用var声明变量但未对其加以初始化时,这个变量的值就是un ...