shell入门篇

    脚本语言通常是解释型。由解析器读入代码,将其转换成内部形式,再执行。解释器就是一般的编译型程序。
    优点:运行在较高的级别,能轻易的处理,文本与目录之类的对象。
    缺点:效率上不如编译型语言。(从感观上说脚本已经够快了,所以基本上这个问题可以让人理解或者忽略)
    shell是经过posix标准化过的,能 运行在绝大多数的unix与类unix上,gun/linux
    满足unix五大原则:
     免交互    一切设备就是文件,一切配置是文本;
    shell脚本基于:简单,可移植,开发简易。
    作用:常用于系统管理。
    入门
    #!(尽量不超过64个字节)文件开头的位置是这个字符,则内核会扫描该其于部分
    看是否存在解析器的完整路径。
    你肯定要知道解析器的完整路径。
   
    交互式shell命令
    command 选项 参数
      -短选项 //有的不加-
    --长选项 //一般gnu选项,看命令而定
    ;分割同一行的多条命令。用于运行多条命令。
    使用&而不是分号,则是在后台运行,则shell不用等命令结束,就可以继续下一条命令。
    Shell识别的三种命令:
   1:内建命令。Shell自身运, cd ,read 将用户或文件的输入传递给shell变量。另一种是位效率,test.还有i/o命令,echo printf
    2shell函数。功能健全的代码,以及shell语言写成。可以想命令那样运行。
    3:外部命令是shell的副本所执行的命令。
       过程。a,建一个进程shell副本。b,在进程里,path变量内寻找所列出的目录中,寻找特定的命令。c,找到该命令,运行shell程序并运行。d,程序完成之后,最初的shell会读取终端的下一条命令。
    shell---->shell——>命令(进程)---------->shell
 
    shell变量
    shell变量开头字母或者是下划线,长度可以很长
    变量赋值
    变量名=字符,中间不能有任何空格。
    引用变量值加
'$'(变量值可以是null)
echo $变量
   echo printf  
 
    I/O重定向。
lrwxrwxrwx. 1 root root 15  4月 28 2012 /dev/stderr -> /proc/self/fd/2  
lrwxrwxrwx. 1 root root 15  4月 28 2012 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15  4月 28 2012 /dev/stdout -> /proc/self/fd/1
    > 改变标准输出 // cat /etc/passwd >passwd.txt  
    
<
改变标准输入  // cat  > passwd.txt
  
>>
付加到文件 // echo "this is passwd files" >> passwd.txt
     A < B > C  //这种格式非常有用。
    for i in 1.txt
    do
         tr -d '\t' <$i >2.txt
    done
   
     管道
|
    program1 | program2 管道执行的速度比零时文件快上十倍。弥补了重定向的不足。从定向需要零时文件,肯定拖慢脚本速度。但是在做系统日志之类的脚本时又不得不用。
例如:
grep '\<sendmail['  /var/log/maillog |tail -n 10000 /var/log/maillog > /tmp/maillog 

 构造管道的时,应该把各阶段数据变少。就是慢慢流。
使用,sort之前先用grep找出相关行,可以sort少做点事。还有先sort -rn | uniq -c   排序。
 
特殊文件。
/dev/null 传到这个文件的数据会被系统丢掉。黑洞,一般脚本我们不想查看输出过程只要结果怎么办,那/dev/null就派上用场了。例如
if grep student /etc/passwd >/dev/null 2>&1
then
   echo "the system has  student "
fi
如果系统有student用户则输入有用户,而不要把passwd匹配的那行显示出来,安全。
/dev/tty
等待终端输入。
 
$echo $PATH  //查看PATH 是否有”:“存在
空项目移植上有点问题。:在开头表示当前目录,在最后,查找最后,在中间,当前居中。
 
Positional parameters位置参数,也可以是函数参数。个参数用整数来命名。
$1----$9 超过${10}
    简单的跟踪,用来除错的。Set -x ,set +x取消跟踪。
或者用echo 输出来debug。
   
国际化与本地化 i18n l10n
locale语言文化生效。
要明确Locale 对程序的影响.