Shell的变量
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量,不能撤销
A=100
echo "A=$A"
unset A
echo "A=$A"
readonly B=100
echo "B=$B"
- 定义变量的规则:
- 变量名称可以由字母、数字、下划线组成,但不能以数字开头。
- 等号两侧不能有空格。
- 变量名称一般习惯为大写。
- 将命令的返回值赋值给变量
设置环境变量
- 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 &
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
for i in "$*"
do
echo "the num is $i"
done
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:指定读取值时等待的时间
read -p "请输入一个数num1=" NUM1
echo "你输入的值num1=$NUM1"
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
}
function getSum(){
SUM=$[$n1+$n2]
echo "和=$SUM"
}
read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2
getSum $n1 $n2
维护数据库简单案例
#!/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"
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
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "======备份文件成功======"
10 2 * * * /usr/sbin/mysql_db_backup.sh