文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Shell Programming FAQ(为什么shell脚本无法运行?)

Shell Programming FAQ(为什么shell脚本无法运行?)

时间:2006-12-14  来源:euler


上个月在CU(ChinaUnix)的论坛上看到有人贴出帖子说在shell下面运行不了if...else语句,而且还大骂linux说linux连最简单的事情都做不了。这几天写了几个脚本处理日常工作,也遇到一些问题,也许CU论坛上骂linux的这位仁兄,也是因为遇到类似的问题,所以才会骂linux。总结一下常见的问题如下,其中涵盖有赋值表达式,逻辑运算符(if),命令替换,环境变量设置(export)等,希望对初学shell编程的朋友有所帮助。有任何问题可在论坛上联系我,或者email到david.ullua at gmail。 -- David Euler,2006/12/14

Q1.我在shell脚本中加入如下:i = 1 ,运行的时候脚本报错,难道shell下面不可以对变量赋值吗?
A1.赋值运算符前后不可以有等号=。试试i=1

Q2.我再shell上运行i=1;i++报错"-bash: i++: command not found", 运行i=1;i=i+1;echo $i 结果不是2,而是"i+1", shell如何支持算术运算呢?
A2.i++的表达方法在shell中是不被支持的;表达式的右边引用变量,变量名前面要加$;表达式求值时表达式要用$((expression))的形式把表达式expression括起来。所以正确的是: i=1;i=$(($i+1));echo $i

Q3.我需要设置JAVA_HOME变量,于是按照一些教程,使用下面命令,为什么会报错?是不是shell不兼容?
    export JAVA_HOME = /working/jdk1.5.0_09
A3.试试export JAVA_HOME=/working/jdk1.5.0_09, 两个有什么区别呢,前面的=前后多了1个空格,shell下面=作为赋值运算符时前后不可有空格。

Q4.我按照教科书上说的使用命令替换,把date命令的运行结果保存到DATE变量,DATE='date';echo $DATE; 可运行结果是:date, 而不适date命令的结果。
A4.命令替换是要用后引号(`,Shift+~)而不是单引号把命令括起来。 运行DATE=`date`;echo $DATE; 试试

Q5.我运行if 语句来测试逻辑表达式:
    if[ "$SHELL"="/bin/bash" ]; then echo "bash";fi
中括号[]的前后都用了空格,为什么还会报错呢?
A5.上面的shell句子有两处语法错误:if后面也需要有空格;等于号"="作为逻辑运算符时,前面和后面都必须要有空格,否则会被shell作为赋值表达式,linux下面赋值运算符与逻辑运算符等于都用"="表示,区别在于前后有无空格。正确的如下:if [ "$SHELL" = "/bin/bash" ]; then echo "bash";fi

相关阅读 更多 +
排行榜 更多 +
像素太空杀

像素太空杀

飞行射击 下载
忍者手势

忍者手势

飞行射击 下载
勇士X地下城大冒险

勇士X地下城大冒险

角色扮演 下载