#!/bin/bash
#脚本用途:
#创建日期:
#Written by someone
正文......

在shell中,所有没有声明的变量都默认是呈现字符串形式,所以var=5*7;$var就成为字符串形式"5*7",而不会进行任何算术运算。声明变量使用declare指令。
delcare [-afirx] var=...
-a 定义为数组
-f 定义为函数
-i 定义为整数
-r 定义为只读 
-x 定义为通过环境输出变量

read name
read的功能是将用户在键盘上输入的内容放到变量name中。
read name < file的形式通过重定向改变了输入源为file。

脚本的参数代号:
$0 脚本的文件名
$1 第一个附加参数
$2 第二个附加参数
$3 ......
$# 传递给脚本的参数个数
$@ 传递给脚本的所有参数
$$ 脚本的进程号,通常用它来生成唯一的临时文件:/tmp/tmpfile_$$

逻辑判断式:

关于文件与目录的逻辑判断,格式是-×× file或者! -×× file(注意!和-xx和file之间有空格)
-f 检测文件是否存在
-d 将测目录是否存在
-b 检测是否为block文件
-c 检测是否为character文件
-L 检测是否为符号链接文件
-S 检测是否为socket标签文件
-e 检测某个东西是否存在,可以是任何东西

关于程序的逻辑判断,格式是-×× proc
-G 检测是否由GID所执行的程序拥有
-O 检测是否由UID所执行的程序拥有

关于文件的属性检测,格式是-×× file
-r 检测是否为可读属性
-w 检测是否为可写属性
-x 检测是否为可执行属性
-s 检测是否为非空白文件
-u 检测是否具有SUID属性
-g 检测是否具有SGID属性
-k 检测是否具有sticky bit属性

两个文件的判断与比较,格式是file1 -×× file2
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件和第二个文件为同一个文件(诸如链接文件)

逻辑与、逻辑或
&& 逻辑与
|| 逻辑或

运算符:
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)

字符串比较:
= 两个字符串相同
!= 两个字符串不同
-z 空字符串
-n 非空字符串

条件判断:
if [条件判断1] &&/|| [条件判断2]; then
  ……
elif [条件判断1] &&/|| [条件判断4]; then
  ……
else
  ……
fi
注意:在[]中,只能有一个判断式;在[]与[]之间,可以使用&&或者||结合判断式;[]中每一个独立的组件之间需要用空格键隔开,这一点尤其要注意,其中组件是指[、]、变量、运算符号和字符串、值等。例如:
if [ "$var" = "yes" ]; then

case var in
方式一 | 方式×)
  程序段
  ;;
方式二 | 方式×)
  程序段
  ;;
*)
  echo "Usage {方式一|方式二}" 
  exit 1
esac
 
循环:
for((条件1;条件2;条件3))
do
 程序段
done

for var in var_list     //var_list是以空格键分开的选择项,多为字符串,例如for var in yes no other或者for var in "yes" "no" "other"
do
 程序段
done
看下面一段脚本程序,该程序演示了$(command)的用法,for命令的参数来自$()中的命令的结果:
for file in $(ls *.sh)
do
 lpr $file
done

while [条件]
do
 程序段
done

until [条件]
do 
 程序段
done

调试脚本:
sh [-nvx] scripts
-n 不执行脚本,查询脚本内的语法,若有错误则列出
-v 在执行脚本之前,先将脚本的内容显示在屏幕上
-x 将用到的脚本内容显示在屏幕上,与-v稍微不同

注意:
1.在条件判断时一般使用"$var"的形式,这是为了防止出现var为空的情况,例如:if [ $var = "yes" ]中,如果var为空,那么会出现if [ = "yes" ]的情况,这是不合法的,而if [ "$var" = "yes"]则不会出现该问题。