1.函数形式
function_name ()
{
}
示例:
#!/bin/sh
foo()
{
}
echo “script starting”
foo
echo “script ended”
exit 0
注意:
(1)函数先定义后使用(放在最前面即可)。
(2)调用函数时,脚本程序的位置参数($*、$@、$#、$1、$2等)会被替换为函数的参数。当函数执行完毕后,这些参数会恢复为它们原先的值。
(3)函数中可以用return直接返回数字值,如果要返回字符串需要其他办法。主要办法有:将字符串存储到外部变量;函数体内echo字符串,函数外用result=”$(function)”形式捕获。
(4)如果return命令没有指定一个返回值,那么函数返回的就是执行的最后一条命令的退出码。
2.命令
(1)break:跳出一层循环。后面可以加数字表示跳出几层循环。
(2)冒号(:):一个空命令。也被用于简化逻辑条件,相当于一个true,但执行速度比true快。while true等同于while:。
(3)continue:使for,while或者until循环跳到下一次循环继续执行。
(4).命令:通常情况下,shell脚本程序会在一个新建的环境中执行,所以脚本程序对环境变量所做的任何修改都会丢失。而点命令让脚本程序就在本shell中执行。
示例:. ./test(两个点号之间有空格)
注意:第一个.是点命令,第二个是路径中的当前参数。
(5)echo命令:输出结尾带有换行符的字符串。
去掉换行符的解决方法:
echo –n “string to output” (linux和bash上不错的选择)或者
echo –e “string to output\c”
第二种方法echo –e确保启用了反斜线转义字符(如\c代表去掉换行符)
另外tr命令也可以删除换行符。
(6)eval:对参数进行求值
foo=10
x=foo
eval y=’$’$x
echo $y
输出结果为10,如果不加eval输出结果为foo。
eval y=’$’$x这句话$x前面的'$'有何作用,没有这个'$'怎么就得不到正确结果?
eval可读取一连串的参数,然后再依参数本身的特性来执行,参数不限数目,彼此之间用分号分开。那么evaly='$'$x
eval z='$'$x'$'$y也是可以的
(7)exec命令
1)用来将当前shell替换为一个不同的程序
例如:exec wall “Thanks for you.”
脚本中的这个命令会用wall命令替换当前的shell。
2)用来修改当前文件描述符
例如:exec 3< afile
这使得文件描述符3被打开以便从文件afile中读取数据。
(8)exti n命令
使得脚本程序以退出码n结束运行。
例如:[ -f .profile ] && exit 0 || exit 1
(9)export命令
export命令将作为它参数的变量导出到子shell中,并使之在子shell中有效。一般在shell中创建的变量在这个shell调用的下级(子)shell中是不可用的。
解释:如果有a和b两个shell程序,在a中定义了两个变量(其中一个变量前加了export),a的末尾调用了b,b的作用是打印出两个变量,那么只有前面加了export的变量可以被打印出来。
注:set –a 或 set –allexport命令将会到处它之后声明的所有变量。
(10)expr命令
expr命令将它的参数当做一个表达式来求值。
例如:x=’expr $x + 1’
反引号使得x取值为后面整个执行结果的值,也可以被替换为$(expr $x + 1)这种形式。
(11)printf命令
使用格式:printf “format string” parameter1 parameter2……
注:shell中所有的运算都是按照整数运算来进行的,不支持浮点数。
例如:# printf “%s %d\t%s” “Hi There” 15 people
输出:Hi There 15 people
注意:Hi There必须用双引号引起来作为一个参数,因为中间包含空格。
(12)return命令
return命令的作用是使函数返回,return命令只能返回一个数值参数,若没有指定参数,return将返回最后一条命令的退出码。
(13)set命令
set命令的作用是为shell设置参数变量,例如$1, $2等。
例如:set foo bar
set命令还可以用来控制shell的执行方式。其中最常用的命令格式是set–x,它让一个脚本程序跟踪显示它当前执行的命令。
(14)shift命令
shift不加数字则表示所有变量左移一个($2变为$1,$3变为$2,但是$0保持不变,$1丢弃);加数字表示左移的个数。$*,$@,$#等变量则会自动根据现有变量进行调整。
(15)trap命令
trap命令用于指定在接收到信号后将要采取的行动,常用的地方是在脚本程序被中断时完成清理工作。在命令符提示下输入trap–l可以查看信号的编号以及其关联的名称(使用信号名时需要省略SIG前缀)。
trap有两个参数,第一个是接收到指定信号时将要采取的行动,第二个是要处理的信号名。如果想重置某个信号的处理方式到其默认值,只需要trap– signal即可。如果忽略某个信号就使用trap ‘’ signal。
(16)unset命令
从环境中删除变量或者函数,但是不能删除shell定义的只读变量。
例如:foo=“Hello”;unset foo