Shell基础
一.变量
1.系统变量 例:$PATH $USER
2.自定义变量
例:A=100 定义局部变量
echo "A=$A" 打印变量
unset A 撤回变量
3.静态变量 不能unset
例:readonly A=100
4.位置参数变量
例:./*.sh 100 200
$n $0:./*.sh $1:100 $2:200 十以上但参数需要大括号包含如:$(10)
$* 所有参数当作一个整体
$@ 参数区分对待
$# 所有参数的个数
5.预定义变量
$$ 当前的进程号PID
$! 后台运行最后一个进程号
$? 最后一次执行命令的返回状态 如果是0则正确执行 否则不正确
规则:
1)变量名可以由字母,数字或者下划线组成,但不能以数字开头
2)等号两侧不能由空格
3)变量名称习惯大写
结果返回:
例:RESULT=`ls -l /home` 反引号
RESULT=$(ls -l /home)
二.设置环境变量(/etc/profile)
1)export 变量名=变量值 将shell变量输出为环境变量
2)source 配置文件 让配置文件立即生效
3)echo $变量名 查看环境变量
三.注释
单行注释: #
多行注释::<<! 内容 !
四.运算符
1)"$((运算式))" 或 "$[运算式]"
2)expr m + n (+,-*,/,% 加减乘除取余) expr运算符间有空格
五.流程控制
1.条件
语法:
if [ condition ]
then
程序
elif [ conditon ]
then
程序
fi
非空返回 true 可以使用$?验证(0:true >1:false)(condition前后有空格)
判断条件:
1)整数比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
2)文件权限判断
-r 读权限
-w 写权限
-x 执行权限
3)文件类型判断
-f 文件存在且是常规文件
-e 文件存在
-d 文件存在并是一个目录
例:
1 #!/bin/bash 2 3 if [ "ok" = "ok" ] 4 5 then 6 7 echo "true" 8 9 fi 10 11 if [ -e "/home/*.txt" ] 12 13 then 14 15 echo "true" 16 17 fi
2.Case
语法:
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
*)
以上都不是执行
;;
esac
3.for循环
语法:
for 变量 in 值1 值2 ....
do
程序
done
for ((i=1;i<=100;i++))
do
程序
done
例:
1 #!/bin/bash 2 3 for i in "$*" 4 do 5 echo "$i" 6 done 7 8 for j in "$@" 9 do 10 echo "$j" 11 done
4.while循环
语法:
while [ condition ]
do
程序
done
5.read 读取控制台输入
语法:
read【选项】【参数】
选项:
-p:读取值时提示符
-t:读取值等待时间秒,如果没 则不等待
参数:指定读取值读变量名
例:
1 #!/bin/bash 2 3 read -t 10 -p "请输入一个数字:" NUM 4 echo "你输入的数字是:$NUM"
六.函数
常用函数:
1)获取路径的最后文件名
basename /home/*.txt => *.txt
basename /home/*.txt .txt => *
2)获取路径除文件名的路径
dirname /home/aaa/*.txt => /home/aaa
自定义函数:
[ function ] function[()]
{
Action;
[return int;]
}
例:
#!/bin/bash #定义函数 function getSum(){ SUM=$[$n1+$n2] echo "和等于:$SUM" } read -p "请输入第一个数:" n1 read -p "请输入第二个数:" n2 #调用函数 getSum $n1 $n2
七.定时任务
例:完成数据库的定时备份
1 #!/bin/bash 2 3 #备份的路径 4 BACKUP=/data/backup/db 5 6 #当前时间作为文件名 7 DATETIME=$(date +%Y_%m_%d_%H%M%S) 8 9 echo "=======备份开始========" 10 echo "=======$DATETIME.tar.gz=========" 11 12 #主机 13 HOST=localhost 14 #用户名 15 DB_USER=root 16 #密码 17 DB_PWD=123456 18 #备份数据库名 19 DATABASE=test 20 #创建备份路径 21 [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME" 22 #执行mysql备份数据库指令 23 mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz 24 25 #打包 26 cd $BACKUP 27 tar -zcvf $DATETIME.tar.gz $DATETIME 28 29 #删除10天前备份文件 30 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} ; 31 32 echo "=========备份成功========="
创建定时器 2点执行
crontab -e
* 2 * * * sh路径