Linux之Shell编程

Shell的变量

  • 定义变量:变量=值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly 变量,不能撤销
#定义变量
A=100
echo "A=$A"

#撤销变量
unset A
echo "A=$A"

#定义静态变量
readonly B=100
echo "B=$B"
  • 定义变量的规则:
    • 变量名称可以由字母、数字、下划线组成,但不能以数字开头。
    • 等号两侧不能有空格。
    • 变量名称一般习惯为大写。
  • 将命令的返回值赋值给变量
    • A=`ls -la`
    • A=$(ls -la)

设置环境变量

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

位置参数变量

  • $n (n为数字,$0代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10})
  • $* (这个变量代表命令行中的所有参数,$* 把所有参数看成一个整体)
  • $@ (这个变量也代表命令行中的所有参数,不过 $@ 把每个参数区分对待)
  • $# (这个变量代表命令行中所有参数的个数)
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "$#"
./xxx.sh 100 200

预定义变量

  • $$ (当前进程的进程号(PID))
  • $! (后台运行的最后一个进程的进程号(PID))
  • $? (最后一次执行的命令返回的状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确)
echo "当前的进程号=$$"
# 后台方式运行 xxx.sh
./xxx.sh &
echo "最后的进程号=$!"
echo "执行的值=$?"

运算符

  • $((运算式)) 或 $[运算式]
  • exp m + n (运算符间要有空格)(推荐)
RESULT1=$(((2+3)*4))
echo "reslut1=$RESULT1"

RESULT2=$[(2+3)*4]
echo "reslut2=$RESULT2"

条件判断

  • [ condition ] (condition 前后都有空格)
  • 两个整数的比较
    • = 字符串比较
    • -lt 小于
    • -le 小于等于
    • -eq 等于
    • -gt 大于
    • -ge 大于等于
    • -ne 不等于
  • 按照文件权限进行判断
    • -r 有读的权限
    • -w 有写的权限
    • -x 有执行的权限
  • 按照文件类型进行判断
    • -f 文件存在且是一个常规文件
    • -e 文件存在
    • -d 文件存在并且是一个目录
#判断字符串是否相等
if [ "ok" = "ok" ]
then
	echo "equal"
fi

#比较数字大小
if [ 12 -gt 22 ]
then
	echo "大于等于"
fi

#判断文件是否存在
if [ -e /root/xxx.txt ]
then
	echo "存在"
fi

if判断

if [ $1 -ge 60 ]
then
	echo "及格了"
elif [ $1 -lt 60 ]
then
	echo "不及格"
fi

case语句

case $1 in
"1")
	echo "周一"
;;
"2")
	echo "周二"
;;
*)
	echo "other"
;;
esac

for循环

  • 第一种形式:
for 变量 in 值1 值2 值3
do
	程序
done
#将$*中的值进行遍历,交给i
for i in "$*"
do
	echo "the num is $i"
done
#将$@中的值进行遍历,交给i
for i in "$@"
do
	echo "the num is $i"
done
  • 第二种形式:
for ((初始值;循环控制条件;变量变化))
do
	程序
done
SUM=0
for((i=1;i<100;i++))
do
	SUM=$[$SUM+$i]
done
echo "sum=$SUM"

while循环

SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=[$SUM+$i]
	i=$[$i+1]
done
echo "sum=$SUM"

读取控制台输入

  • read(选项)(参数)
  • 选项:
    • -p:指定读取时的提示符
    • -t:指定读取值时等待的时间
#读取控制台输入一个num值
read -p "请输入一个数num1=" NUM1
echo "你输入的值num1=$NUM1"

#5秒内输入一个值
read -t 5 -p "请输入一个数num2=" NUM2
echo "你输入的值num1=$NUM2"

系统函数

  • basename 基本语法
    • 功能:返回完成路径最后 / 的部分,常用于获取文件名
    • 用法:basename [pathname] [suffx]
basename /home/xxx.txt

basename /home/xxx.txt .txt
  • dirname 基本用法
    • 功能:返回完成路径最后 / 的前面的部分,常用于返回路径部分
    • 用法:dirname 文件的绝对路径
dirname /home/xxx.txt

自定义函数

  • 基本语法:
function funname()
{
	代码
	return
}
  • 调用直接写函数名:funname
function getSum(){
	SUM=$[$n1+$n2]
	echo "和=$SUM"
}

read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2

getSum $n1 $n2

维护数据库简单案例

  • 编写mysql_db_backup.sh
#!/bin/bash

#完成数据库定时备份
#备份的路径
BACKUP=/date/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)

echo "======开始备份======"
echo "======备份的路径是 $BACKUP/$DATETIME.tar.gz======"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=test_shell
#创建备份的路径
#如果备份的路径文件夹存在,就是用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${UB_PWD} --host=${HOST} ${DATABASE} | gzip > $BACKUP/$DATETIME/SATETIME.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 "======备份文件成功======"
  • 调度任务
10 2 * * * /usr/sbin/mysql_db_backup.sh
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值