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/
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 "33[7mHighlight text33[0mNormal text"













以上是关于bash常识的主要内容,如果未能解决你的问题,请参考以下文章

shll脚本的基础常识+yum仓库的自动搭建

-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory(代码片段

shell常识

markdown Bash片段

sh 杂项bash片段

sh bash片段