shift命令
每执行一次shift,参数的序列左移,$#的值减1
举例:输出累加和
#!/bin/bash
if [ $# -le 0 ]
then
echo "no parameters"
fi
sum=0
while [ $# -gt 0 ]
do
sum=`expr $sum + $1`
shift
done
echo $sum
这里的$sum + $1并不是sum+1的意思,而是sum加上第一个参数的意思,由于shift的作用,参数的顺序会左移。
结果:
Shell自定义函数
语法:
function 函数名 ()
{
命令
}
其中function可以不写,调用函数时不用跟小括号,函数中变量均为全局变量,没有局部变量。
举例
#!/bin/bash
example ()
{
echo $1
echo $#
}
example 22 55
结果
案例一:自动备份Mysql脚本
#!/bin/bash
#auto backup mysql
#备份路径
BAKDIR=/data/backup/mysql/`date +%Y-%m-%d`
#将备份的数据库
MYSQLDB=test
#数据库密码
MYSQLPWD=root
#数据库用户
MYSQLUSR=root
#必须使用root执行
if
[ $UID -ne 0 ] ; then
echo "This script must use the root user"
sleep 2
exit 0
fi
#判断目录是否存在,不存在则新建
if
[ ! -d $BAKDIR ] ; then
mkdir -p $BAKDIR
else
echo This is $BAKDIR exists...
fi
#备份
/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPWD -d $MYSQLDB > $BAKDIR/`date +%Y-%m-%d`.sql
cd $BAKDIR ; tar -czf `date +%Y-%m-%d`.tar.gz *.sql
#打包后删除.sql文件
find . -type f -name *.sql -exec rm -rf {} \;
#备份成功,打印成功并删除30天以前的备份目录
[ $? -eq 0 ] && echo "This `date +%Y-%m-%d` MySql BACKUP is SUCCESS"
cd /data/backup/mysql/ ; find . -type d -mtime +30 | xargs rm -rf
echo "The mysql backup successfully"
注意:
1.$UID用于判断是否为root执行,切换为root用户时,$UID为0,其他情况不为0。
2.mysql备份语句
/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPWD -d $MYSQLDB > $BAKDIR/`date +%Y-%m-%d`.sql
用法:
mysqldump -uroot -pPassword [database name] > [dump file]
3.创建目录语句,可以复用,BAKDIR表示需要创建的路径
if
[ ! -d $BAKDIR ] ; then
mkdir -p $BAKDIR
else
echo This is $BAKDIR exists...
fi