第一部分: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脚本编程进阶


    第十章:构建基本脚本

    这一章的内容都是非常基础的,作者大多都一带而过,没有细讲

    之前读的《Unix & Linux大学教程》中,对这节所提到的内容全部都有详细的讲解,所以想看笔记的同学可以参考我之前的笔记,我会在每个知识点后加上上一本书笔记相应的链接

    使用多个命令

    多个命令之间,用分号分隔即可

    创建shell脚本文件

    shell脚本的行中,井号用作注释行

    shell脚本中第一行特例,井号后跟着叹号,告诉shell用哪个shell来运行脚本

      #!/bin/bash
     

    建立完脚本文件后,文件还需要有执行权限才行

      chmod u+x file
     

    显示消息

    echo string

    -n:与下一行消息显示在同一行

    (更多见 #1

    使用变量

    在变量名前加美元符号($)

    如果只是想单纯的显示美元符号,在双引号中需要加反斜线(\)

    echo "$15":会把$1当做一个变量处理,所以要使用echo "\$15"

    关于双引号的详细说明,见#1

    用户变量

    任何不超过20个字母、数字或下划线的文本字符串。变量区分大小写

    赋值时等号两边不能有空格

    (更多见 #1

    反引号

    反引号允许将shell命令的输出赋给变量

      test=`date`
     

    (更多见 #2

    重定向输入和输出

    重定向输出使用大于号(>)

    > file:表示输出到file中

    >> file:表示将输出追加到file文件末尾,不会覆盖file之前的内容

    重定向输入使用小于号(<)

    < file:表示从file中读取数据

    << file:内联输入重定向(inline input redirection)。允许在命令行而不是文件指定输入重定向的数据

    必须指定一个文本标记来划分要输入数据的开始和结尾

    (更多见 #3

    管道

    Linux会同时运行管道两边的程序。在第一个命令产生输出时,输出会立即传个第二个命令,传输数据不会到任何中间文件或缓冲区

    (更多见 #3

    执行数学运算

    expr命令

    expr命令允许在命令行上处理数学表达式,但是特别笨拙

    expr命令操作符

    操作符 描述
    ARG1 | ARG2 如果没有参数是null或0值,返回ARG1,否则返回ARG2
    ARG1 & ARG2 如果没有参数是null或0值,返回ARG1,否则返回0
    ARG1 < ARG2 如果表达式为真,返回1,否则返回0
    ARG1 <= ARG2 如果表达式为真,返回1,否则返回0
    ARG1 = ARG2 如果表达式为真,返回1,否则返回0
    ARG1 != ARG2 如果表达式为真,返回1,否则返回0
    ARG1 >= ARG2 如果表达式为真,返回1,否则返回0
    ARG1 > ARG2 如果表达式为真,返回1,否则返回0
    ARG1 + ARG2 返回ARG1和ARG2的算术和
    ARG1 - ARG2 返回ARG1和ARG2的算术差
    ARG1 * ARG2 返回ARG1和ARG2的算术乘积
    ARG1 / ARG2 返回ARG1被ARG2除的算术商
    ARG1 % ARG2 返回ARG1被ARG2除的算术余数
    STRING : REGEXP 如果REGEXP匹配到了STRIN中的某个模式,返回该模式匹配
    match STRING REGEXP 如果REGEXP匹配到了STRIN中的某个模式,返回该模式匹配
    substr STRING POS LENGTH 返回起始位置为POS(从1开始计数)、长度为LENGTH个字符的子字符串
    index STRING CHARS 返回在STRING中找到的CHARS字符串的位置;否则返回0
    length STRING 返回字符串STRING的数值长度
    + TOKEN 将TOKEN解释成字符串,即使是个关键字
    (EXPRESSION) 返回EXPRESSION的值

    直接使用expr可能会有很多问题,比如*需要加转义符号等

      expr 5 \* 2
     

    使用方括号

    bash中,将一个数学运算结果赋给某个变量时,可以用美元符和方括号($[])将数学表达式圈起来(android中似乎不支持)

      $ var1=$[1+5]  
    $ echo $var1  
    6
    $ var2=$[$var1*2]  
    $ echo $var2  
    12
    $ var3=$[($var1 + 4) * $var2]  
    $ echo $var3  
    120
     

    bash不支持浮点运算,zsh支持

    浮点解决方案

    bc

    能够识别数字(整数和浮点数)、变量(包括数组)、注释、表达式、编程语句、函数

    使用浮点运算,必须设置scale,默认是0

    -q:去掉bc的欢迎屏显示

    在脚本中使用bc

    基本格式:

    variable=`echo "options;expression"|bc`

    options允许设置变量,多个变量间用分号分隔

      var=`echo "scale=2; 2/3" | bc`
     

    如果计算很复杂,可以采用内联输入重定向

      variable=`bc << EOF
    options
    statments
    expressions
    EOF`
     

    这样看上去清晰多了,也不用单独写一个文件,然后传递给bc

    这里EOF只是个标识符而已

    (关于bc的更多讲解见 #4

    退出脚本

    shell中每个命令都使用退出状态码(exit status)来告诉shell它完成了处理

    退出状态码范围为[0,255],命令结束运行时由命令传给shell,可以捕获并使用

    查看退出状态码(变量$?)

      $date aaaaaa
    $echo $?
    $nothingnothingnothing
    $echo $?
     

    状态码 描述
    0 命令成功结束
    1 通用未知错误
    2 误用shell命令
    126 命令不可执行
    127 没找到命令
    128 无效退出参数
    128+x Linux信号x的严重错误
    130 命令通过ctrl+c终止
    255 退出状态码越界

    exit命令

    默认情况下,shell脚本会以脚本中最后一个退出状态码退出

    可以在脚本结束时指定退出状态码,也可以使用变量

      exit code
    exit $mycode
     

    注意:如果状态码越界了,程序不会出错,shell会将其除以256后取余数

    1.《Unix & Linux 大学教程》 - 第十二章 学习笔记 使用shell:变量和选项

    2. 《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制

    3. 《Unix & Linux 大学教程》 - 第十五章 学习笔记 标准I/O:重定向和管道

    4. 《Unix & Linux 大学教程》 - 第八章 学习笔记 能够立即使用的程序

    转贴请保留以下链接

    本人blog地址

    http://su1216.iteye.com/

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