shell脚本的本质
  —— shell脚本语言是解释型语言
  —— shell脚本的本质
         shell命令的有序集合
         
  shell编程的基本过程
     基本过程分为三步:
     1、建立shell文件(以.sh结尾)
     例:
         vi shell1.sh
         date
     2、赋予shell文件执行权限
         用chmod命令修改权限
             chmod 740 shell1.sh
     3、执行shell文件
         直接在命令行上调用shell程序
         ./shell1.sh
         
  shell变量
  ——shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、
  浮点型),将任何赋给变量的值都解释为一串字符
     
     用户自定义变量
     —— 在shell编程中通常使用全大写变量,方便识别
         COUNT=1
     —— 变量的调用:在变量前加$
         echo $COUNT
     —— Linux Shell/bash从右向左赋值
         Y=y
         X=$Y
         echo $X
         y
     —— 使用unset命令删除变量的赋值
         Z=hello
         echo $Z
         hello
         unset Z
         echo $Z
         没有值
     
     位置变量
     —— $0    与键入的命令行一样,包含脚本文件名
     —— $#    包含命令行参数的个数
     —— $@    包含所有命令行参数
     —— $?    包含前一个命令的退出状态
     —— $*    包含所有命令行参数
     —— $$    包含正在执行进程的ID号
     
     环境变量
     可通过export或env来查看
     常见环境变量
         HOME:/ect/passwd文件中列出的用户主目录
         IFS:Internal File Separator,默认为空格,tab及换行符
         PATH:shell搜索路径
         PS1,PS2:默认提示符($)及换行提示符(>)
         TERM:终端类型,常用的有vt100,ansi,vt200,xterm等 shell功能性语句
     shell程序由零或多条shell语句构成。shell语句包括三类:说明性语句、
     功能性语句和结构性语句。
     —— 说明性语句:
         以#号开始到结束,不被解释执行
         #!/bin/bash这句话告诉OS用那种类型的shell来解释执行该程序
     —— 功能性语句:
         任意的shell命令、用户程序或其他shell程序
     —— 结构性语句:
     条件测试语句、多路分支语句、循环语句、循环控制语句等。 
     
  read语句
  —— read var
     echo $var
     输入什么输出什么
     
  expr命令(运算符两边要有空格)
  —— 算术运算命令包括+、-、\*、/、%
     expr 12 + 5 \* 3
     27
     
  test语句(0为真)
  —— test语句可测试三种对象:
         字符串    整数    文件属性
  —— 每种测试对象都有若干测试操作符
  —— 例如:
         test "$answer" = "yes"
         变量answer的值是否为字符串yes
         test -d tmp
         测试tmp是否为一个目录名
         test $num -eq 18
         变量num的值是否为整数18
     
     字符串测试
         s1 = s2 测试两个字符串的内容是否完全一样
         s1 != s2 测试两个字符串的内容是否有差异
         -z s1  测试s1字符串的长度是否为0
         -n s1  测试s1字符串的长度是否不为0
     整数测试
         a -eq b 测试a与b是否相等
         a -ne b 测试a与b是否不相等
         a -gt b 测试a是否大于b
         a -ge b 测试a是否大于等于b
         a -lt b 测试a是否小于b
         a -le b 测试a是否小于等于b
     文件类型测试
     -d name    测试name是否为一个目录
     -e name 测试一个文件是否存在
     -f name 测试name是否为普通文件
     -L name 测试name是否为符号链接
     -r name 测试name文件是否存在且为可读
     -w name 测试name文件是否存在且为可写
     -x name 测试name文件是否存在且为可执行
     -s name 测试name文件是否存在且长度不为0
     f1 -nt f2 测试文件f1是否比文件f2更新
     f1 -ot f2 测试文件f1是否比文件f2更旧
     
  条件语句(0为真)
  if...then...fi
  语法结构
     if 表达式
             then    命令表
     fi
     ——如果表达式为真,则执行命令表中的命令;否则退出if语句,执行
     
 fi后面的语句
 —— if和fi是条件语句的语句括号,必须成对使用
 —— 命令表中的命令可以是一条,也可以是若干条
         例:if [ -f $1 ]
             then
                 echo "File $1 exists"
             fi
             
     if...then...else...fi
     语法结构:
         if    表达式
         then    命令表1
         else    命令表2
     fi
  
  多路分支语句
  case...esac
     多路分支语句case用于多重条件测试,语法结构清晰自然,其语法为:
     case    字符串变量    in
         模式1)
             命令表1
             ;;
         模式2|模式3)
             命令表2
             ;;
         ......
         模式n)
             命令表n
             ;;
     esac
     
  循环语句for
  当循环次数已知或确定时,使用for循环语句来执行一条或一组命令。
  格式为:
  for    变量名    in    单词表
         do
             命令表
         done
  变量依次取单词表中的各个单词,每取一次单词,就执行一次循环体中的
  命令,循环次数由单词表中的单词数确定。命令表中的命令可以时一条,
  也可以是由分号或换行符分开的多条。
  
  循环语句while
  语法结构:
         while 命令或表达式
             do 
                 命令表
             done