Shell编写
语法
echo "====================变量撤销(unset)======================="
#声明变量A
A=i
echo "a=$A"
#撤销变量A
unset A
echo "a=$A"
echo "====================只读变量(readonly)======================="
#声明只读变量B
readonly B=-100
#只读变量不能被撤销
unset B
echo "b=$B"
#也不能被赋值
B=200
echo "b=$B"
echo "====================返回值赋值给变量======================="
#使用反单引号的方式
RESULT=`ls -la /home`
echo "$RESULT"
#使用$()的方式
MY_DATE=$(date)
echo "$MY_DATE"
echo "====================多行注释(:<<! 内容 !)======================="
:<<!
echo "11111111111111111111111"
echo "11111111111111111111111"
echo "11111111111111111111111"
!
echo "====================设置环境变量(其它shell也可用)======================="
echo "第一步打开配置文件:‘vim /etc/profile’"
echo "第二步编写配置文件:‘TEST_VAR=123456789’ 换行输出变量 ‘export TEST_VAR’"
echo "第三步更新配置:‘source /etc/profile’"
echo "第四步使用变量:‘$TEST_VAR’"
echo "====================位置参数变量(执行shell脚本时输入参数如:./myshell.sh 100 200 300)======================="
echo "使用\$0-\$9获取参数 0=bash名字 1-9为 1-9的参数: \$0=$0 \$1=$2"
echo "使用\$*获取所有参数参数看成一个整体(字符串):$*"
echo "使用\$@获取所有参数参区分对(数组):$@"
echo "使用\$\#获取参数数量:$#"
echo "使用\${0}获取参数(\$0-\$9只能获取小于10个的参数):\${2}=${2}"
echo "====================预定义变量======================="
echo "使用\$\$获取当前进程号也就是本身:$"
#后台执行方式运行test.sh(后面加一个&符号)
#./test.sh &
echo "使用\$!获取最后的进程编号:$!"
echo "使用\$?获取执行的值:$?"
echo "====================运算符======================="
R1=$((2+8))
R2=$[(2+9)*4]
echo "1)'\$((运算式))'或'\$[运算式]' : $R1 $R2"
R1=`expr 2 + 3`
R2=`expr $R1 \* 5`
echo "2)expr m + n 注意expr运算符间要有空格 expr 20 - 5"
echo "expr \*,/,% 乘,除,取余 : $R1 $R2"
echo "====================条件判断======================="
echo "1)======两个整数的比较============="
echo "=:字符串比较"
echo "-lt:小于"
echo "-le:小于等于"
echo "-eq:等于"
echo "-gt:大于"
echo "-ge:大于等于"
echo "-ne:不等于"
echo "2)======文件权限判断============="
echo "-r:有读的权限"
echo "-w:有写的权限"
echo "-x:有执行的权限"
echo "3)======文件类型判断============="
echo "-f:文件存在并且是一个常规的文件"
echo "-e:文件存在"
echo "-d:文件存在并是一个目录"
if [ "ok" = "ok" ]
then
echo "OK=OK"
fi
if [ 23 -gt 20 ]
then
echo "23>22"
fi
if [ -e /home/shell/myshell.sh ]
then
echo "myshell.sh存在"
fi
if [ -x /home/shell/myshell.sh ]
then
echo "有写的权限"
fi
echo "====================流程控制======================="
echo "===========if================"
OK="ok"
if [ $OK = "ok" ]
then
echo "ok"
elif [ $OK = "ko" ]
then
echo "ko"
elif [ $OK = "kk" ]
then
echo "kk"
fi
echo "===========case================"
case $OK in
"ok")
echo "ok"
;;
"ko")
echo "ko"
;;
"*")
echo "kk"
;;
esac
echo "===========for================"
echo "打印输入的参数"
for i in "$@"
do
echo "参数$i"
done
SUM=0
for ((i=1;i<=100;i++))
do
SUM=$(($SUM+$i))
done
echo "SUM=$SUM"
echo "===========while================"
SUM=0
I=0
while [ $I -le $1 ]
do
SUM=$[$SUM+$I]
I=$[$I+1]
done
echo "SUM=$SUM"
echo "====================读取控制台输入======================="
read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"
read -t 10 -p "请在10秒内输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"
echo "====================系统函数======================="
echo "basename(获取文件名加后缀): `basename /home/shell/myshell.sh`"
echo "basename(获取文件名不要后缀):`basename /home/shell/myshell.sh .sh`"
echo "dirname(获取路径除去文件部分):`dirname /home/shell/myshell.sh`"
echo "自定义函数调用"
function getSum(){
SUM=$[$n1+$n2]
echo "SUM=$SUM"
}
n1=1
n2=2
getSum $n1 $n2
综合案例
#!/bin/bash
#完成数据库的定时备份。
#备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "=======开始备份========"
echo "=======备份的路径是 $BACKUP/$DATETIME.tar.gz"
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.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 "=====备份文件成功==========="
赞(1)
赏