码迷,mamicode.com
首页 > 系统相关 > 详细

linux下的bash编程简要学习

时间:2015-09-18 07:08:13      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:bash

linux下的bash编程简要学习

    

    1.bash是什么:

        linux运行时系统只会运行系统运行所需要的运行脚本即系统守护进程,一般根据用户自己需求设定和实现的服务需要手动启动,这种服务进程通常由bash启动,脚本中的命令通常被按照一定规则被bash读取视作参数,因此在脚本头部要申明运行的bash类型,bash命令分为内建命令及外部命令,外部命令通过PATH进行依次查找。

        bash读取命令后将其启动(fork)成为一个进程,依次启动服务

    2.bash控制语句:

        本地变量:当前shell

        环境变量:当前shell及其子shell

        局部变量:某个函数内

        位置变量:脚本或函数中引用传递参数

        特殊变量

                    $# 是传给脚本的参数个数
                    $0 是脚本本身的名字
                    $1 是传递给该shell脚本的第一个参数
                    $2 是传递给该shell脚本的第二个参数
                    $@ 是传给脚本的所有参数的列表
                    $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
                    $$ 是脚本运行的当前进程ID号
                    $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

===========================================================

TEST1:

        技术分享

    变量:

            变量类型决定了变量一下三个点:

                    1.存储空间(存储数据空间)

                    2.参与运算类型

                    3.存储格式

    变量引用:

            变量引用分为一下三种方式:

                    1.强引用‘‘

                    2.弱引用""

                    3.命令引用$(COMMAND),`COMMAND`

===========================================================

Test2

                技术分享


    变量申明:

            申明整型变量(默认为字符变量):
                
declare -i name[=value]
                let name=value

    
            环境变量:
                
export name[=value]
                declare -x name[=value]
                env,printenv,export查看全部环境变量
                set可以查看全部变量

    bash执行:

                bash -n 检查脚本中语法错误
                         -x  调试脚本
                可通过exit [n]更改命令返回值,exit会结束当前进程


    bash控制:

        条件判断:
                通过控制条件实现程序的选择执行
                1.根据运行命令的执行结果
                2.测试表达式:
                    test EXPRESSION
                    [ EXPRESSION ]
                    [[ EXPRESSION ]]

        整数测试:
                $A -gt $B:是否大于
                $A -ge $B:是否大于等于
                $A -lt $B:是否小于
                $A -le $B:是否小于等于
                $A -eq $B:是否等于
                $A -ne $B:是否不等
                注意:整数测试默认做数值大小比较,所以不要给变量加引号

        字符串测试:
                字符串比较通过逐个字符的ASCII码值进行比较
                "$A" > "$B":是否大于
                "$A" < "$B":是否小于
                "$A" == "$B":是否等于
                "$A" != "$B":是否布冯
                -z "$A" :是否为空,空为真
                -n "$A" :是否不为空,不空为真


        文件测试:
               测试文件存在,存在状态及属性
                -e $file:是否存在,存在为空
                -a $file:是否存在,存在为空
                -f $file:文件是否存在且为普通文件
                -d $file:文件是否存在且为目录
                -h $file:是否存在且为符号链接
                -L $file:是否存在且为符号链接
                -b $file:是否存在且为块设备文件
                -c $file:是否存在且为字符文件设备
                -S $file:是否存在且为套接字文件设备
                -p $file:是否存在且为管道文件
    
                -r $file:当前用户是否对文件拥有读权限
                -w $file:当前用户是否对文件拥有写权限
                -x $file:当前用户是否对文件拥有执行权限
    
                -u $file:文件是否具备SUID权限
                -g $file:文件是否具备SGID权限
                -k $file:文件是否具备sticky权限
    
                -O $file:当前用户是否为指定文件属主
                -G $file:当前用户是否为指定文件属组


    双目操作符:
                $file1 -nt $file2:file1是否新于file2,比较时间为最近一次修改时间戳
                $file1 -ot $file2:file1是否旧于,file1的最近一次修改时间是否早于file2
                $file1 -ef $file2:file1与file2是否指向了同一个inode,是否为一个文件硬链接

  

     条件控制:

                if/then,case(PATTERN可为glob模式)

                if CONDITION;then                    case $VARIBLE in
                        语句                                     PATTERN1)
                fi                                                        分支1
                                                                            ;;
                if CONDITION;then                  PATTERN2)
                        语句                                             分支2
                else                                                      ;;
                        语句                                    esac
                fi

======================================================

**TEST3作业5:写一个脚本,若路径不存在则将其创建为目录,否则则显示其存在及内容类型

    技术分享

TEST4shift

    技术分享

技术分享

      read:

        read:与用户交互命令:
            主要参数 -p "message":message显示给终端
                           -t #:多少秒内未输入自动退出
        read a b  直接从键盘上读取数据,空格分开

==================================================

**TEST5作业6:写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;

技术分享

      循环控制:

        for,while,until

        for:

        while:

            while CONDITION;do

                循环体

            done

            当condition为真时执行,反之则退出

        until:

            until CONDITION;do

                循环体

            done

            当CONDITION为假时执行,反之则退出

        continue:跳出本次循环执行下次循环

        break:直接退出循环

    测试表达式(CONDITIDON):

        整数测试:-gt,-lt,-ge,-le,-eq,-ne
        字符串测试:==,<,>,!=,-z,-n,=~

    注意格式: [ "hostname" == "localhost" ]
                      [[ "STRING" =~ PATTERN ]]

    算术运算方式
        $[$A+$B]
        $(($A+$B))
        let variable=$A+$B
        variable=$(expr $A + $B)

===========================================

用for,while,until三种方法求1-100和:

for:

技术分享

while:

技术分享

until:

技术分享


**TEST作业7三种方式求100以内所有奇数之和

技术分享


    组合测试条件:
        条件间逻辑运算:
            与:多个条件同时满足
            或:多个条件满足一个条件即可
            非:对指定条件取反
        表达式组合:
            与:[[ CONDITION1 -a CONDITION2 ]]
            或:[[ CONDITION1 -o CONDITION2 ]]
            非:[ ! CONDITION ]

        
    短路操作符:
    COMMAND1 && COMMAND2 || COMMAND3


===========================================

TEST6:获取当前主机hostname,若为空或localhost,则修改为admin

    技术分享

**TEST7作业8:传递两个文本文件路径给脚本,显示两文件中空白行较多的文件和其空白行数

                显示两个文件中文件行数较多的文件及其总行数


技术分享

TEST8:99乘法表:

    技术分享

**TEST作业9

技术分享

**TEST作业10

技术分享

技术分享


    function:

        为实现代码复用,模块化设计的代码块:

            




linux下的bash编程简要学习

标签:bash

原文地址:http://610463479.blog.51cto.com/10539546/1695862

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!