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

最新文章

  1. Windows下快速安装Flask的一次经历
  2. [原创] Linux下几种文件传输命令 sz rz sftp scp介绍
  3. InnoSetup能够实现“安装细节描述”界面吗?
  4. 走进Linux之systemd启动过程
  5. Oracle之ROW_NUMBER() OVER函数
  6. LeetCode(8) - String to Integer (atoi)
  7. context:component-scan扫描使用上的容易忽略的use-default-filters
  8. Spring与Hibernate、Mybatis整合
  9. UVA 11488-Hyper Prefix Sets(Trie)
  10. kafka介绍和集群环境搭建
  11. C语言-01基础语法
  12. Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)
  13. C#中的ToString格式大全
  14. Centos7安装ES 和 Docker搭建ES
  15. 谈一谈Java中的Error和Exception
  16. Linux下文件和文件夹操作命令详解
  17. Selenium自动化测试插件—Katalon的自述
  18. PHP开发web应用安全总结
  19. Docker容器常用命令
  20. JS的事件流的概念(重点)

热门文章

  1. javaScript 删除确认实现方法总结分享
  2. Javascript 学习 Boolean
  3. 多ComboBox实现复杂查询
  4. jquery拖拽排序,针对后台列表table进行拖拽排序(超实用!)
  5. transient和volatile
  6. Jquery插件之ajaxForm简介
  7. PHP Regex
  8. check_mk检测插件编写
  9. JDK、JRE、javac和JVM的关系
  10. Python数字、字符串