Shell编程基础

简介

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值