Linux之Shell编程

Shell编程

Shell是一个命令行解释器 ,它为用户提供了向Linux内核发送请求以便运行程序的界面系统级故障

第一个Shell入门程序

(1)vim编写一个hello.shell文件
脚本都是以#!/bin/bash为开头的

在这里插入图片描述
(2)脚本的常用两种执行方式

  1. 需要赋予脚本+x执行权限
    ./文件名.sh
    在这里插入图片描述
    绝对路径
    在这里插入图片描述
  2. 不需要权限
    sh 文件名.sh
    在这里插入图片描述

Shell 变量

系统变量,自定义变量
查看所有的系统变量set
在这里插入图片描述

自定义变量

定义变量
     定义变量的规则:
     (1)变量名称可以由字母,数字下划线组成,但是不能以数字开头
     (2)等号两侧不能有空格
     (3)变量名称一般习惯为大写

基本语法变量名=值

#!/bin/bash
a=1100
echo $a
echo "$a"
echo a=$a
echo "a=$a"

在这里插入图片描述

撤销变量

基本语法 unset 变量名

unset a
echo a=$a

在这里插入图片描述

声明静态变量

基本语法 readonly 变量
注意:不能unset

readonly B=100
echo "B=$B"
unset B

在这里插入图片描述

将命令的返回值赋给变量
1. A=`date`反引号,运行里面的命令,并把结果返回给变量A
2. A=$(date) 与上面等价
A=`date`
B=$(date)
echo A=$A
echo B=$B

在这里插入图片描述

设置环境变量
    基本语法:
    (1)export 变量名=变量值     将shell变量输出为环境变量/全局变量
    (2)source配置文件          让修改后的配置信息立即生效
    (3)echo $变量名       查询环境变量的值

例如:
设置Tomcat的环境变量在这里插入图片描述
使其生效 source /etc/profile

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置参数变量

 基本语法:
 $n (功能描述: n为数字,$0代表命令本身,$1-$9 代表第- -到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如$({10})
 $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成-一个整体)
 $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
 $# (功能描述:这个变量代表命令行中所有参数的个数)
!/bin/bash
echo 0=$0 1=$2 2=$2
echo "所有的参数=$*"
echo "$@"
echo "参数的个数=$#"

在这里插入图片描述

预定义变量

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

 基本语法
 $$ ( 功能描述:当前进程的进程号(PID) )
 $! (功能描述: 后台运行的最后一个进程的进程号(PID) )
 $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上-个命令正确执行;如果这个变量的值为非0 (具体是哪个数,由命令自已来决定),则证明上一个命令执行不正确了。)
#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取他的进程号
sh hello.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"

在这里插入图片描述

运算符
     基本语法:
     $((运算式))   或者$[运算式]  或者 expr m + n     expr运算符间要有空格
     如果把expr的结果赋给某个变量,使用``反引号
     expr m -n
     expr    \*乘   /除       %取余
计算(2+3)*4的值
RES1=$(((2+3)*4))
echo 第一种方法=$RES1
RES2=$[(2+3)*4]
echo 第二种方法=$RES2
RES3=`expr 2 + 3`
RES4=`expr $RES3 \* 4`
echo 第三种方法=$RES4

在这里插入图片描述

条件判断
判断语句
     基本语法:
     [ condition ]  注意:condition 前后要有空格
     [ ] 空返回false
     [ liuheng ] 非空返回true
常用的判断条件:

(1)=字符串比较
(2)两个整数的比较

-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

(3)按照文件权限进行判断

-r  读的权限
-w 写的权限
-x 执行的权限

(4)按照文件类型进行判断

-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
if判断
#单判断语句
if [ "ok" = "ok" ]
then
    echo "equal"
fi
# 判断目录中的文件是否存在
if  [ -f /root/shcode/hello.sh ]
then
     echo  "文件存在"
fi

#多分枝判断
if [ $1 -ge 60 ]
then
    echo "及格了"
elif [ $1 -lt 60 ]
then
     echo "不及格"
fi

在这里插入图片描述

case语句
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other..."
;;
esac

在这里插入图片描述

for循环
#!/bin/bash
#$*是把输入的参数,当作一个整体
for i in "$*"
do
    echo "num=$i"
done
# $@ 分别对待
for i in "$@"
do
    echo "num=$i"
done

在这里插入图片描述
对统计1+2+…+100的值

#!/bin/bash
SUM=0
for((i=0;i<=100;i++))
do
   SUM=$[$SUM+$i]
done
echo "从1加到100的值输出=$SUM"

在这里插入图片描述

while循环
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+ 1]
done
echo "执行的结果:=$SUM"

在这里插入图片描述

read 读取控制台输入
 基本语法:read(选项)(参数)
  -P:指定读取值时的提示符
  -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
#!/bin/bash
#案例1:读取控制台输入一个NUM1值
read -p "请输入-个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#案例2:读取控制台输入一个NUM2值,在10秒内输入。
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"

在这里插入图片描述

函数
系统函数

这里只介绍两个常用的
(1)获取文件名basename
在这里插入图片描述
(2)返回路径 dirname
在这里插入图片描述

自定义函数
基本语法:
   [ function ]    funname[()]
   {
           Action
           [return int;]
    }
    调用直接写函数名 funname [值]
#!/bin/bash

function sum(){
      GSUM=$[$n1+$n2]
        echo "和是:$GSUM"
}
read -p "请输入第一个数n1=" n1
read -p "请输入第二个数n2=" n2
sum $n1 $n2

在这里插入图片描述

数据库备份实例
  1. 设置备份文件的储存目录,数据库名,地址,密码
  2. 备份数据库
  3. 打包成以备份时间为文件名的.tar.gz文件
  4. 删除10天前备份的数据库文件
  5. 控制台显示备份成功
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库用户名
DB_ USER=root
#数据库密码
DB_ PW=123456
#备份的数据库名
DATABASE=数据库名
#创建备份目录,如果不存在,就创建
[!-d "${BACKUP}/${DATETIME}" ] && mkdir -p "${ BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_ USER} -p${DB_ PW} -host=${HOST} -q -R --databases ${DATABASE} | gzip > ${ BACKUP}/${DATETIME }/$DATETIME sql.gz
#將文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar. gz ${DATETIME}
#删除对应的备份目录
rm -f ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime + 10 -name "*.tar.gz" -exec rm-rf{} \;
echo "备份数据库${DATABASE}成功~"
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫僧洗发爱飘柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值