转自:http://blog.csdn.net/zg_hover/archive/2007/10/29/1854011.aspx
shell中的特殊字符
;
分隔符号,用来表示一行执行多条命令
echo hello; echo there
if [ -f "$file" ]; then
cd "$file"
fi
;;
case 的选项终止符
ex:
case "$var" in
1) echo "1=$var" ;;
2) echo "2=$var" ;;
esac
.
1)相当于source命令
2)文件名第一个字符,变文件可见为隐藏
3)做目录时,表示当前目录
ex:
cd .
4)在正则表达式中,匹配单个字符
"
部分引用."STRING"阻止了一部分特殊字符
'
全引用. 'STRING' 阻止了全部特殊字符
,
在算数运算中和C语言的逗号作用相似
ex:
let "t2=((a=4, 5/3))" #t2=5/3
/
1)转义字符,相当于''或""
2)用来表示一行还没有结束
/
1)路径分隔符或除法运算符
2)在sed中用来表示一个单词的结束
`
后置引用。由于命令替换
:
1)与True命令相同,表示什么都不干
ex1:
if [***]
then : #什么都不作,为了引出下面的分支
else
echo "test :"
fi
ex2:
while : #相当于while true
do
echo "test :"
done
2)作为/etc/passwd和$PATH字符间的分隔符
!
取反操作符
^
1)sed,grep中表示行首
sed -e '/^$/ d' filename #删除空白行
2)在正则表达式中表示取反
grep '^[^ad]' filename #输出行首不是字母a或者d开头的行
*
1)文件名或正则表达式中(但这两者却是不同的)的万能匹配符
2)数学乘法
**
乘法密运算
?
1)在正则表达式中表示单个字符的匹配
$
1)变量替换
ex:
var=8
echo $var #8
2)正则表达式中的行结束符
sed -e '/^$/d' filename #删除文件中的空被行
${}
参数替换,见9.3节.
$()
用来进行命令的运行,相当于``
$*,$@
所有的位置参数,被作为一个单词.
注意:"$*"和"$@"必须被""引用.
$#
表示参数的个数,注意参数的个数不包含命令本身在内
test.sh a b c
echo "$#" #输出的结果是3
$?
退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态.
$$
进程ID变量.这个$$变量保存运行脚本进程ID
()
1)命令组 ex: (echo "1"; echo "2" )
2)数组初始化 ex: array=(1,2,3,4)
说明:它的命令会在子shell中运行,所以其内部的变量对于外面是不可见的
{}
1)代码块
cp file22.{txt,backup}
# 拷贝"file22.txt" 到"file22.backup"中
5)变量内部替换
ex:
a=1122
b=${a/11/gg} #b=gg22
[]
1)用于test的表达式中 if [ -x "$file" ]; then **** fi;
2)数组元素 array[1]=1; echo ${array[1]}
3)正则表达式时的匹配字符的一个范围:
(())
一般是用于数学计算
[[]]
可以进行算数运算并返回一个逻辑的值
与函数的{}不同的是,该括号里声明的变量对于外部代码来说还是可见的。
2)代码块的操作
ex:
{
echo "rpm check"
rpm -qpi *.rpm
} > "$test"
3){} /;
find 的命令的后来的部分。注意";"是find 命令的结束。
4)大括号扩展,如:
cat {file1,file2,file3} > combined_file
# 把file1,file2,file3连接在一起,并且重定向到combined_file中.