bash常识
条件判断
判断是否为空 -z,尽量不要使用-n
运算符 | 含义( 满足下面要求时返回 TRUE ) |
---|---|
-e file | 文件 file 已经存在 |
-f file | 文件 file 是普通文件 |
-s file | 文件 file 大小不为零 |
-d file | 文件 file 是一个目录 |
-r file | 文件 file 对当前用户可以读取 |
-w file | 文件 file 对当前用户可以写入 |
-x file | 文件 file 对当前用户可以执行 |
-g file | 文件 file 的 GID 标志被设置 |
-u file | 文件 file 的 UID 标志被设置 |
-O file | 文件 file 是属于当前用户的 |
-G file | 文件 file 的组 ID 和当前用户相同 |
-z var | var未定义,或var为空字符串 |
-n var | zws: var代表的字符串长度不为0 |
file1 -nt file2 | 文件 file1 比 file2 更新 |
file1 -ot file2 | 文件 file1 比 file2 更老 |
否定条件:if [ ! expresssion ]
字符串操作
字符串变量的截取操作
echo ${str##a*c} ##(#)代表从左边裁掉最长(短)匹配,%%(%)代表从右边裁掉最长(短)匹配
字符串替换
str=“apple, tree, apple tree”
- echo ${str/apple/APPLE} # 替换第一次出现的apple
- echo ${str//apple/APPLE} # 替换所有apple
- echo ${str/#apple/APPLE} # 如果字符串str以apple开头,则用APPLE替换它
- echo ${str/%apple/APPLE} # 如果字符串str以apple结尾,则用APPLE替换它
字符串比较
[[ “a.txt” == a* ]] # 逻辑真 (pattern matching)
[[ “a.txt” =~ .*.txt ]] # 逻辑真 (regex matching)
[[ “abc” == “abc” ]] # 逻辑真 (string comparision)
[[ “11” < “2” ]] # 逻辑真 (string comparision), 按ascii值比较
取长度
str=“abcd”
expr length $str # 4
echo KaTeX parse error: Expected '}', got '#' at position 2: {#̲str} # 4
…str" : “.*” # 4
好像一般使用第二种
查找子串的位置
str=“abc”
expr index $str “a” # 1
expr index $str “b” # 2
expr index $str “x” # 0
expr index $str “” # 0
选取子串
str=“abcdef”
expr substr “KaTeX parse error: Expected 'EOF', got '#' at position 11: str" 1 3 #̲ 从第一个位置开始取3个字符,…str” 2 5 # 从第二个位置开始取5个字符, bcdef
expr substr “$str” 4 5 # 从第四个位置开始取5个字符, def
echo ${str:2} # 从第二个位置开始提取字符串, bcdef
echo ${str:2:3} # 从第二个位置开始提取3个字符, bcd
# 位置的可以是负数,表示倒数第几个字符
fork, exec, source
来源 http://mindream.wang.blog.163.com/blog/static/2325122220084624318692/
fork
( /directory/script.sh)
fork是最普通的, 就是直接在脚本里直接调用另一脚本.
运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。
sub-shell执行完毕后返回parent-shell.
sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell
exec
(exec /directory/script.sh)
exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别
source
(source /directory/script.sh,或". xxx")
与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
补充
fork: 在脚本中直接调用子脚本,如./sub-script,不继承parent-shell中未export的变量
exec: 在脚本中使用exec调用子脚本,如exec ./sub-script,不继承未export的变量
source: 在脚本中使用source调用子脚本,如source ./sub-script,继承未export的变量
export VAR=‘v’
等效于
VAR=‘v’
export VAR
其他
bash按颜色显示
http://tieba.baidu.com/p/2344083142
反相显示
echo -e "\033[7mHighlight text\033[0mNormal text"
bash常识的更多相关文章
- SHELL脚本编程的常识和VI常用技巧
来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc3751808 ...
- scp报错 -bash: scp: command not found
环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...
- bash字符串操作
参考 http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 问题:bash怎么提取字符串的最后一位?例如python中strin ...
- grep 查找bash脚本中的注释代码
出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...
- Bash 脚本编程语言中的美学与哲学
我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...
- cmder git bash 使用
cmder 是一款 windows 下的命令集合软件,它可以集合各种系统下的命令,并且操作非常快速方便. 安装有两个版本,一个是简化版(4.27M),一个是完全版(75.7M),它们的唯一区别:完全版 ...
- 安装完成后在命令行运行bash时报错0x80070057
在命令运行bash 提示如下: 解决方法,不启用旧版本控制台: 右键命令提示栏 打开属性,把勾选去掉如下图红色边框标识: 然后重启,就可以使用,也包括可以打开Bash on Unbuntu on Wi ...
- Bash简明教程--变量
1. 前言 Bash是一门流行在*nix系统下的脚本语言.作为一门脚本语言,变量是一门语言的基本要素,在这篇教程中,我们将学习Bash中的变量是怎么表示的,以及变量相关的一些语法规则. 2. Bash ...
- 让BASH,VIM美美的Powerline
前言 鉴于BASH及其周边强大的工具以及VIM高效快捷,加上现在我工作重心转移到前端开发上,因此我华丽地转向Linux阵营(当然从最傻瓜式的Ubuntu开始啦!).但BASH和VIM默认样式确实颜值 ...
随机推荐
- flask项目结构(三)使用蓝图
简介: Flask中的蓝图旨在针对这些情况: 把一个应用分解成一系列的蓝图.对于大型的应用是理想化的:一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图. 以一个 URL 前缀和/或子域 ...
- 关于iOS构建版本
1.Build Active Architecture Only 设置 Build Active Architecture Only 设置为NO的时候,会编译支持的所有的版本 设置为YES的时候,是为 ...
- 201621123001 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- netty的decoder encoder
public class DelimiterBasedFrameDecoder extends ByteToMessageDecoder { 随便找了一个用字符串分割粘包的decoder,继承了Byt ...
- MVC4中使用Uploadify3.2
你使用过 GMail 中附件上传吗?带有上传进度,可以取消正在进行的上传,使用 Uploadify 插件,你也可以做到. Uploadify 是 JQuery 一个著名的上传插件,利用 Flash 技 ...
- React 新 Context API 在前端状态管理的实践
本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redux来帮助我们进行管理,然而随着Re ...
- [深入理解Java虚拟机]<垃圾收集器与内存分配策略>
Overview 垃圾收集考虑三件事: 哪些内存需要回收? 什么时候回收? 如何回收? 重点考虑Java堆中动态分配和回收的内存. Is Object alive? 引用计数法 给对象添加一个引用计数 ...
- go语言求1到100之内的质数
素数指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数.换句话说,只有两个正因数(1和自己)的自然数即为素数(也叫质数).比1大但不是素数的数称为合数.1和0既非素数也非合数. ...
- mssql,mysql,Oracle 数据库中获得UUID字符串
sql server : select replace(newId(),'-','') oracle :select sys_guid() from dual SQL> select sys_g ...
- 使用solr报错
2017-11-15 20:15:18 错误介绍: 错误原因:url错误 错误解决:换成正确