分类: LINUX
2009-05-31 15:48:50
学了那么多语言,没见过这么垃圾的语法.
这就是linux下的脚本语言--bash.
一个脚本语言, 语法这么苛刻, 让人抓狂.
举例如下:
1:
定义变量时, =号的两边不可以留空格.
eg:
gender=femal------------right
gender =femal-----------wrong
gender= femal-----------wrong
2
条件测试语句 [ 符号的两边都要留空格.
eg:
if [ $gender = femal ]; then-------right.
echo "you are femal";
fi
if[ $gender...-----------------------wrong
if [$gender...----------------------wrong.
3
条件测试的内容,如果是字符串比较的话, 比较符号两边要留空格!
eg:
if [ $gender = femal ]; then-------right.
if [ $gender= femal ]; then--------wrong.
if [ $gender=femal ]; then---------wrong.
4
如果if 和 then写在同一行, 那么,注意, then的前面要跟上 ; 号.
如果 then 换行写, 那么也没问题.
eg:
if [ $gender = femal ]; then-------right.
if [ $gender = femal ]
then-------------------------------right.
if [ $gender = femal ] then-------wrong. then前面少了 ; 号.
提示出错信息:
syntax error near unexpected token then
同理,还有很多出错信息 比如
syntax error near unexpected token fi 等都是这样引起的.
5
if 后面一定要跟上 then. 同理
elif 后面一定要跟上 then.
不然提示出错信息:
syntax error near unexpected token else
明明从书上抄下来的程序,死活执行不过去, 气死人了. 更气人的时, 净没有一本书提示 [ 符号的两边要留空格. 呜呼哀哉.以上是我的总结,希望对bash入门的哥们有用.
chinaunix网友2009-06-02 10:28:49
呵呵 真好笑。。 gender=femal------------right gender =femal-----------wrong gender= femal-----------wrong
chinaunix网友2009-06-02 09:45:50
难道你不知道 [ 本身就是一个命令吗? 你到/usr/bin或者/bin下面看看好了 既然[是一个命令,你就不难理解为什么要用空格分隔了(命令的参数是以空格分开的) 你应该自己总结一下那些是bash内置的东西,比如if then; else之类的属于bash内置的 而[, test之类其实都是外置的命令,bash脚本只不过是调用了这些外置的命令而已(程序执行到这里的时候,会fork一个子shell,在子shell里面执行这些命令,然后将$?作为语句执行的结果
chunchengfh2009-06-01 09:45:49
bash的语法是由它的交互式使用方式决定的;如命令"cat a b", a于b之间的一个空格和多个空格是相同的,但是没有空格就不一样了; 此外,我估计bash对于'[' ']'之类的字符不像C语言一样当作关键字看待,因此'[' 和 ']' 两边都需要由空格隔开。 否则的话,命令“ echo hello] " 就要报错了 (: