条件判断

判断是否为空 -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常识的更多相关文章

  1. SHELL脚本编程的常识和VI常用技巧

    来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc3751808 ...

  2. scp报错 -bash: scp: command not found

    环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...

  3. bash字符串操作

    参考 http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 问题:bash怎么提取字符串的最后一位?例如python中strin ...

  4. grep 查找bash脚本中的注释代码

    出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...

  5. Bash 脚本编程语言中的美学与哲学

    我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...

  6. cmder git bash 使用

    cmder 是一款 windows 下的命令集合软件,它可以集合各种系统下的命令,并且操作非常快速方便. 安装有两个版本,一个是简化版(4.27M),一个是完全版(75.7M),它们的唯一区别:完全版 ...

  7. 安装完成后在命令行运行bash时报错0x80070057

    在命令运行bash 提示如下: 解决方法,不启用旧版本控制台: 右键命令提示栏 打开属性,把勾选去掉如下图红色边框标识: 然后重启,就可以使用,也包括可以打开Bash on Unbuntu on Wi ...

  8. Bash简明教程--变量

    1. 前言 Bash是一门流行在*nix系统下的脚本语言.作为一门脚本语言,变量是一门语言的基本要素,在这篇教程中,我们将学习Bash中的变量是怎么表示的,以及变量相关的一些语法规则. 2. Bash ...

  9. 让BASH,VIM美美的Powerline

    前言  鉴于BASH及其周边强大的工具以及VIM高效快捷,加上现在我工作重心转移到前端开发上,因此我华丽地转向Linux阵营(当然从最傻瓜式的Ubuntu开始啦!).但BASH和VIM默认样式确实颜值 ...

随机推荐

  1. flask项目结构(三)使用蓝图

    简介: Flask中的蓝图旨在针对这些情况: 把一个应用分解成一系列的蓝图.对于大型的应用是理想化的:一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图. 以一个 URL 前缀和/或子域 ...

  2. 关于iOS构建版本

    1.Build Active Architecture Only 设置 Build Active Architecture Only 设置为NO的时候,会编译支持的所有的版本 设置为YES的时候,是为 ...

  3. 201621123001 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...

  4. netty的decoder encoder

    public class DelimiterBasedFrameDecoder extends ByteToMessageDecoder { 随便找了一个用字符串分割粘包的decoder,继承了Byt ...

  5. MVC4中使用Uploadify3.2

    你使用过 GMail 中附件上传吗?带有上传进度,可以取消正在进行的上传,使用 Uploadify 插件,你也可以做到. Uploadify 是 JQuery 一个著名的上传插件,利用 Flash 技 ...

  6. React 新 Context API 在前端状态管理的实践

    本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redux来帮助我们进行管理,然而随着Re ...

  7. [深入理解Java虚拟机]<垃圾收集器与内存分配策略>

    Overview 垃圾收集考虑三件事: 哪些内存需要回收? 什么时候回收? 如何回收? 重点考虑Java堆中动态分配和回收的内存. Is Object alive? 引用计数法 给对象添加一个引用计数 ...

  8. go语言求1到100之内的质数

    素数指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数.换句话说,只有两个正因数(1和自己)的自然数即为素数(也叫质数).比1大但不是素数的数称为合数.1和0既非素数也非合数. ...

  9. mssql,mysql,Oracle 数据库中获得UUID字符串

    sql server : select replace(newId(),'-','') oracle :select sys_guid() from dual SQL> select sys_g ...

  10. 使用solr报错

    2017-11-15  20:15:18 错误介绍: 错误原因:url错误 错误解决:换成正确