bash常识
Posted realplay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 和当前用户相同 |
file1 -nt file2
|
文件 file1 比 file2 更新 |
file1 -ot file2
|
文件 file1 比 file2 更老 |
字符串变量的截取操作
echo ${str##a*c} ##(#)代表从左边裁掉最长(短)匹配,%%(%)代表从右边裁掉最长(短)匹配
字符串替换
1
2
3
4
5
6
|
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
${
#str} # 4
expr
"$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
"$str"
1 3
# 从第一个位置开始取3个字符, abc
expr
substr
"$str"
2 5
# 从第二个位置开始取5个字符, bcdef
expr
substr
"$str"
4 5
# 从第四个位置开始取5个字符, def
echo
${str:2}
# 从第二个位置开始提取字符串, bcdef
echo
${str:2:3}
# 从第二个位置开始提取3个字符, bcd
# 位置的可以是负数,表示倒数第几个字符
在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
来源 http://mindream.wang.blog.163.com/blog/static/2325122220084624318692/
sub-shell执行完毕后返回parent-shell.
补充
fork: 在脚本中直接调用子脚本,如./sub-script,不继承parent-shell中未export的变量
exec: 在脚本中使用exec调用子脚本,如exec ./sub-script,不继承未export的变量
source: 在脚本中使用source调用子脚本,如source ./sub-script,继承未export的变量
export VAR=‘v‘
等效于
VAR=‘v‘
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按颜色显示
反相显示:echo -e "