shell编程笔记

2010年11月6日 · 14 years ago

今天终于写完了shell编程的作业,作业本身很简单但是在shell里面写程序却是第一次,所以难免碰到这样那样的问题。
趁现在还记得些东西,写下来当笔记用:
1)sh命令执行.sh文件和用./执行.sh文件的区别
我是在ubuntu下写的shell文件,所以如果使用sh来执行文件,那么将调用ubuntu默认的shell来执行,这就有一个问题了,ubuntu默认的shell貌似并不是bash而是dash,而这些shell是有区别的,包括其自带的函数等玩意儿,所以我的sh文件里面写了一个if语句来匹配正则表达式,但是用sh执行则不可用用./执行则没问题。这是因为默认的shell不同的问题>造成的。
所以我在ubuntu下面写shell程序也用./来调用以免产生奇奇怪怪的问题。
2)正则表达式匹配
在if语句中匹配参数为数字的语法为:
if [[ "$x" =~ [0-9]+ ]]
这个[[]]的东西在ubuntu默认的shell下面就不能识别了,会报错,而如果使用./来执行就不会有问题。
3)#!/bin/bash这一句
我在文件头里面加了这样一句
#!/bin/bash
这个东西一开始我以为是注释语句但其实是错的,#!是一个特殊符号,其后面的路径表示该shell的根路径,表示使用该shell来执行一个子shell
所以使用./来执行shell的话系统就会默认找到该路径下的shell然后生成一个子shell来执行你的文件,所以在ubuntu这种不以bash为默认的shell的情况下,这句话是必须的。
4)变量的自增
shell编程里面变量的自增不同于C/C++里面的"++"
而实际上使用++这种东西也并不是什么值得推荐的做法,这样会降低代码的可读性,在某些复杂的语句中会产生岐义令程序员感到困惑。
在shell中变量的自增是这样写的:
VAR=0
VAR=`expr $VAR + 1`
至于为什么我还没很搞懂,尤其是反单引号的使用。额。。。好吧我承认我就是随手应付了一下作业而已。反正以后还会有更复杂的作业,还会有更多笔记的。。