shell编程学习

本文详细介绍了Shell编程的基础,包括如何创建和执行shell脚本,变量的使用(系统变量、自定义变量、位置变量、预定义变量),以及流程控制结构(如if条件判断、for循环、case语句)。此外,还讲解了读取控制台输入、函数定义,并提供了一个备份数据库的综合案例。通过学习,读者可以掌握Shell脚本的基本操作和常见应用。
摘要由CSDN通过智能技术生成

Shell:程序设计语言。命令行解释器,提供了向LInux内核发送请求以便运行程序的界面系统级程序。
功能之一:用shell脚本或命令,启动、挂起、停止甚至编写程序。

新建shell脚本文件:vim hello.sh (.sh为约定格式,不一定固定)
shell脚本内容以:#!/bin/bash 作为起始行;
执行方式1:赋予适用者该文件的执行权限:chmod u+x hello.sh,后执行,./hello.sh或利用绝对路径执行
执行法式2:无需权限,直接sh hello.sh

shell变量:系统变量/自定义变量
系统变量:$HOEM,$PATH,$USER,#SHELL,$PWD(显示当前shell中所有变量:set)
自定义变量:变量名=值,,撤销:unset变量,,声明静态变量:readonly变量(不可撤销)
脚本内返回变量需要:$变量名

自定义变量规则:

  1. 左侧变量名不能数字开头(可字母(规范大写),数字,下划线),“=”左右不能有空格
  2. 将一行命令的result赋给变量——加反引号:A=反引号data反引号 或使用小括号和$——A=$(data)
  3. 单行注释 # 多行注释 :<<! 注释内容 ! (:<<!当独一行 !单独一行)

设置环境变量:
语法:export 变量名=变量值 :将shell变量输出为环境变量/全局变量
设置环境变量:再文件 /etc/profile 中,export 变量名=值,后必须,,执行命令——source 配置文件(刷新配置文件)
如:在/etc/profile中输入export TOMCAT_HOME=/opt/tomcat 换行 export CLASSPATH=%TOMCAT_HOME%/bin ,保存退出,执行source /etc/profile

位置变量:./myshell.sh 10 20 10用来向脚本长度参数或数据
$0 :获取,执行脚本时文件名/绝对文件名;绝对路径可简写:./
$n: 1 − 9 表 示 1 到 第 9 个 参 数 , 10 以 上 用 1-9表示1到第9个参数,10以上用 191910{10}表示
$#:获取当前脚本后参数个数
$*:获取当前脚本所有参数(将参数视为多个字符串)
$@:获取当前脚本所有参数(将参数是为不同独立的字符串)

预定义变量:shell设计者定义好的变量,可直接在shell脚本中使用。
$$:获取当前脚本进程号PID
$!:获取上一个后台工作的进程的进 程号PID
$?:获取上一个指令的执行状态(成功:0,失败:非0)返回值
$_:获取此前执行命令或脚本的最后一个参数

3种运算式: ( ( 运 算 式 ) ) , ((运算式)), [ 运算式 ],expr m + n (mn之间要有空格,如果将结果付给变量,使用反引号括起来)
运算符: expr * / % :分别表示乘、除、取余,特殊情况,而在使用 反引号expr 2 \* 3 反引号

条件判断:
语法:[ 具体条件 ] ( 中括号的左右要有空格:和if要有,和条件要有 )非空返回true,$?验证
if判断开始,分支elif , fi结束,
在这里插入图片描述

case语句:
case $1 in “”) ;; “”) ;; *) ;;esac

#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

for循环:
在这里插入图片描述

语法1:for in 值/变量 do 代码 done

#!/bin/bash
#打印命令行参数
for i in "$*"
do
        echo "num is $i"
done

#$@:分别对待
echo "---------------"
for j in "$@"
do
        echo "num is $j"
done

语法2:

#!/bin/bash
#1-100的和
sum=0
for(( i=1; i<=$1; i++ ))
do
        sum=$[ $sum+$i ]
done
echo "sum=$sum"

流程控制:
在这里插入图片描述

#!/bin/bash
#1-100的和
sum=0
for(( i=1; i<=$1; i++ ))
do
        sum=$[ $sum+$i ]
done
echo "sum=$sum"

注:变量是区分大小写的

read读取控制台输入

#!/bin/bash
read -t 10 -p "请输入数字:" NUM1
echo "你输入为:$NUM1"

-p : 给出提示(配合变量名)
-t: 设置从控制台读取的等待时间(过期自动执行其他代码)

函数:系统函数,自定义函数
系统函数:

  1. 截取文件名函数:
basename 绝对路径/test.txt            :将返回test.txt    
basename 绝对路径/test.txt  .txt           :将返回test
  1. 截取除文件名的绝对路径函数
dirname  /home/a/test.txt            :将返回  /home/a

自定义函数:
语法:

#!/bin/bash
function getSum() {
        SUM=$[ $n1+$n2 ]
        echo "和=$SUM"
}

#如果读取数字来获取
read -p "请输入数字n1=" n1
read -p "请输入数字n2=" n2

  #调用
getSum $n1 $n2                            

综合案例:

  1. 备份数据库:
    要求:每天2:30,将指定数据库备份到指定目录、备份开始和结束给出提示、备份文件以指定名称打包成.tar.gz形式(如:“2000-09-12_230201.tar.gz”)、备份时检查10天前备份的数据库文件,如果有删除

以root权限,到 /usr/sbin 目录下创建脚本:mysql_db_backup.sh

 1 #!/bin/bash
  2 #指定备份位置
  3 BACKUP= /data/backup/db
  4 #当前时间
  5 DATETIME=$(data +%Y-%m-%d_%H%M%S)
  6 echo $DATETIME
  7 
  8 #数据库地址
  9 HOST=localhost
 10 #数据库用户名
 11 DB_USER=root
 12 #数据库秘密
 13 DB_PW=qqq
 14 #需备份的数据库名
 15 DATABASE=aaa
 16 
 17 #创建备份目录,如果不存在
 18 [ ! -d "${BACKUP}/${database}" ] && mkdir -p "{$BACKUP}/{$databasei}"
 19 
 20 #备份数据库
 21 mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -r --database ${DATABASE} |     gzip > ${BACKUP}/${database}/$DATATIME.sql.gz
 22 
 23 #将文件处理成 tar.gz
 24 cd ${BACKUP}
 25 tar -zcvf $DATETIME.DATETIME.tar.gz ${DATETIME}
 26 
 27 #删除对应的非压缩文件(备份文件)
 28 rm -rf ${BACKUP}/${DATETIME}
 29 
 30 #删除10天前备份文件
 31  find ${BACKUP} -ATIME +10 -name "*tar.gz" -exec rm -rf {} \;
 32 
 33 #显示备份信息
 34 echo "备份数据库${DATABASE} 成功~"

任务调度:crontab -e

30 2 * * * /usr/sbin/mysql_db_backup.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值