Linux命令全解( 九 )


  • 判断语句
    • 常用判断条件
      1)= 字符串比较,判断两个字符串是否相等2)两个整数的比较-lt 小于-le 小于等于-eq 等于-gt 大于-ge 大于等于-ne 不等于3)按照文件权限划分-r 有读的权限-w 有写的权限-x 有执行的权限4)按照文件类型划分-f 文件存在并且是一个常规文件-e 文件存在-d 文件存在并是一个目录
    • 应用实例
      vim ifdemo.sh#!bin/bash#案例1:判断"ok"是否等于"ok"if [ "ok" = "ok" ]thenecho "equal"fi#案例2:23是否大于等于22if [ 23 -ge 22 ]thenecho "大于"fi#案例3:/root/shcode/aaa.txt 判断目录中的文件是否存在if [ -f /root/shcode/aaa.txt ]thenecho "存在"fi
  • 流程控制
    多分支语句
    案例:如果输入的参数大于60,则输出及格了 , 否则输出不及格
    #!/bin/bashif [ $1 -ge 60 ]thenecho "及格了"elif [ $1 -lt 60 ]thenecho "不及格"case语句
    #!/bin/bashcase $1 in"1")echo "周一";;"2")echo "周二";;"3")echo "周三";;*)echo "Other..";;esacfor语句
    vim testFor1.sh#!/bin/bash#基本语法1<< commentfor 变量 in 值1 值2 值3...do程序主代码donecomment#案例1:打印命令行输入的参数for i in "$*"#$*把所有的参数看成一个整体doecho "num is $i"#这里只会输出一句话donefor j in "$@"#$@把每个参数区分对待doecho "num is $j"done#基本语法2for ((初始值;循环控制条件;变量变化))do主程序代码done#案例2:从1到100的值累加显示SUM=0for ((i=1; i<=100; i++))doSUM=$[$SUM+$I]doneecho "sum=$SUM"while语句
    while [ 条件判断式 ]
    do
    ?程序
    done
    vim testWhile.sh#!/bin/bash#案例1:从命令行输入一个参数n,统计1+2+..+nSUM=0i=0while [ $i -le $1 ]doSUM=$[$SUM+$i]# i自增i=$[$i+1]doneecho "结果=$SUM"
  • read获取控制台输入
    read(选项)(参数)选项:-p:指定读取值时的提示符-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了参数:变量:指定读取值的变量名#实例:testRead.sh#案例1:读取控制台输入一个num值#!/bin/bashread -P "请输入一个数num=" NUM1echo "你输入的num=$NUM1"#案例2:读取控制台输入一个num值,在10秒内输入read -t 10 -P "请输入一个数num=" NUM2echo "你输入的num=$NUM2"
  • 函数
    • 系统函数
      basename:功能为返回完整路径的最后/的部分,常用于获取文件名
      basename [pathname] [suffix] (选项suffix为后缀,如果suffix被指定了,basename会将pathname或string的suffix去掉)basename [string] [suffix] (功能:basename命令后会删掉所有的前缀包括最后一个/字符 , 然后将字符串显示出来)#案例1:返回/home/aaa/test.txt的"test.txt"部分basename /home/aaa/test.txt--test.txtbasename /home/aaa/test.txt.tst--testdirname:功能为返回完整路径最后/的前面部分,常用于返回路径部分
      dirname /home/aaa/test.txt--/home/aaa
    • 自定义函数
      function funname (){Action;[return int;]}#调用时直接写函数名:funname [参数值]#案例1:计算输入的两个参数的和(动态获取)vim testFunc.sh#!/bin/bash#定义函数function getSum(){SUM=$[$n1+$n2]echo "和=$SUM"}#控制台输入两个值read -P "请输入一个数n1=" n1read -P "请输入一个数n2=" n2#调用getSum $n1 $n2
  • Shell编程综合案例
    • 需求分析:
      1.每天凌晨2:30备份数据库hspedu到 /data/backup/db
      2.备份开始和结束能够给出相应的提示信息
      3.备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式 , 比如2021-04-10_104515.tar.gz
      4.在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
    #!/bin/bash#备份目录BACKUP=/data/backup/db#获取当前时间DATETIME=$(date +%Y-%m-%d_%H%M%S)#数据库的地址HOST=localhost#数据库用户名DB_USER=root#数据库密码DB_PW=root#备份的数据库DATABASE=hspedu#创建备份目录 , 如果不存在就创建,如果存在就直接使用[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"#! -d 表示如果不是一个目录{}为可选的#备份数据库-q -R表示若有多个数据库都备份mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --datebases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz#将文件处理成tar.gz形式cd ${BACKUP}tar -zcvf $DATETIME.tar.gz ${DATETIME}# 将${DATETIME}压缩为$DATETIME.tar.gz#删除备份的文件夹目录及之下的文件rm -rf ${BACKUP}/${DATETIME}#检查是否有十天前备份的文件,将其删除find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;#-atime +10 查找十天前创建的备份文件echo "备份数据库${DATABASE}成功"#设置定时任务crontab -e30 2 * * * /usr/sbin/mysql_db_backup.sh(以上所写脚本文件所在目录)

    推荐阅读