第一部分:Linux命令行
    《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
    《Linux命令行与shell脚本编程大全》 第二章:走进shell
    《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
    《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
    《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
    《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
    《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
    《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
    《Linux命令行与shell脚本编程大全》 第九章:使用编辑器

    第二部分:shell脚本编程基础
    《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
    《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
    《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
    《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
    《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
    《Linux命令行与shell脚本编程大全》 第十五章:控制脚本

    第三部分:高级shell编程
    《Linux命令行与shell脚本编程大全》 第十六章:创建函数
    《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
    《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
    《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
    《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
    《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
    《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell

    第四部分:高级shell脚本编程主题
    《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
    《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
    《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
    《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
    《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶


    第十一章:使用结构化命令

    使用if-then语句

       if command
    then
        commands
    fi
      

    如果if后面的命令退出状态码=0,那么就执行then

    另外一种形式

       if command; then
        commands
    fi
      

    if-then-else语句

       if command
    then
        commands
    else
        commands
    fi
      

    如果if后面的命令退出状态码=0,那么就执行then,否则,执行else

    嵌套if(else if)

       if command1
    then
        commands
    elif command2
    then
        commands
    fi
      


    test命令

    test命令可以判断3类条件

    1.数值比较

    2.字符串比较

    3.文件比较

    格式:

    test condition

    在if语句中,可以使用方括号[]

       if test condition
    then
        commands
    fi
      

    或者

       if [ command ]
    then
        commands
    fi
      

    注意:方括号两边必须加入一个空格,不然会报错

    数值比较

    比较 描述
    n1 -eq n2

    检查n1是否与n2相等

    n1 -ge n2 检查n1是否大于或等于n2
    n1 -gt n2 检查n1是否大于n2
    n1 -le n2 检查n1是否下雨或等于n2
    n1 -lt n2 检查n1是否小于n2
    n1 -ne n2 检查n1是否不等于n2

    可以用在变量上

    注意:不能使用浮点数

    字符串比较

    比较 描述
    str1 = str2 检查str1是否和str2相同
    str1 != str2 检查str1是否和str2不同
    str1 < str2 检查str1是否比str2小
    str1 > str2 检查str1是否比str2大
    -n str1 检查str1的长度是否非0
    -z str1 检查str1的长度是否为0

    顺序比较需要注意:

    1.大于小于符号要转义,不然会被识别为重定向符号

    2.test命令根据ASCII顺序排序,与sort命令不同

    字符串长度

    当变量为空字符串或者没有初始化时,变成长度是0

    空字符串或没有初始化的变量可能会对程序有灾难性影响,使用前最好先使用test命令中的-n和-z确认

    文件比较

    比较 描述
    -d file 检查file是否存在并且是否是一个目录
    -e file 检查file是否存在
    -f file 检查file是否存在并且是否是一个文件
    -r file 检查file是否存在并可读
    -s 检查file是否存在并非空
    -w 检查file是否存在并可写
    -x 检查file是否存在并可执行
    -O 检查file是否存在并属于当前用户所有
    -G 检查file是否存在并且默认组与当前用户相同

    file1 -nt file2

    检查file1是否比file2新
    file1 -ot file2 检查file1是否比file2旧

    以检查目录为例:

       if [ -d $HOME ]
    then
        cd $HOME
    else
        echo "$HOME is not a directory"
    fi
      

    复合条件测试

    [ condition1 ] || [ condition2 ]

    [ condition1 ] && [ condition2 ]

    if-then的高级特性

    1.用于数学表达式的双圆括号

    2.用于高级字符串处理的双方括号

    双圆括号允许将高级数学表达式放入比较中

    格式:

    (( expression ))

    命令符号

    符号 描述
    val++ 后增
    val-- 后减
    ++val 先增
    --val 先减
    ! 逻辑求反
    ~ 位求反
    ** 幂运算
    << 左位移
    >> 右位移
    & 位布尔和
    | 位布尔或
    && 逻辑和
    || 逻辑或

    双方括号格式

    [[ expression ]]

    提供了模式匹配(pattern matching)特性,可以在其中使用正则表达式

       if [ $USER == r* ]
      


    case命令

    命令格式:

       case variable in
    pattern1 | pattern2) commands1;;
    pattern3) commands2;;
    *) default commands;;
    esac
      

    bash中是可以在case中检查字符串的

    从java到bash,语法转变还是很大的,不过思想是不会变的

    下面是一个简单的示例:

       case $test in
    pork | beef | lamb )
        echo "$test is meat!"
        echo "I like it!";;
    potato | tomato | eggplant )
        echo "$test is a vegetable"
        echo "who likes it?";;
    *)
        echo "what's this?";;
    esac
      

    在java7之前,这么写是不可以的,switch case中不支持string类型

    转贴请保留以下链接

    本人blog地址

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/