zoukankan      html  css  js  c++  java
  • shell编程

    1.shell编程是个啥

    Shell是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的系统级程序

    2.shell编程打印hello word

    1.代码部分

    #!/bin/bash
    echo 'hello world'
    代码解释:
    1.#!/bin/bash:
        告诉计算机,使用bash解释器来执行代码
    
    2.echo:
        控制台输出

    2.执行代码方式

    方式一:给脚本可执行权限

    chmod 744 myshell.sh

    然后直接运行脚本

    方式二:直接调用shell解释器执行

    bash myshell.sh

    3.注释

    单行注释

    #内容

    多行注释

    :<<!
    内容
    !

    4.变量

    1.变量的介绍

    1.Linux中变量的分类:系统变量    自定义变量
    2.系统变量:
        $PATH
        $HOME
        $PWD
        $SHELL
        $USER
    3.显示当前shell中所有的变量:set

    2.变量的定义

    基本语法

    1.定义变量:变量名=变量值
    2.撤销变量:unset 变量名
    3.声明静态变量:readonly 变量名.        静态变量不能unset,不能修改

    快速入门

    1.定义变量a
    a=123
    echo "a=$a"   打印a=123
    2.撤销变量a
    unset a
    echo "a=$a"  打印a=  (因为unset a 把a撤销了)
    3.声明静态变量b=2,尝试unset撤销
    readonly b=2
    echo "b=$b"  打印b=2

    test.sh

    运行test.sh

    定义规则

    1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头
    2.等号两侧不能有空格
    3.变量名称一般习惯为大写

    将命令的返回值赋给变量(用的多)

    1.A=`ls -l` 反引号,运行里面的命令,并把结果返回给变量 A    a='$A'
    2.A=$(ls -l) 等价于反引号

    5.设置环境变量

    基本语法

    1.export 变量名=变量值        将shell变量输出给环境变量
    2.source 配置文件             让修改后的配置信息立即生效
    3.echo $变量值                  查看环境变量的值

    6.位置参数变量

    介绍:

    当我们执行一个 shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

    基本语法

    1.
    $n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
    
    2.
    $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)  相当于字符串
    
    3.
    $@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待) 相当于列表
    
    4.
    $#(功能描述:这个变量代表命令行中所有参数的个数)

    7.预定变量

    介绍

    就是 shell 设计者事先已经定义好的变量,可以直接在shell 脚本中使用

    基本语法

    $$     (功能描述:当前进程的进程号(PID))
    $!    (功能描述:后台运行的最后一个进程的进程号(PID))
    $?    (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行失败)

    8.运算符

    基本语法

    1.$((运算式))  运算符之间不能加空格
    2.$[运算式]
    3.`expr m + n`
        特点:运算符之间要有空格
        +
        -
        /
        %
        *
        (    )

    9.判断

    基本语法

    [ 条件 ]            注意:条件前后要有空格
    
    特别的:
    [ 非空 ]      为true
    []           为false
    [ haha ] && echo true || echo false

    判断语句

    字符串比较

    =    判等
    !=  判不相等

    整数比较

    -lt        小于
    -le        小于等于
    -gt        大于
    -ge        大于等于
    -eg        等于
    -ne        不等于

    文件权限判断

    -r    有读的权限    [ -r 文件 ]
    -w    有写的权限
    -x    有执行权限

    文件类型判断

    -f 存在并且是一般文件    [-f 文件]
    -e 文件存在
    -d 存在并且是一个目录

    快速入门

    23 是否大于 23
    23 -gt 23
    
    23 是否大于等于 23
    23 -ge 23
    
    /root是否存在
    [ -e /root ]
    
    /root是否是一般文件
    [ -f /root ]

    10.流程控制

    1.if判断

    基本语法

    if [ 条件 ]    注意[]和条件之间要有空格
    then
        代码
    fi
    if [ 条件 ]
    then
        代码
    else
        代码
    fi
    if [ 条件 ]
    then
        代码
    elif [ 条件 ]
    then
        代码
    else
        代码
    fi

    快速入门

    编写shell脚本,if.sh:     执行shell命令:bash if.sh 59
    如果输入参数,大于等于60,则输出'及格了',如果小于60,则输出'不及格'
    
    if [ $1 -ge 60 ]       #$1获取执行命令传递的参数
    then
        echo "及格"
    else
        echo "不及格"
    fi

    2.case选择分支

    基本语法

    case $变量名 in
    '值1')
    代码
    ;;
    '值2')
    代码
    ;;
    *)
    代码                    都没命中执行
    ;;
    esac

    3.for循环

    遍历

    基本语法

    for 变量 in 值1 值2 值3
    do
        代码
    done

    循环

    基本语法

    for ((初始值;循环条件;变量变化))
    do
        代码
    done

    4.while循环

    基本语法

    while [ 条件 ]
    do
        代码
    done

    11.与用户交互

    基本语法

    read 选项 变量
    选项:
    -p:提示信息
    -t:等待输入的时间
    
    read -p "输入一些东西" name
    echo "$name"

    12.函数

    1.系统函数  basename

    基本语法

    basename [pathname] [suffix]
    获得路径最后一部分
    
    如果指定的suffix,那么会去掉结果中suffix的部分
    
    basename /bin/xxx/yyy/mm.txt .txt
    结果:mm

    dirname

    基本语法

    dirname [pathname]
    获得基础路径

    2.自定义函数

    function 函数名(){
        代码;
        #参数使用:$1,$2,...,${10}...
        return xxx;
    }
    
    $?是上一条指令的值(可以获取return的值)
    调用:
    函数名 值1 值2

    13.shell综合案例

    在/root下编写mysql_db_backuo.sh
    
    需求:
    1.每天凌晨2点10分,备份数据库mydb  到/data/backup/db     crontab -e
    2.备份开始和备份结束时能够给出提示信息
    3.备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,如2019-09-28-044403.tar.gz
    4.在备份的同时,检查是否有10天前的备份文件,如果有就删除
    #!/bin/bash
    
    #备份的路径
    BACKUP=/data/backup/db
    #当前的时间作为文件名
    DATETIME=$(date +%Y_%m_%d_%H%M%S)
    
    echo "=======开始备份======"
    echo "=====备份的路径是 $BACKUP/$DATETIME.tar.gz"
    
    #主机
    HOST=localhost
    #用户名
    DB_USER=root
    #密码
    DB_PWD=997997
    #备份的数据库
    DATABASE=mydb
    
    
    
    如果备份路径不存在,就创建
    [ ! -d "$BACKUP/DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
    #执行mysql的备份指令
    mysqldump -u$DB_USER -p$DB_PWD --host=$HOST $DATABASE | gzip > $BACKUO/$DATETIME/$DATETIME.sql.gz
    #打包备份文件
    cd $BACKUP
    tar -zcvf $DATETIME.tar.gz $DATETIME
    #删除临时目录
    rm -rf $BACKUP/$DATETIME
    
    
    #删除10天前的文件
    find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} ;
    
    echo "=====备份成功+++++"
  • 相关阅读:
    解决Ubuntu Kylin 1610安装ANSYS17.2的NVIDIA显卡驱动问题
    ubuntu安装ANSYS17.2全过程
    Ubuntu1604下安装Liggghts及CFDEM Coupling
    【Pyrosim案例】02:简单燃烧
    【Pyrosim案例】01:空气流动
    【FLUENT案例】06:与EDEM耦合计算
    【FLUENT案例】05:DDPM模型
    【FLUENT案例】04:利用DDPM+DEM模拟鼓泡流化床
    DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程
    Python的下载和安装
  • 原文地址:https://www.cnblogs.com/wangcuican/p/12074730.html
Copyright © 2011-2022 走看看