美文网首页
Fabric01-1

Fabric01-1

作者: 刘岩2019 | 来源:发表于2019-04-22 19:07 被阅读0次

    一:shell脚本基础

    1.shell命令 : 在linux终端能够被解析出来的命令
    2.shell脚本 : 多个shell命令的集合, 逻辑判断, 循环, 函数, 变量

    二:shell命令被解析的过程:

    1.有一个解析命令的进程: bash(linux)/shell(unix)
    2.bash解析过程, 监测终端输入, 有回车的时候输入完成, bash检测环境变量PATH (有多个路径), bash从前往后依次遍历每个路径, 检测各个路径中有没有用户输入的命令, 如果找到了, 执行该路径下的命令, 如果没找到找下一个, 最后还是没找到, 提示这个命令无法解析

    三:shell脚本的基本格式:

    1.命名格式
    shell脚本是一个文件, 命令方式: xxx.sh
    .sh的后缀不是必须的, 目的是为了方便识别

    2.书写格式
    (1).第一行是固定的, 指定解析脚本内容使用的命令解析器:#! /bin/bash (指令使用的命令解析器是bash), 这行可以省略
    (2).后边就是shell命令, 变量定义, 函数调用, 逻辑判断循环

    四:shell脚本的执行

    1.文件访问者:
    拥有者u——-user
    所属组g——-group
    其他用户o—–other

    2.文件访问权限的种类:
    可读(r) 可写(w) 可执行(x)

    3.目录初始默认权限为 : 775(八进制), 111 111 101(二进制),-rwxrwxr-x 1 root root
    文件初始默认权限为: 644(八进制), 110 110 100(二进制),-rw-rw-r-- 1 root root

    脚本文件需要执行权限:
    chmod u+x xxx.sh //u:当前文件所有者 + x执行权限
    chmod a+x xxx.sh //a:当前文件所有者所有组的人 + x执行权限
    chmod 777 xxx.sh

    4.脚本文件的执行
    ./xxx.sh 和执行可执行程序一样,最常用
    sh xxx.sh 也可以执行xxx.sh脚本

    五:shell脚本中的变量

    echo shell命令:表示输出

    1.普通变量(本地变量)
    //变量名=变量值  (默认字符串类型)
    hello=123
    //在shell中定义变量的时候, 必须初始化,=前后不能有空格,普通变量名小写
    
    
    2.环境变量(一般大写)
    //export 环境变量名=值 或 set 环境变量名=值
    export GOROOT=/usr/local/go
    export GOROOT=$HOME/go
    //环境变量在全局范围内都可以使用
    
    3.位置变量和特殊变量

    在执行脚本文件的时候, 可以进行参数传递, 在脚本内部需要接收这些参数, 这时候需要用到位置变量

    $0:脚本的名字
    $1:给shell脚本传递的第一个参数,
    $2:给shell脚本传递的第二个参数,以此类推
    
    $#:   给shell脚本传递的参数的个数
    $@: 给shell脚本传递的所有参数的集合
    $$:  shell脚本开始执行,产生的进程ID
    $?:  进程执行状态(在脚本中没法体现,因为需要进程执行完,才能查看进程执行状态),脚本执行完成后,在命令行中查看
    - 0     表示成功
    - 非0  表示失败
    

    编写脚本文件:vi position.sh

    脚本代码:

    
    #! /bin/bash
    
    ls
    echo "脚本的名字 = " $0
    echo "第1个参数 = " $1
    echo "第2个参数 = " $2
    echo "第3个参数 = " $3
    echo "第4个参数 = " $4
    echo "第5个参数 = " $5
    
    echo "参数的个数: " $#
    echo "所有的参数: " $@
    echo "脚本执行之后的进程ID: " $$
    
    
    

    执行脚本,并传递参数以及执行结果:


    image.png
    4.取值

    (1)取普通变量的值

    $变量名
    ${变量名}
    
    1.JPG

    (2)取命令执行之后的结果值

    str=$(shell命令)
    str=`shell命令`
    
    1.JPG
    5.引号的使用

    (1)双引号:加双引号和不加是一样的
    如果是字符串, 原样输出
    如果是待解析的指令, 会将其解析

    (2)单引号:
    如果是字符串, 原样输出
    如果是待解析的指令, 不会解析, 原样输出

    6.shell脚本中的if条件判断

    注意事项:
    if和[]之间有空格
    []和条件判断前后有空格

    if [ 条件判断 ];then
        处理指令(shell命令)
    fi
    
    
    if [ 条件判断 ]
    then
        处理指令(shell命令)
    fi
    
    
    if [ 条件判断 ];then
        处理指令(shell命令)
    elif [ 条件判断 ];then
        处理指令(shell命令)
    else
        处理指令(shell命令)
    fi
    

    shell条件测试参考:

    1.JPG 2.JPG

    例:给脚本传参, 文件名, 在脚本中判断这文件名对一个的文件是普通文件还是目录

    #! /bin/bash
    
    # 取出文件名
    filename=$1
    # 判断
    if [ -d $filename ];then        //当pathname 存在并且是一个目录时返回真
    
        echo "$filename 是一个目录!"   
    elif [ -s $filename ];then     //当filename 存在并且文件大小大于0 时返回真
        echo "$filename 存在!!!"
    else
        echo "$filename 不存在, 或者文件为空"
    fi
    
    

    结果:


    1.JPG
    7.shell脚本中的for循环

    语法: for 变量名 in 列表;do ... done

    for num in 123 345 22 33 44 55;do
        echo "$num"
    done
    
    for dir in $(ls);do
        echo "$dir"
    done
    
    # 脚本内容
    #! /bin/bash
    # 遍历当前目录
    for dir in `ls`;do
        echo $dir
    done
    
    # 遍历传递进来的参数
    for arg in $@;do
        echo $arg
    done
    

    结果:


    1.JPG
    8.shell脚本中的函数

    没有函数修饰符, 没参数, 没有返回值
    没有参数但是可以传参数, 在函数内部取参数使用的是位置变量
    可以得到返回值, 表示的函数的执行状态, 0或非0
    0 -> 成功
    非0 -> 调用有问题

    1. 函数定义, 定义完成, 函数体不会执行, 必须被调用
    myfunc()
    {
        函数体
        shell指令(for循环, if语句等)
    }
    

    2.函数调用

    函数名 [参1 参数2 参数3]
    myfunc 11 22 33
    

    例子代码:

    # 写个函数判断传递进去的文件名是不是目录, 如果存在什么也不干, 不存在, 创建
    #! /bin/bash
    # 定义函数
    myfunc()
    {
        # 遍历接收到的所有文件名
        for name in $@;do
            # 文件类型判断
            if [ -d $name ];then
                echo $name 是一个目录!
            else
                # 创建目录
                mkdir $name
                # 判断目录是不是创建成功了
                if [ $? -ne 0 ];then
                    echo "目录创建失败: $name"
                else
                    echo " $name 创建成功..."
                fi
            fi
        done
    }
    
    # 函数调用
    myfunc a b c d e f g
    
    

    结果:


    1.JPG

    相关文章

      网友评论

          本文标题:Fabric01-1

          本文链接:https://www.haomeiwen.com/subject/ttiugqtx.html