1、shell基本
2、父shell在执行shell命令时,通常是创建子shell,继承父shell环境,执行命令,退出,相关环境销毁;父shell得到子shell的退出状态。
通过命令.或source来使其有当前环境中执行,而不创建子进程。
3、通配符与运算符
4、转义
单引号
硬转义,单引号内的字符就是其字面意义
双引号
会进行变量替换
反单引号----$()
会把命令执行的输出,替换;相当于函数调用,嵌套的变量会一直解析
****/home/edwardlewis/altraman # echo 'date'
date
****:/home/edwardlewis/altraman # echo "date"
date
****:/home/edwardlewis/altraman # echo `date`
Fri Aug 19 07:00:02 CST 2011
5、变量
变量赋值: name=value
变量引用: $name
合法的变量名: 字母、下划线、数字
=号两边不容许有空格(否则可能解析成命令,默认情况下IFS为空格)
$name是${name}的缩写
$? | 上一命令的退出状态 |
$! | 最后一个后台进程的pid |
$0 | 当前进程的程序名称 |
$$ | 当前进程的进程id号 |
$n | n为1,2,…n脚本或程序的参数 |
$@ | 脚本或程序的所有参数 |
$# | 脚本或程序的参数个数 |
$UID | 当前用户的UID |
$LOGNAME | 当前用户的用户名 |
$HOSTNAME | 主机名 |
$RANDOM | 1-32767之间随机数 |
$SECONDS | 以消耗的秒数 |
$PWD | 当前工作目录 |
$OLDPWD | 最后一次cd前的工作目录 |
~ | HOME |
环境变量env是bash或用户预设值的变量,可以被继承并直接使用;当前变量set。local定义局部变量。
a.永久设置
export name=value
./foobar.sh
b.只对一个命令设置
name=value
./foobar.sh
6、结构语句
1)if
[[ ]] 表达式,测试字符串,文件
(( )) 表达式,测试数字计算结果
命令的退出码($?) 为0时,代表true,执行成功
* 匹配零个或多个任意字符
?匹配一个任意字符
[] 字符组,可以匹配字符组中的一个字符
A|B ,A 或者B
示例程序
i=1;
while (( i <= 10 ));
do
((i++))
done
echo i:${i}
for var in *.html
do
if [[ -h $var ]];
then "Yes"
fi
done
7、函数
调用:需要先定义后调用,名字+参数(和调用一个命令完全一致)
参数:$1,$2,……$#,$@
返回值:标准输出
退出状态:return $num;或最后一个命令的退出状态(尽量在$?中返回失败码)
注意:函数必须先定义,后调用(local可以定义局部变量)
8、块重定向
如if,while语句块,{}
块中共享同一文件描述符(统一重定向)
除非块中自行打开关闭
{
echo msg1
echo msg2
} >> "$log"
9、简要说明echo 和print 有何区别?
① print有返回值,成功就返回1,失败就0,而echo没有返回值
② echo函数中,可以同时输出多个字符串,而在print函数中则只可以同时输出一个字符串。
int print ( string arg)
Outputs arg. Returns 1, always.
void echo ( string arg1 [, string argn...])
Outputs all parameters.
10、其他
ps -ef | grep 'http*' | grep -v 'grep' | wc -l
包含正则表达式尽量用单引号,防止转义。
参考:
【1】 http://www.cnblogs.com/mydomain/archive/2010/09/24/1833799.html
【2】 http://www.cnblogs.com/mydomain/archive/2010/09/24/1833910.html