利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:
Yourcommandsgohere
chmod+xfilename.sh
下面我们从经典的“helloworld”入手,看一看最简单的Shell脚本的模样。
a="helloworld"
variable_name=variable_value
就不会输出“Hi,helloworlds”,而是输出“Hi,”。这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是:
关于变量,还需要知道几个与其相关的Linux命令。
!/#argumentsPrintif-lt;
<<<>files
renEXAMPLE:.in*9'HTM.
1213OLD<SPANstyle=""color:#000000'">="NEW<SPANstyle=""color:#000000'">=
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,它并不执行脚本,只是返回所有的语法错误。