Chapter2:
1、Shell作为用户与Unix系统的操作的接口,允许用户输入需要执行的命令,同时掩盖了系统内核的操作细节,从这个层面上看,它本身就算得上Unix系统的一门高级语言;
2、众多shell大都是由Bourne Shell演变而来,bash(Bourne again Shell)是其中的主角。在许多Linux系统中,/bin/sh就是指向bash的一个链接。
3、0代表标准输入,1代表标准输出,2代表标准出错信息;输出重定向:符号 > / >> 可以实现将输出重定向到某个文件,分别是以覆盖和追加的方式;#kill -HUP 1234 > killout.txt 2>killerr.txt
4、管道:ps -xo comm | sort | uniq | grep -v sh | more :该命令先用sort把ps命令输出的进程按字母表排列好,然后利用uniq删除其中重复的,再用grep删除其中名为sh的进程,最后一页一页显示在屏幕上。
5、编写脚本程序:以 #!bin/sh 开头。运行方式#bin/sh first.sh.
6、shell脚本中变量区分大小写,可以为变量赋任意值,"$a"表示变量a的值,'$a'表示该字符串,read可以用来读取用户输入变量值。
7、shell脚本中条件判断利用test或[]命令。
8、控制结构:if和elif(在第一个if表达式不成立时,再次检查某个表达式);for(循环值通常都是字符串)例子:for file in $(ls f*.sh); do statement done;while 循环中递增实现:foo=$(($foo+1));until;case:利用;;来对各模板进行隔离区分。
9、逻辑运算:AND&&;OR||;
10、可以在一把一个大型脚本划分成若干小型脚本,在一个脚本文件中去执行另一个脚本,但是这样会有几个问题:性能损失,执行结果回传成问题,小脚本过多;因此考虑利用函数;Shell像Pascal一样在调用一个函数前必须对其进行申明;可以利用return传回值,同时,也可以采用对全局变量赋值或者输出的方式。
11、内置eval命令:变量求值命令,类似于外置$;
12、内置export命令用于把其后的变量令为该shell的环境变量;
13、内置expr命令用于进行表达式求值运算;
14、内置set命令为Shell置参数:#set $(date);
15、内置shift命令将参数表错位:$2->$1,$3->$2 ... 可以利用它扫描整个参数表;
16、内置trap命令用于对信号作出反映,trap command signal ,主要放在要保护脚本的前面。
17、参数传递中,取参数的值采用$(i),而非$i;参数扩展中,${param : -default}表示如果param为空,则缺省为default的值。
18、即是文档用于向命令馈入操作,通常是这样的形式:<< !funny! statement !funny!
19、Shell的调试:sh -n / -v / -x <script> ,他们分别的意义是:-n只查错,不执行;-v在命令之前回显它们;-x在处理完命令之后回显它们;此外,可以通过陷落EXIT信号查看退出时状态,具体做法是在脚本开始放上语句:trap 'echo Exiting: critical variable = $critical_variable ' EXIT
浙公网安备 33010602011771号