bash shell编程基础1

基本结构

#!/bin/bash
### BEGIN INIT INFO
# Comments come here
### END INIT INFO

#import another file,like:source /lib/lsb/init-functions  
###
export "$PATH:"  #导出系统变量

word="World"     #定义变量
function sayHello(){  #定义函数
    echo "Hello $1"   #BASH中的绝大多数语句结尾处都没有分号
}
sayHello $word  #调用函数

注释

  • 单行
    行首加“#”
  • 多行
    a,使用输入重定义
    :<< \EOF
    #要注释的语句块
    EOF
    b,使用逻辑判断
    if [ ]; then
    #要注释的语句块
    fi
    c,在vim中方法是:
    :m,ns/^/#/
    其中 m 和 n 是行号

调试

  1. 走读代码
    A.代码逻辑
    检查是否有遗漏逻辑,或有悖于需求。
    B.具体语法
    语法方面的东西,变量是否定义,判断语句逻辑是否正确,是否考虑各种异常,错误是否退出,返回正确状态值等。
  2. 运行
    bash -n abc.sh #语法检测
    bash -vx abc.sh #运行跟踪
    参考http://blog.csdn.net/wklken/article/details/7983054

执行和引用脚本

    $./hello.sh #要求执行权限+在子进程进行  
    $bash hello.sh  #无权限要求+在子进程执行  
    $. hello.sh  #无权限要求+在父进程执行
    或
    $source hello.sh

标准输入/输出/错误输出流

标准输入(stdin)默认为键盘输入,代码0
标准输出(stdout)默认为屏幕输出,代码1
标准错误输出(stderr)默认也是输出到屏幕,代码2

重定向改变输出位置和输入来源:

  • >是输出重定向,<是输入重定向,单个符号为覆盖,连续2个为不清除原来的而追加

    $cat >output_file <input_file
    $find /home -name .bashrc >result 2>&1 #标准输出和错误输出至同一文件
    $find /home -name .bashrc >& result #同上,简写
  • 把错误输出放到shell变量:
    $aa=$(cat /tmp/aa 2>&1)
  • tee重定向
    tee命令能将数据同时送往文件与屏幕,如
    ls | tee -a result

变量

shell变量分为环境变量和用户变量

  • 变量赋值
    var="hello world" #赋值"="两边不能有空格,包括空格的值必须用引号

    双引号:$,’’,``,\等字符改变字面意义
    单引号:所有字符保持字面意义
    反引号:反引号中的字符串被解释为shell命令
    反斜线:转义字符,屏蔽后的字符的特殊意义

  • 变量引用
    $var #返回变量值

    ${var} #推荐这种,避免变量名称界定问题
    ${#var} #返回字符串变量长度

  • 数值变量

    1. shell中默认把变量值当作字符串,例如:
      age=22
      age=${age}+1
      echo ${age} #输出结果为22+1,而不是23
    2. 用let命令使其进行整数运算,例如:
      let age=${age}+1
    3. 也可用declare把变量定义为整型,此后运算,将把age的右值识别为算术表达式或数字。如:
      declare -i age=22
    4. 也可用$(())计算整数表达式,例如:
      $result=$((5+2*3))

    运算符号:
    +:对两个变量做加法
    -:对两个变量做减法
    *:对两个变量做乘法
    /:对两个变量做除法
    **:对两个变量做幂运算
    %:取模运算
    +=:加赋值,第一个变量加第二个变量,再赋值给第一个变量
    -=:减赋值
    *=:乘赋值
    /=:除赋值
    %=:取模赋值
    bash中没有浮点运算,须通过其他方式实现

  • 变量类型

    1. 环境变量,通过export语句将用户路径临时加入到环境变量中,如:
      export “$PATH:/home/tld/my_shell.sh”
    2. 局部变量,用local声明,如
      local factorial=1

数组

posted @ 2017-07-21 16:48  双飞翼  阅读(132)  评论(0编辑  收藏  举报