• Bourn Again Shell编程


    shell既是命令解释程序,又是一种高级程序设计语言。shell是解释型语言。

    1. bash脚本的建立和运行:

      注释行以#开头

      #!后面的参数告诉系统执行本文件的程序

      执行脚本文件有两种方法:

              1.   /bin/bash scp1

              2.   chmod u+x scp1

                     ./scp1

       2. shell的变量:

              1. 比较重要的环境变量:$HOME, $PATH, $0, $1~$9, $*, $@, $#, $$, $?, $!

              2. 用户自定义变量:

        一个bash变量默认是一个字符串。

        bash不一定要声明变量,但是有些特殊类型的变量必须要声明,可以使用declare或者typeset命令来声明变量,对它们进行初始化,并设定它们的属性。

               declare [options] [name[=value]]

        typeset [options] [name[=value]]

        常用选项:-a 数组,-f 函数,-i 整数,-r 只读,-x 变量可被子进程访问

        bash变量不一定要在使用前声明或初始化,一个没有声明没有初始化的变量的初值是一个空串。

        声明一个现有的变量并不会改变这个变量的当前值。

        注意变量赋值时,=号前后不能有空格,如果值有空格,必须加“”。

        一个整形变量不能被赋予非整形的变量,非整形的变量可以赋予任何值。

        unset[name-list]  重设或删去name-list中的变量值或者函数

     

        在shell中,可以通过在变量名前加一个$符号来访问它的内容,当为变量赋值时,不要使用$符号。

        “”内解释$,`,符号,‘’内则不解释,可以去除这些字符的特殊含义。

        $(command)或者`command` ,shell把它替换为这个命令的输出结果,这个过程称为命令替换。

        read [options] variable-list  将用户的输入值赋值给一个shell变量

        常用选项:-a name 读入name中去,-e 一整行读入第一个变量,-n 光标任停留在同一行,-p prompt 如果是从终端输入,显示prompt字符串

    1. shell脚本位置参数的传递:

        在Linux中运行命令或者脚本程序时,可以在命令行中进行参数的传递,前9个参数的值被存放在shell环境变量$1到$9中。但脚本程序的参数多于9个时,用shift命令来使    用多于9个的参数。

        位置参数的值可以用set命令来设置。

    1. 控制结构语句:

        if-then-elif-else-fi

        表达式expression可以用test expression命令或[expression]来检测,这个命令检测一个表达式并返回true还是false。注意:在操作数和操作符或者括号的前后都要至    少留一个空格。

        test命令可以使用的条件类型可以归为三类:字符串比较、算数比较、与文件有关的条件测试。

        for variable [in argument-list]

        do

          command-list

        done

        while expression

        do

          command-list

        Done

     

        until expression

        do

          command-list

        done

        case variable in

    pattern1)

    command-list;;

    pattern2)

    command-list;;

    *)

     

    command-list;;

        esac

    1. 其他几个有用的语句:

        break、continue、exit、printf(不支持浮点数)

    1. 数值处理:

        在linux系统中bash变量的值是以字符串方式存储的,如果需要进行算术和逻辑操作,必须先转换为整数,得到运算结果后再转换为字符串。

        bash提供了三种方式对数值数据进行算术运算:

          1. let express-list   express-list中使用shell变量,无需加$。

          2. $((expression))   express中使用shell变量,无需加$。

          3. expr命令:  x=$(expr $x + 1)  

    1. 数组:

        可以使用declare、local、readonly等语句声明数组变量,也可以直接赋值的方法声明一个数组:

        ns=(max san [6]=zhang [25]=wang)

        echo ${ns[6]}

        a=("${ns[@]}")    原数组跟先数组一样

        b=("${ns[*]}")     原数组的所有值赋值给先数组的第一个元素

        size=${#ns[*]}   ${#ns[5]}  第6数组单元的大小,以字节为单位

    1. 函数:

        function_name() {

          command-list

        }

        当一个函数被调用时,位置参数$*、$@、$#、$1~$9会被替换为函数的参数。

    1. here文档:

        它允许一条命令在执行时,就好像在读取一个文件或键盘一样,而实际上是从脚本程序中得到输入数据。

        command<<[-]input-marker

        …input data…

        input_marker

    1. exec命令:

        使用exec内部命令来执行新的命令以替换当前的shell进程,而不是生成一个新的进程。命令结束时,返回父进程,而不是调用它的进程(也就是被覆盖的进程)。

        可以通过exec命令来重定向,但重定向之后,shell不会返回标准终端,除非执行exec</dev/tty或exec>/dev/tty

    1. trap命令:

        trap命令用于指定在接收到信号后,将要采取的行动。trap命令的一种常见用途是在脚本程序被中断时完成清理操作。信号被保存在signal.h中,使用信号名时,可以省略    SIG前缀,trap -l查看信号编号及关联的名称。

        trap ['command-list'] [signal-list]

        trap - signal-list  返回默认动作

        trap '' signal-list  忽略信号

        kill -l   列出所有信号

    1. 调试脚本程序(略)
  • 相关阅读:
    HDU 5363 Key Set(快速幂取模)
    HDU 5339 Untitled(暴搜)
    POJ 2406 Power Strings
    Dedecms备份还原网站有效方法
    DEDECMS文章列表每隔8行文章添加分隔虚线
    DEDECMS突破TAG和关键字长度的限制
    为织梦dedecms制作全文RSS订阅源
    DedeCms中Channel用typeid无效
    织梦CMS/Dedecms添加自定义函数
    sql批量换dedecms文章来源和作者
  • 原文地址:https://www.cnblogs.com/qjjazry/p/5989081.html
Copyright © 2020-2023  润新知