Linux shell语法小结
变量
含义
$#
参数个数
$*
所有参数
$@
同上,稍有区别
$-
Shell的选择项
$?
上次执行命令返回值
$$
Shell的进程标识符
$!
用&启动的最后一个命令的进程标识符
$HOME
cd命令的缺省参数
$IFS
参数分割词的字符表
信件文件,当其改变时给出信息you have mail
$PATH
搜索命令的目录表
$PS1
提示符串,缺省为$
$PS2
后继命令行提示符,缺省为>
有关$*和$@得归纳:
?$*和$@扩展为参数,并被重复扫描;参数得空格将字符串分成多个参数;
?“$*”表示shell文件的所有参数及其空格连在一起作为单个词处理;
“$@”与shell文件接收的参数等价,参数中的空格被忽略,其结果是等同于原来参数的一个单词列表。
?
10、?shell模式匹配规则
*??????匹配任意字符串,包括空字符串
???????匹配任意单字符串
[ABC]??匹配ABC中任意字符
“…”???完全与…匹配,引号保护特殊字符,也可以写成’…’
\C?????匹配C
?
11、?case语句
case word in
??模式1)??命令;;
??模式2)??命令;;
??…
??*)???????命令[;;]
esac
只能匹配一个模式
?
12、?if?语句
if?命令
then
else
fi
其中换行很重要,then、else和fi仅在换行或分号之后被识别,else部分可选。可以利用case语句替代if和test测试语句,对于test命令不是内部命令的情况下,case语句执行的要快;
?
13、循环
1)for i [in?文件(参数)列表]
do
??循环体
done
????????如果i后面没有in部分,则隐含地表示对shell文件的全部参数,即$*
?
????? 2)?While?命令
????????????do
??????????????????循环体,只要命令返回状态为真便继续进行
? done
?
3)until?命令
do
???循环体,只要命令返回状态为假便继续执行
Done
?
例如:
While sleep 60
do
…
Done
每隔60秒执行一次循环中的操作;
?
?? 另外,where处的控制命令可以是true、false、或者是:,冒号命令是一个shell内部命令,仅仅计
?? 算参数值,然后返回“真”,但是它不需要调用系统中的命令,所以效率比true命令高;
?
? 4)break命令:退出循环,取自C语言。
?
14、点号命令:
???将文件作为标准输入,从中读入一行一行的命令在当前shell中执行,不要求文件具有可执行权限;
?
15、?文件命令习惯,后面加上当前进程号码$$为好
?
16、标准输入命令read
$read greeting
Hello,world
????????? ?$echo $greeting
?????????????????Hello,world
?
17、here document 输入
???????? <<s???从本地输入,直至出现字符串s为止,但是要解析输入中的特殊字符,``,$和\。
????<<’s’?同上,不进行替换。
????<<\s?同上。
?
本文转自:
http://blogold.chinaunix.net/u1/34739/showart_283263.html
?
其它相关资料:
Linux Shell编程入门http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html
?
?
Linux Shell语法速查表(用C语言语法来作对比)
http://blog.csdn.net/kwiner/archive/2009/04/05/4049640.aspx
?
1 楼 hu_hu1221 2012-02-15 IFS换行这个真变态,我用\n试了不成还以为是其他哪儿写错了呢!