标签:shell高级
#号,可以出现在语句前,语句后,甚至语句中间,但是不能跟语句在同一行,同一行会出现问题。#号不会生效的情况是 “ ‘ \ 参数 或者运算符中
${} 参数
() 命令集
{ } 大括号 (Block of code)
有时候 script 当中会出现,大括号中会夹着一段或几段以\"分号\"做结尾的指令或变数设定。
# cat ftmp-02#!/bin/basha=fsh{a=inbc ; echo -e \"\\n $a \\n\"}echo $a#./ftmp-02inbcinbc
这种用法与上面介绍的指令群组非常相似,但有个不同点,它在当前的 shell 执行,不会产生 subshell。
大括号也被运用在 \"函数\" 的功能上。广义地说,单纯只使用大括号时,作用就像是个没有指定名称的函数一般。因此,这样写 script也是相当好的一件事。尤其对输出输入的重导向上,这个做法可精简 script 的复杂度。
此外,大括号还有另一种用法,如下
{xx,yy,zz,...}
这种大括号的组合,常用在字串的组合上,来看个例子
mkdir {userA,userB,userC}-{home,bin,data}
我们得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data,这几个目录。这组符号在适用性上相当广泛。能加以善用的话,回报是精简与效率。像下面的例子
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
如果不是因为支援这种用法,我们得写几行重复几次呀
(( ))
这组符号的作用与 let 指令相似,用在算数运算上,是 bash 的内建功能。所以,在执行效率上会比使用 let指令要好许多。
#!/bin/bash(( a = 10 ))echo -e \"inital value, a = $a\\n\"(( a++))echo \"after a++, a = $a\"
brace 大括号
{} 占位符
【】判断式
【【 】】 基本和【】相同,但可以直接在其中用 || && 判断
\<,\>单词边界
>| 强制覆盖存在文件
- 是重标准输入读取
tar cvf - `find . -mtime -1 -type f -print` > $archive.tar gzip $archive.tar echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"." |
b=${a/23/BB} # Substitute "BB" for "23".
d=BB35 d=${c/BB/23} # Substitute "23" for "BB". # This makes $d an integer. echo "d = $d" # d = 2334 let "d += 1" # 2334 + 1 echo "d = $d" # d = 2335 echo |
双引号 除了变量 $ ' \ 外不在解释引号中其他所有特殊字符。双引号还能使句子不分开。
单引号转义字符 \ 。也只是被局限于字面上的意思。在一个双引号中加单引号是不行的。使用单引号可以阻止shell解释器编辑指令中的特殊字符或空格(shell使用空格决定提交给程序的独立的参数,特殊的shell字符在调用之前被展开)
tar -p 保留权限
[[ ]] 和 (( )) 给出返回值
test
-s zise 为零 -a 文件存在 -p file 为管道符 -S 文件为socket -L 文件为链接符
f1 -nt f2 f1比f2更新
f1 -ot f2 f1 比 f2 更旧
f1 -ef f2 文件f1 和 f2 是硬链接到文件的
arithmetic operators
** 求幂次方运算
#!/bin/bash i=77 let ‘i=i**6‘ # 77*77*77 echo "$i" ~ |
bitwise operator(按位运算)
~op1 反运算符。把op1中的所有二进制为1变为0,0变1. op1<<op2 左移运算符。把op1中的二进制相左移动op2位,忽略最左端的移除的各位,最右端的各位补上0值,每做一次按位左移就有实现op1乘以2 op1>>op2 右移运算符.把op1中的二进制向右移动op2位,忽略最右端移出的各位。最左端各位补上0值。每做一次按位左移就有实现op1除以2. op1&op2 与比较运算符,op1和op2对应位。对于每个二进制来说,如果二者该位都是1,则结果为1.否则为0 op1~op2 异或运算符。比较op1和op2对应位。对于每个二进制来说,如果二者该位互补,则结果为1.否则结果为0 op1|op2 或运算符 比较op1和op2对应位,对于每个二进制来说,如果二者该位有一个是1或者都是1,则结果为1,否则结果为0 ^ bitwise XOR ^= bitwise XOR-equa |
内部变量
$PIPESTATUS (退出状态的编码)
通过管道来分别输出退出状态
特殊变量
$- 传递给脚本给set命令使用
$! 在后台运行最后的工作的pid
$_ 保存之前执行的命令的最后一个参数
$? 保存之前执行的命令的最后一个参数
$? 函数或者脚本本身的推出状态
$$ 脚本自身的进程ID
内部变量
declare -r 只读选项 强制指定制度
-i 整数
-a array 把它看作数组
-f 功能
-x export
-x var=$var
维护变量
匹配
index (索引)
高级比较
f1 -nt f2 file f1 is newer than f2 f1 -ot f2 file f1 is older than f2 f1 -ef f2 files f1 and f2 are hard links to the same fil |
- h 链接文件
declare -i 整数
$_ 最后传递的参数
本文出自 “桂花香” 博客,请务必保留此出处http://1074963.blog.51cto.com/1064963/1675711
标签:shell高级
原文地址:http://1074963.blog.51cto.com/1064963/1675711