Linux Shell编程

作者: Manfestain | 来源:发表于2020-03-26 20:33 被阅读0次

    Shell是一个命令解释器,它可以为用户提供一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以通过Shell来启动、挂起、停止甚至是编写一些程序。


    1. Shell编程快速入门

    要求:

    1. 脚本以#!/bin/bash开头
    2. 脚本需要可执行权限

    执行方式:

    1. 赋予xxx.sh脚本+x权限,执行脚本
      chmod 755 xxx.sh
      ./xxx.sh
    2. 不用赋予+x权限,直接执行
      sh ./xxx.sh

    2. Shell变量

    Shell变量主要分为系统变量自定义变量

    系统变量

    $HOME$PWD$SHELL$USER

    自定义变量
    • 定义变量:变量=值(中间不能有空格)
      撤销变量:unset 变量
    • 定义静态变量:readonly 变量=值(静态变量不能unset)
    • 把自定义变量升为系统变量,供其他脚本使用:
    • 将命令的返回值赋值给变量:
      1.A=‘ls -l’:运行里边的命令,并把结果返回给变量A(‘表示反引号,esc的下方那个键)
      2.A=$(date):等价于反引号

    3. 设置环境变量

    • expert 变量名=变量值:将shell变量输出为环境变量
    • source 配置文件:让修改后的配置信息立即生效
    • echo 变量名:查询环境变量的值

    4. 位置参数变量

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

    ./myShell.sh 100 200:执行shell的命令,可以在myShell脚本中获取到参数信息100 200

    • $nn为数字,$0代表命令本身,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,如${10}
    • $*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
    • $@:这个变量也代表命令行中所有的参数,&@把每个参数区分对待
    • $#:这个变量代表命令行中所有参数的个数

    bash:


    输出:



    5. 预定义变量

    shell设计者预先定义好的变量,可以直接在shell中使用

    • $$:当前进程的进程号(PID)
    • $!:后台运行的最后一个进程的进程号(PID)
    • $?:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个指令已经执行;如果这个变量非0,则证明上一个命令执行不争取。

    bash:


    输出:



    6. 运算符

    基本语法:

    • $((运算式))$[运算式]
    • expr m + n(expr运算符间要有空格)
      运算符:
      1.\*:乘
      2./:除
      3.%:取余

    bash:


    输出:



    7. 条件判断

    基本语法:
    [ condition ](注意:condition前后要有空格)
    非空返回true,可使用$?验证(0true>1false

    • [ atguigu ]:返回true
    • []:返回false

    常用判断条件

    1. 两个整数的比较
      =:字符串比较
      -lt:小于(less than:lt)
      -le:小于等于(less equal:le)
      -q:等于
      -gt:大于(greater than:gt)
      -ge:大于等于
      -ne:不等于(not equal:ne)
    2. 按照文件权限进行判断
      -r:有读的权限
      -w:有写的权限
      -x:有执行的权限
    3. 按照文件类型判断
      -f:文件存在并且是一个常规文件
      -e:文件存在
      -d:文件存在并且是一个目录

    bash:


    输出:



    8. 流程控制

    if语句

    1. if [ 条件判断 ];then
      程序
      fi
    2. if [ 条件判断 ]
      then
        程序
      elfi [ 条件判断 ]
      then
        程序
      fi

    编写一个shell程序,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则输出“不及格”。


    case语句

    基本语法:
    case $变量名 in
    "值1")
    如果变量值等于1,则执行程序1
    ;;
    "值2")
    如果变量值等于2,则执行程序2
    ;;
    "值3")
    如果变量值等于3,则执行程序3
    ;;
    esac

    当命令行参数是1时,输出“周一”;是2时,输出“周二”;其它情况输出“other”。



    for循环

    1. for 变量 in 值1 值2...
      do
        程序
      done
    2. for ((初始值; 循环控制条件; 变量变化))
      do
        程序
      done

    使用第一种方式打印命令行的输入参数



    使用第二种方式将1加到100的值输出显示



    while循环

    while [ 条件判断 ]
    do
      程序
    done

    从命令行输入一个数,统计从1+...+n的值是多少?




    9. read读取控制台输入

    基本语法:
    read [选项] 参数
    -p:指定读取值时的提示符
    -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,则不再等待了。
    变量:指定读取的变量名

    读取控制台输入的number




    10. 函数

    shell里有系统函数自定义函数

    系统函数

    1. basename [pathname] [suffix]
      删掉所有的前缀包括最后一个/字符,然后将字符串显示出来
      suffix为后缀,如果suffix被制定了,basename会将pathnamestring中的suffix去掉。
    2. dirname [pathanme]
      返回完整路径最后/前面部分,常用于返回路径部分

    自定义函数

    [ function ] funname[()]
    {
    程序;
    [return int;]
    }
    调用直接写函数名:funname [值]

    计算两个数的和




    11. Shell编程实例

    需求:

    1. 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
    2. 备份开始和备份结束给出相应的提示信息
    3. 备份后的文件要求以备份时间命名,并打包成.tar.gz
    4. 在备份时,检查是否有10天前的备份,如果有就删除

    编写crontab执行脚本:
    crontab -e
    10 2 * * * /usr/sbin/mysql_backup_db.sh

    相关文章

      网友评论

        本文标题:Linux Shell编程

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