简介
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序.
快速入门
写
1. 以#!/bin/bash开头
2. 需要有可执行权限
执行
1. ./xxx.sh(相对路径)
2. /xxx/xxx/xxx/xx.sh(绝对路径)
3. sh ./xx.sh(可以不用给执行权限)
#!/bin/bash
#echo "hello world"
#输出系统变量
#echo "PATH=$PATH"
#echo "user=$USER"
A=100
echo "A=$A"
unset A
readonly B=20 #静态变量不能unset
echo "B=$B"
#把命令的结果赋值给变量
RESULT=`ls -l /StudyLinux`
echo "$RESULT"
echo ""
MYDATE=$(date)
echo "$MYDATE"
#设置环境变量
#source /etc/profile 让环境变量重新生效
#!/bin/bash
# 获取echo "$0 $1 $2"
#echo "$0 $1 $2"
#echo "$*"
#echo "$@"
#echo "参数个数=$#"
# $$ 当前进程的进程号
# $! 后台运行的最后一个进程的进程号
# $? 最后一次执行的命令的返回状态 0 正确执行 非0错误
./helloworld.sh &
echo "当前的进程号=$$"
echo "最后的进程号=$!"
echo "执行的值=$?"
命令:sh param.sh 222 111 333
流程控制
1)两个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
2)按照文件权限进行判断
-r 有读的权限[ -r 文件]
-w 有写的权限[ -w 文件]
-x 有执行的权限[ -x 文件]
3)按照文件类型判断
-f 文件存在且是常规文件[ -f 目录 ]
-e 文件存在[ -e 目录 ]
-d 文件存在且是一个目录[ -d 目录 ]
# if 判断
'''
if [ 条件 ]; then
程序
fi
或者
if [ 条件 ]
then
程序
elif [条件]
then
程序
fi
'''
if [ $1 -ge 60 ]
then
echo ">60"
elif [ $1 -lt 60 ]
then
echo "<60"
fi
'''
case $变量名in
"值1")
执行
;;
"值2")
执行
;;
*)
执行
'''
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其他"
;;
esac
#语法1
'''
for 变量 in 值1 值2 值3
do
程序
done
'''
#使用 $*
for i in "$*"
do
echo "the number is $i"
done
#使用 $@
for i in "$@"
do
echo "the number is $i"
done
#语法2
'''
for((变量;条件;变量变换))
do
程序
done
'''
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "SUM=$SUM"
'''
while [条件]
do
程序
done
'''
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM=$SUM"
# 从控制台输入
#read(选项)(参数)
#-p 提示符 -t 等待t秒后不等了
read -p "请输入一个数:" NUM1
echo "输入的值是:$NUM1!"
NUM2=666
echo "默认:$NUM2!"
read -t 3 -p "请输入一个数(3秒不输入就退出):" NUM2
echo "输入的值是:$NUM2!"
#basename
router="/StudyLinux/aaa/bbb.txt"
echo "router=$router"
basename $router
basename $router .txt
#dirname
dirname $router
#TEMP=dirname $router
#echo ‘"temp=$TEMP"
#自定义函数
function getSum(){
SUM=$[ $1*$2 ]
echo "SUM=$SUM"
return $SUM
}
read -p "输入第一个函数" NUM1
read -p "输入第二个函数" NUM2
SUM=$[$NUM1+$NUM2]
echo "SUM=$SUM"
getSum $NUM1 $NUM2
echo "return : $?"
案例
#需求分析
#1)每天凌晨2:10备份数据库atguiguDB到/data/backup/db
#2)备份开始和备份结束能够给出相应的提示信息
#3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz 的形式,比如:
#2018-03-12_230201.tar.gz
#4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
#备份的路径
path=/StudyLinux/Shell/beifen
datetime=$(date +%Y_%m_%d_%H_%M_%S)
#echo $datetime
echo "=====开始备份======"
echo "=====备份路径:$path/$datetime.tar.gz"
echo "如果备份的文件夹存在 将使用 否则创建"
[ ! -d "$path/$datetime" ]&& mkdir -p "$path/$datetime"
echo "执行备份指令"
cp wait.txt $path/$datetime
echo "压缩文件"
cd $path
tar -zcf $path/$datetime.tar.gz $datetime
echo "删除临时文件夹"
rm -rf $path/$datetime
echo "删除十天前的文件"
find $path -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
#crontab文件
10 2 * * * /StudyLinux/Shell/test.sh