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 开启多线程
app.run(debug=True, threaded=True)
- Java:<获取>、<删除>指定文件夹及里面所有文件
工具类代码如下: 一.获取 public Class Test{ //定义全局变量,存放所有文件夹下的文档 List<String> fileList ; public List<S ...
- SQL-37 创建索引
题目描述 针对如下表actor结构创建索引:CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fi ...
- 用FPGA对ASIC进行原型验证的过程(转)
用FPGA对ASIC进行原型验证的过程 reference:http://xilinx.eetrend.com/d6-xilinx/article/2018-10/13736.html 鉴 ...
- 循环神经网络-RNN入门
首先学习RNN需要一定的基础,即熟悉普通的前馈神经网络,特别是BP神经网络,最好能够手推. 所谓前馈,并不是说信号不能反向传递,而是网络在拓扑结构上不存在回路和环路. 而RNN最大的不同就是存在环路. ...
- awk入门及进阶
awk是Linux下优良的文本处理工具,有自成一体的编程语法规则,在循环和条件判断语句等方面和C语言很像. 其一般形式是:Pattern1 {ACTIONS; } Pattern2 { ACTIONS ...
- Spring Boot 揭秘与实战(二) 数据缓存篇 - Guava Cache
文章目录 1. Guava Cache 集成 2. 个性化配置 3. 源代码 本文,讲解 Spring Boot 如何集成 Guava Cache,实现缓存. 在阅读「Spring Boot 揭秘与实 ...
- JavaBasic_05
方法 简述:实现特定功能的代码块 格式 修饰符: 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){ 函数体; return 返回值;} 方法格式 ...
- HDU 3635:Dragon Balls(并查集)
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- java-类与类,类与接口,接口与接口的关系
1.类与类: - 继承关系,只能单继承,可以多层继承. 2.类与接口: - 实现关系,可以单实现,也可以多实现. - 并且还可以在继承一个类的同时实现多个接口. - * 例:class Demo ex ...