Linux(shell, 基础案例)

hello world!

#! bin/bash
echo "hello world!"

执行

./my.sh  #./my.sh  执行当前目录的my.sh(需要有可执行的权限)
/home/li/my.sh #绝对路径
sh ./my.sh #没有执行权限也可以执行

变量

  • 系统变量
echo "PATH = $PATH"
echo "user=$USER 
set #查看所有的系统变量
#常见系统变量:$HOME,$PWD,$SHELL,$USER
  • 自定义变量(变量名最好大写)
A=100 #定义一个变量,注意a = 100不行,必须紧挨着。
echo $A #使用变量
unset A #销毁变量
readonly a = 800 #静态变量,不可以unset

注意:变量定义两侧不能有空格

  • 赋值
B=`ls -l /home` #将命令返回值赋值给B,必须用``包起来
echo $B
B=$(ls -l /home) #第二种赋值写法
echo $B
  • 设置环境变量(供其它shell使用)
export VAR=/opt/tomcat #将shell变量输出为环境变量/全局变量,这是在/etc/profile里进行配置
source /etc/profile #是配置生效
#然后环境变量可以在shell编程中使用
echo $VAR #就能拿到值/opt/tomcat

shell脚本的 注释符号(多行)::<<! 注释内容!

  • 位置参数变量
./my.sh  100 200  #在运行脚本时附加参数
#获取100,及200
$n  #$0表示命令本身 $1-$9表示一到九的参数,十以上的参数使用${10}
$* #代表命令行中的所有参数,把所有的参数看作整体
$@ #代表所有参数,但是每个参数区别对待
$# #代表阐述个数
  • 预定义变量
$$  #当前进程号
$! #后台运行的最后一个进程号
$? #最后一次执行命令返回的状态,0表示正确执行

运算符

$((运算式))
$[运算式]
VAR=$[2*2] #将表达式2*2的值赋值给VAR
echo "VAR=$VAR"
VAR1=$((2+3)) #将表达式2 + 3的值赋值给VAR1
echo "VAR1=$VAR1"
expr `m + n` #注意需要空格,expr为表达式的意思,如果需要将expr的值赋值给一个变量需要用``赋值
expr `m - n`
expr `m % n`
expr `m \* n` #注意*是\* 需要转义
VAR=`expr 2 + 3`
VAR1=`expr 2 - 3`
VAE2=`expr 2 \* 3`

条件判断

特别注意:1. [ ] 空判断也是需要空格的 2.[ ] 内非空即为真

[ condition ] #注意两边有空格,非空为真
if [ con ]
then 
	echo ""
fi #结束符号
if [] 
then
    echo
 elif []
 then 
    echo
fi #结束符号

常用判断条件:

  1. =宇符串比较
    2)两个整数的比较
  • -It小于
  • -le小于等于little equal
  • -eq等于
  • -gt大于
  • -ge大于等于
  • -ne不等于
    3)按照文件权限进行判断
  • r 有读的权限
  • W有写的权限
  • X有执行的权限
    4)按照文件类型进行判断
  • f文件存在并且是一个常规的文件
  • e文件存在
  • d文件存在并是一个目录
#example
if [ "ok" = "ok" ]
then
        echo "yes"
fi
if [ 23 -ge 25 ]
then    
        echo "yes"
fi          
if [ -d /home/liyong ]
then        
        echo "yes d is exists!"
fi 

case分支

case $变量名 in
"value")
  echo ""
 ;; #结束
 "value")
   echo ""
  ;;
 *) #都没有匹配上
 echo ""
 ;;
 esac #结束
 #example
 case $1 in #取携带的第一个参数,这个可以用于启动脚本编写可以带参数start,stop,restart
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)          
echo "other"
;;          
esac #case反着写,表示结束

循环for

for 变量 in 值1 值2 值3
do 
  逻辑
done
#example1
for i in "$*" #将所有参数作为一个整体,就是当作整个字符串只输出一次
do 
	echo "num is $i"
done
#example2
for i in "$@" #将参数区别对待,如带三个参数就有三个输出
do
	echo "$i"
done

第二种语法格式案例

#求1-100的和
SUM=0
for ((i=1;i<=100;i++)) #两层大括号,100可以变为参数如$1,就可以根据输入值控制循环
do SUM=$[$SUM+$i]
done 
echo "SUM = $SUM"

循环while

while [  ] #注意条件判断两边也有空格
do

done
#example
#求1-100的和
i=0;
SUM=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "SUM=$SUM"

read 控制台输入

read 
-p 指定读取值时的提示符
-t 指定读取时的等待时间
read -p "请输入" NUM #将输入的值给NUM
#example
read -p "请输入一个数NUM” NUM
read -t 10 -p "请输入一个数NUM” NUM #10秒之后自动退出

函数

系统函数

  • basename
basename /home/li/li.txt #输出li.txt
basename /home/li/li.txt .txt #输出li
  • dirname
dirname /home/li/li.txt #输出/home/li

自定义函数
example计算两个数的和

function getSum() {
   sum=$[$n1+$n2]
   echo sum
}
read -p n1
read -p n2
getSum $n1 $n2

综合案例

关于 ( ) , (), (),[]等一些符号的详细文档:
https://blog.csdn.net/x1269778817/article/details/46535729
需求分析
1.每天凌晨 2:30备份数据库hspedu到/data/backup/db
2.备份开始和备份结束能够给出相应的提示信息
备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12 230201.tar.gz
4.在备份的同时 ,检查是否有10天前备份的数据库文件,如果有就将其删除。

#!/bin/bash
#备份目录
BACKUP=/opt/mysql/db
#当前时间
DATETIME=%(date +%Y-%m-%d_%H%M%S)
echo DATETIME
HOST=loclhost
USER=root
PW=123456
DATABASE=student
#如果不存在目录则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#备份数据库
mysqldump -u${USER} -p${PW} -q -R --databases ${DATABASE} | gzip > #{BACKUP}/${DATETIME}/$DATETIME.sql.gz

#将文件处理为tar.gz
cd ${BACKUP}
tar -zxvf $DATETIME.tar.gz ${DATETIME}
#删除备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前备份的数据库
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份成功"
#这条语句是写在外面
crontab -e 30 2 * * * /usr/sbin/back.sh  #凌晨两点执行

鸣谢

感谢韩顺平老师,这些笔记都是看老师视频课记下来的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值