linux shell 部分问题解决方法
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 部分问题解决方法的更多相关文章
- 关于linux密码忘记问题解决方法
最近在试装centos,不小心把密码丢了,进不去,查了一下资料,找到了方法,试验成功.存在这里,备用. 1. 在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键 2. 再次用上 ...
- Linux - Shell脚本调试方法
Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...
- linux shell数组赋值方法(常用)
http://blog.csdn.net/shaobingj126/article/details/7395161 Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... ...
- Linux虚拟机小问题解决方法系列
1)使用虚拟机的过程中,会碰到虚拟机占用的空间越来越大的情况,即使删除了虚拟机里的文件,磁盘空间还是似乎还是没有释放,使用“vmware-vdiskmanager”工具解决.解决方法在这里:参考.合并 ...
- Linux Shell自动交互/人机交互的三种方法
如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下. 一.背景 shell脚本在处理自动循环或大的任 ...
- 学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
- linux shell 中数组使用方法介绍
linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- linux shell根据端口返回进程号杀死进程的方法
linux shell根据端口返回进程号杀死进程的方法<pre>kill `lsof -t -i:9501`</pre>这个就是杀死9501端口的进程号
- linux shell获取show slave status方法
linux shell获取show slave status方法<pre>#!/bin/basharray=($(mysql -u数据库账号 -p数据库密码 -e "show s ...
随机推荐
- contiki源码阅读之list
我们阅读一下contiki的源码,list.c(路径是./core/lib/list.h). #include "lib/list.h" #define NULL 0 struct ...
- hduoj 2062Subset sequence
Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- pat1041. Be Unique (20)
1041. Be Unique (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Being uniqu ...
- 洛谷P4925 [1007]Scarlet的字符串不可能这么可爱(计数)
题意 题目链接 Sol 只要知道"回文连续子串"就能做了吧.. 想要满足这个条件,肯定是不能出现\(aa\)或\(aba\)这种情况 如果没有\(S\)的限制,答案为\(K * ( ...
- IDEA下通过Git实现代码管理
IDEA下通过Git实现代码管理 1.介绍 1.1 Git概述 Git是类似于SVN等代码管理软件,使用分布式技术实现.Github是互联网代码仓库,每个人可以在上面创建自己的仓库,使用git完成同g ...
- winxp如何开启SNMP服务
1.先安装SNMP组件 开始——> 控制面板——>添加或删除程序——>添加/删除windows组件——>管理和监视工具(前面方框选择后)——>详细信息——>简 ...
- simotion ST编程,变量和程序的模块化
通过这几年的实践,对simotion的程序结构规划有了一些新的理解.工程师在面对项目时,经常有几个问题比较困惑. 目前面对的问题 1)如何理解其他人编写的程序 2)如何从程序中找到可以移植的部分 传统 ...
- 运行在 Android 系统上的完整 Linux -- Termux
Termux 可以在安卓系统上搭建一个完整的linux 环境,类似于 cygwin 并非linux 虚拟机,整个安装包只有 几百KB 刚开始觉得这东西的命令行很难用,看了官方介绍后才发现它原来有许多 ...
- May 6th 2017 Week 18th Saturday
A great ship asks deep water. 巨轮寻深水而航行. A great ship needs deep water so as to get enough buoyancy t ...
- react里面怎么引入样式
模块样式 在刚开始构建好框架的时候,准备开始写业务,在第一个页面的时候就会碰到怎么引入样式的问题,踩过一些坑,不是使用style,头部也不需要另外取名,直接引入css就可以,引入方式是这样 <d ...