[TOC]目录
目录生成脚本地址:
一、Linux中Shell1、Shell是哪些
Shell是一个命令行类库,为用户提供了一个向Linux内核发送恳求便于运行程序的界面系统级程序,可以用Shell来启动、挂起、停止、编写一些程序。
2、Shell脚本的执行方法
脚本格式要求
范例
#!/bin/bash
echo "hello world!"
执行方法
方法二1.Shell变量
定义
2.变量定义规则
==使用``==
A=`ls -la` :把执行结果 返回给变量 A
====================
A=$(ls -la)
3.设置环境变量
位置参数变量
0代表命令本身;$1–$9:第一个到第九个参数,10及以上的参数,用${10}
$*:代表命令行中的所有参数深度linux,看成一个整体
$@:代表命令行中的所有参数,会把每位参数区分开
$#:代表命令行中所有参数的个数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
================
./position.sh 30 60
30 60
30 60
参数个数=2
预定义变量
Shell中早已定义好的变量,可以直接使用
$$:当前进程的PID
$!:后台运行的最后一个进程的PID
$?:最后一次执行的命令的返回状态。倘若为0linux 启动定时任务,表示上一个命令正确执行。
4.Shell运算符
#!/bin/bash
echo "hello"
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
RESULT2=$[(2 + 3) * 4]
echo "result2=$RESULT2"
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP * 4`
echo "result3=$RESULT3"
5.Shell判定句子
[condition]:condition前后有空格
6.常用判定条件=字符串比较
-lt
大于
-le
大于等于
-eq
等于
-gt
小于
-ge
小于等于
-ne
不等
-r有读的权限
-w
有写的权限
-x
有执行的权限
-f文件存在而且是一个常规文件
-e
文件存在
-d
文件存在且是一个目录
3、Shell流程控制If句子
if [ condition ]
then XXX
elif [ condition ]
then xxx
fi
示例
if [ "ok" = "ok" ]
then echo "ok==ok"
fi
if [ 23 -gt 22 ]
then echo "gt"
fi
if [ -e /root/shell/aaa.txt ]
then echo "exist"
fi
case句子
case $变量名 in
"值1")
echo "aaa";;
"值2")
echo "bbb";;
*)
echo "ccc";;
esac
#!/bin/bash
case $1 in
"1")
echo "aaa";;
"2")
echo "bbb";;
*)
echo "ccc";;
esac
------------------
./xx.sh 1
for句子
for 变量 in 值1 值2 值3 ....
do
xxxx
done
for ((初始值; 循环控制条件;变量变化))
do
xxxx
done
示例
for i in "$*"
do
echo "num is $i"
done
# 只会打印一次,所有参数当成一个
===================
for j in "$@"
do
echo "num is $J"
done
# 多个参数会打印多行
#!/bin/bash
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "SUM=$SUM"
while句子
while [ condition ]
do
xxxx
done
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM=$SUM"
Shell输入输出
read (选项)(参数):从控制台读取数据
-p:指定读取值时的提示符
-t:指定读值的等待时间【单位:秒】,超时不等待
参数:指定读取值的变量名
#!/bin/bash
read -p "input a number:" NUM1
echo "num1=$NUM1"
read -t 5 -p "在5秒内,输入一个数num=" NUM2
echo "num=$NUM2"
Shell函数系统函数
1)basename:返回完整路径最后/的部份,常用于获取文件名
basename[pathname][suffix]
basename /home/aaa/test.txt => test.txt
basename /home/aaa/test.txt .txt => test
2)dirname:返回完整路径最后/的后面部份,常用于获取路径
dirname文件绝对路径
diename /home/aaa/test.txt ==>/home/aaa
自定义函数
句型
[function] funcName[()]
{
action;
[return int;]
}
示例
function getSum() {
SUM=$[$n1 + $n2]
echo "sum=$SUM"
}
read -p "first num1=" n1
read -p "second num2=" n2
getSum $n1 $n2
案例
需求:
# 数据库定时备份 脚本
BACKUP_PATH=/data/backup/db
DATETIME=$(date +%Y-%m-%d-%H-%M-%S)
# echo "date=$DATETIME"
echo "========备份开始========="
echo "========备份路径=$BACKUP_PATH/$DATETIME.tar.gz==========="
HOST=localhost
USER=root
PWD=root
DB=testdb
# 如果路径不存在就新建
[ ! -d "$BACKUP_PATH/$DATETIME" ] && mkdir -p $BACKUP_PATH/$DATETIME
# 执行备份命令
mysqldump -u$USER -p$PWD --host=$HOST $DB | gzip > $BACKUP_PATH/$DATETIME/$DATETIME.sql.gz
cd $BACKUP_PATH
tar -zcvf $DATETIME.tar.gz $DATETIME
# 删除临时文件
rm -rf $BACKUP_PATH/$DATETIME
# 找10天前文件,并删除
find $BACKUP_PATH -mtime +10 -name "*.tar.gz" -exec rm -rf {} ;
# 输出备份结束信息
echo "==========备份成功==========="
二、Linux定时任务调度crond任务调度
系统在某个时间段执行特定的命令或程序。
1、数据库的定时备份操作。
2、系统一些重复工作,病毒扫描等。
用法
crontab【选项】
-e:编辑crontab定时任务
-l:查询crontab任务
-f:删掉当前用户所有的crontab任务
-r:中止任务调度
servicecrondrestart:重启任务调度
crontab -e
*/1 * * * * ls -l /etc > /tmp/to.txt -- 每小时的每分钟执行
特殊符号说明
代表任意时间
,
不连续的时间范围linux嵌入式开发,08,12,15*linux 启动定时任务,每晚8、12、15点执行。
连续的时间范围,051-6,周日到周三的晚上5点执行。
*/n
每隔多久执行一次,/10*,每隔10分钟执行一次。
示例
示例涵义
4522*
每晚22点45分执行
0171
每周一的17点0分执行
051,15
每月1、15号的下午5点0分执行
4041-5
每周一到周六下午4点40分执行
/104
每晚下午4点,每隔10分钟执行一次。5点就不执行了
001,15*1
每月1、15号、每周一的0点0分执行
实际操作
1、每隔1分钟,当前日期信息,写入文件中。
给mytask1.sh执行权限crontab-e/1*/home/wsw/mytask1.sh
2、每天晚上2点,mysql数据库testdb、备份。
chmod744/home/wsw/mytask2.shcrontab-e02*/home/wsw/mytask2.sh