Shell函数
- 同大多数高级语言一样,在shell脚本中可以定义并调用函数
- 格式:
-
[function] 函数名() { 命令表 }
- 函数必须先定义,后调用。调用时,直接使用函数名,不用带括号,就像使用命令一样,调用函数不会创建新的进程,而是在本Shell脚本所属的进程内执行
- 用local指定函数内的局部变量
- 利用位置参数向函数传递数据,可以利用return [n]在任意位置退出函数,n是退出函数时的退出状态,未指定则退出状态去最后一个命令的退出状态
-
#! /bin/bash # function.sh output() { echo "--------------" echo $a $b $c echo $1 $2 $3 echo "--------------" } input() { local y echo "Please input value of x and y" read x y } a="Working directory" b="is" c="pwd" # 调用 output you are welcome x= input echo "value of x is $x, value of y is $y"
Shell内部命令
- shell程序本身定义了一些命令,这些命令在本shell进程内执行,例如:.,source,break [n],continue [n],cd,echo,type,exit [n],export,pwd,read,return [n],set,shift [n],test,bg,fg,kill等
- eval命令:命令首先扫描参数,所有参数被读取并且连接成一个字符串,然后eval再将该字符串当成命令来执行
- 格式:eval [参数...]
- exec命令:在本shell执行由参数arg指定的命令,该命令将替代本shell进程,也就是执行命令后命令行Shell将不复存在,命令退出整个shell就退出了,就是类似常见的fork+exec组合的效果
- 格式:exec [arg...]
- readonly命令:该命令标记给定的name(变量名)是只读的,如果没有给出参数,则列出只读变量的清单,该命令等价于declare -r标记变量
- 格式:readonly [name...]
- trap命令:trap命令可用来设定接收某个信号所完成的动作,忽略某个信号的影响或者恢复信息产生时系统预设的动作
- trap命令按信号码顺序执行,允许的最高信号码时16
- 格式:trap [arg] [n] ...
- set命令:功能主要有三个,显示已定义的全部变量,设置位置参数的值,设置shell脚本的执行选项(标志项)。
- 设置执行选项标志的一般格式是:
-
set -标志字符 # 或者 set +标志字符
- -表示打开该标志项,+表示关闭该标志项
- 常用标志项:
- a:对被修改或被创建的变量自动标记,表明要被(export)的后继命令环境中
- e:当一个简单命令以非零状态终止时,将立即退出Shell,如果执行失败的命令时while或者until循环,if语句,由&&或||连接的命令行的一部分,则不退出Shell
- f:禁止路径名扩展,即禁用文件通配符
- h:打开命令行历史
- n:读命令但不执行,用来检查脚本的语法
- x:使Shell对以后各命令行在完成参数替换且执行该行命令之前,先显示该行的内容。在重显命令行的行首由一个“+”号,随后才是执行该命令行的结果
- v:使Shell对以后个命令行都按原样现在屏幕上显示出来,然后才对命令予以执行,并显示相应结果
- wait命令:等待进程ID为n的进程终止,并且报告终止状态,如果没有指定n,则等待所有当前活动的子进程终止,wait命令的返回码始终是0
- 格式:wait [n]
- eval命令:命令首先扫描参数,所有参数被读取并且连接成一个字符串,然后eval再将该字符串当成命令来执行