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 " \033[7mHighlight text\033[0mNormal text"

猜你喜欢

转载自www.cnblogs.com/realplay/p/9648753.html
今日推荐