利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

Yourcommandsgohere

chmod+xfilename.sh

下面我们从经典的“helloworld”入手,看一看最简单的Shell脚本的模样。

a="helloworld"

variable_name=variable_value

就不会输出“Hi,helloworlds”,而是输出“Hi,”。这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是:

关于变量,还需要知道几个与其相关的Linux命令。

!/#argumentsPrintif-lt;
<<<>files
rendot.gif\"EXAMPLE:.in*9'HTM.
1213OLD<SPANstyle=""color:#000000'">=
"NEW<SPANstyle=""color:#000000'">=

"#17command


filesfor*doif<SPANstyle=""color:#000000'">[-f"23`"<SPANstyle=""color:#000000'">$file"<SPANstyle=""color:#000000'">s/${OLD}/${NEW}/g24[-f"25"27"mv"<SPANstyle=""color:#000000'">"fi
31if…;then

fi

[$a-lt3]判断$a的值是否小于3,同样-gt和-le分别表示大于或小于等于

["$a"="$b"]判断$a和$b的取值是否相等

$#表示包括$0在内的命令行参数的个数。在Shell中,脚本名称本身是$0,剩下的依次是$0、$1、$2…、${10}、${11},等等。$*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表。

十四、十五两句是赋值语句,分别将第一和第二参数赋值给变量OLD和NEW。紧接下来的两句是注释,注释下面的两条shift的作用是将参数列表中的第一个和第二个参数删除,后面的参数依次变为新的第一和第二参数,注意参数列表原本也不包括$0。

通过这个例子我们明白了ShellScript的编写规则,但还有几件事情需要讲述一下。

pattern1)

…;;

esac

<<开始,后跟一个字符串,在here文档结束的时候,这个字符串同样也要出现,表示文档结束。在本例中,here文档被输出给cat命令,也即将文档内容打印在屏幕上,起到显示帮助信息的作用。<><开始,后跟一个字符串,在here文档结束的时候,这个字符串同样也要出现,表示文档结束。在本例中,here文档被输出给cat命令,也即将文档内容打印在屏幕上,起到显示帮助信息的作用。<>


do

ehco"$COPIES";;

esac

getoptsoption_stringvariable

<Pstyle=""text-indent:2em'">option_string中包含一串单字符选项,若getopts在命令行参数中发现了连字符,那么它会将连字符之后的字符与option_string进行比较,若匹配成功,则把变量variable的值设为该选项,若无匹配,则把变量的值设为?。有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号后,会读取该值,然后将该值放入特殊变量OPTARG中。这个命令比较复杂,如有需要,读者可以详细参阅Shell编写的相关资料。

selectvarin…;do

例如,下面这段程序的输出是:

selectvarin"a""b""c";do

echo$var

1)a

第三,ShellScript中也可以使用自定义的函数,其语法形式如下:

第四,我们也可以在Shell下调试ShellScript脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。

<Pstyle=""text-indent:2em'">sh?xfilename.sh<Pstyle=""text-indent:2em'">这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。