三 shell脚本语法
 
 1.变量 
 
 (1)用户自定义变量 
   变量名=内容
 
   特点:
   <1>没有数据类型
   <2>赋值两边不能有空格
   <3>所有的赋值对shell变量都解释为字符串 
 
 (2)环境变量 
    PATH 是shell默认的搜索路径
    HOME 记录的是当前用户的用户主目录 
 
 (3)位置变量 
    
    $0   脚本的名字 
    
    $1   给脚本传递的第一个参数 
    $2   给脚本传递的第二个参数
    ...
    $9 
 
    $@  获取给脚本传递的所有参数
    $*  获取给脚本传递的所有参数 
 
    $#  获取给脚本传递的参数个数 
 
 注意:
 在shell中引用一个变量的内容时候,需要加"$",例如:$PATH 
 VAR1=$PATH
 VAR2=$HOME
 
 VAR3=$VAR1 
 VAR1=$VAR2 
 VAR2=$VAR3
 
 echo $VAR1 
 echo $VAR2
 
 2.输入和输出 
 
 (1)输入 
   read  var1  var2  var3
   
   将用户输入的第一个单词赋值给var1,第二个单词赋值给var2,剩下的单词赋值给var3 
 
 (2)输出 
    echo "hello word"     输出后自动换行
    echo -n "hello word"  取消输出后自动换行 
 
 
 3.数据的计算 
 
 + , - , \* , / , %
 
 运算的命令:expr 
 
 
 
 4.判断的对象 
 
 (1)字符串
    = , != , -z , -n
 
 (2)数字
    eq , ne ,gt ,lt , ge ,le
 
 (3)文件属性
    -d , -f , -r , -w ,-x
 
 5.控制语句
 
 (1)判断语句 
   if [ 判断的对象 ]
   then
     命令 
   fi
 
  -a  且的关系
  -o  或的关系
 
  if [ $data -ge 256 -a $data -lt 512 ]
  then
     echo $data  
  fi 
 
  -----------------------------------------------------------------
  输出重定向:将输出的结果,输出到指定的文件中,而不是在终端上显示
  echo "string"  > log.txt 先清空log.txt文件,然后写入字符串
  echo "string" >> log.txt 以追加的方式在log.txt文件尾部写入字符串
  -----------------------------------------------------------------
     
   if [ 判断的对象 ]
   then
     命令 
   else
     命令
   fi
 
   if [ 判断的对象 ]
   then 
     命令 
   elif [判断的对象]
   then 
     命令 
   
    ...
   elif [判断的对象]
   then 
     命令 
 
   fi 
   
 练习:
 输入一个成绩,判断成绩的等级
 [80-100] A
 [60-80 ) B 
 [0-60  ) C 
 
 如果成绩非法不是[0-100],则提示用户输入的成绩是非法的成绩
 
 (2)case 语句
 
 case 变量的内容 in
 匹配项1)
     命令 
     ;;
 
 匹配项2)
     命令 
     ;;
     
     *)
     命令 
     ;;
 esac    
 
 练习:
 输入一个成绩,判断成绩的等级
 [80-100] A
 [60-80 ) B 
 [0-60  ) C 
 
 如果成绩非法不是[0-100],则提示用户输入的成绩是非法的成绩
 
 
 (3)循环
 
 asd f ghj
 
 for  变量  in  单词表 
 do 
     命令 
 done
 
 循环的次数由单词表中单词的个数来决定,变量每次从单词表取一个单词,然后执行循环体,直到将所有的单词全部取完 
 
 
 for 变量 
 do 
     命令 
 done
 
 如果 "in 单词表"省略,此时变量从位置参数中取单词
 (3)输出拷贝的文件和子目录的个数
 
 ------------------------------------------------------------------------
 while [表达式]
 do 
     命令 
 done 
 
 只有在表达式为真的时候,才执行命令,如果为假,循环结束 
 ------------------------------------------------------------------------
 break     2 
 continue  2
 
 二 source 命令
 
 1.bash  test.sh 或 ./test.sh 它是创建一个子进程(shell 进程),子进程来解释test.sh这个脚本
   脚本运行结束后,不影响当前的shell(终端上的bash)
 
 2.source test.sh  或 .  test.sh 它是当前终端的shell来解释脚本,脚本运行结束后会影响到当前的shell
 
 三 shell 函数 
 
 1.函数定义 
 
 function  函数名()
 {
     命令;
     ...
     return 数字值
 }
 
 2.函数调用
 
 value=`函数名  参数1  参数2 ...`
 value的值这个函数内部通过echo输出的字符串 
 
 函数名 参数1 参数2 ...
 通过 $? 获得函数的返回值
 
 问题:在shell函数内部如何获得传递的参数呢?
 回答:通过位置变量($1 $2 $3 ...)来获得传递的参数
 
 注意:在shell中变量默认是全局的,如果只想变量在函数内部有效,需要用local修饰变量
 while true
 do 
     
 done
  
原文:http://blog.51cto.com/13375232/2054036