Linux四:自动化脚本

本文详细介绍了Shell脚本的基础知识,包括变量、运算符、流程控制(if、for、while、case)以及函数的使用。还提供了微服务打包发布的完整Shell脚本示例。同时,简述了Bat批处理脚本的基本命令和常用功能,并展示了微服务打包及运行的Bat脚本案例。
摘要由CSDN通过智能技术生成

1 shell 脚本

1.1 概述

shell 解析器

[root@CentOS8 ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

# 注:脚本以"#!/bin/bash"开头,用于指定解析器为 "/bin/bash";因为有的系统默认解析器不是这个
# 入门脚本样例,内容为缩进部分
[root@CentOS8 tmp]# vi hello.sh
    #!/bin/bash
    echo "hello"
[root@CentOS8 tmp]# sh hello.sh 
hello

shell 中的变量

  1. 常用的系统变量 $HOME$PWD$SHELL$USER

    # 样例
    echo $HOME
    echo $PWD
    echo $SHELL
    echo $USER
    
  2. 自定义变量

    1. 变量定义规则
      1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
      2. 等号两侧不能有空格
      3. 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
      4. 变量的值如果有空格,需要使用双引号或单引号括起来
    2. 基于语法
      1. 定义变量:变量=值
      2. 撤销变量:unset 变量
      3. 声明静态变量:readonly 变量 (注意:不能 unset)
  3. 特殊变量

    1. $n :n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数;十以上的参数需要用大括号包含,如${10}
    2. $# :获取所有输入参数个数,常用于循环
    3. $* :代表命令行中所有的参数,$*把所有的参数看成一个整体
    4. $@ :也代表命令行中所有的参数,不过$@把每个参数区分对待
    5. $? :最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一 个命令正确执行;如果这个变量的值为非0(具体是哪个数由命令自己来决定),则证明 上一个命令执行不正确了
    # $* 与 $@ 区别
    # (1) $* 与 $@ 都表示传递给函数或脚本的所有参数,不被双引号""包含时,都以$1 $2 …$n的形式输出所有参数
    # (2) 当它们被双引号""包含时,"$*"会将所有的参数作为一个整体,以“$1 $2 …$n” 的形式输出所有参数;"$@"会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数
    
    # 编写脚本(内容为缩进部分)
    [root@CentOS8 tmp]# vi mytest.sh
        echo "----------无双引号遍历结果----------"
        for i in $*
        do
            echo "I love $i"
        done
        for j in $@
        do
            echo "I love $j"
        done
        echo "----------有双引号遍历结果----------"
        for i in "$*"
        do
            echo "I love $i"
        done
        for j in "$@"
        do
            echo "I love $j"
        done
    
    # 测试结果
    [root@CentOS8 tmp]# sh mytest.sh java c shell
    ----------无双引号遍历结果----------
    I love java
    I love c
    I love shell
    I love java
    I love c
    I love shell
    ----------有双引号遍历结果----------
    I love java c shell
    I love java
    I love c
    I love shell
    

运算符

  1. 基本语法

    1. $((运算式))$[运算式]
    2. expr +,-,\*,/,% ,加、减、乘、除、取模运算。注:expr 运算符间要有空格
  2. 样例

    [root@CentOS8 ~]# expr 2+3					# 由结果可知,2+3中间要有空格,否则原样输出
    2+3
    [root@CentOS8 ~]# expr 2 + 3				# 加
    5
    [root@CentOS8 ~]# sum=$((2+3))				# $((运算式)) 方法
    [root@CentOS8 ~]# echo $sum
    5
    [root@CentOS8 ~]# expr 2 - 3				# 减
    -1
    
    # 计算 (2+3)*4
    [root@CentOS8 ~]# expr `expr 2 + 3` \* 4	# expr 表达式方式
    20
    [root@CentOS8 ~]# result=$[(2+3)*4]			# $[运算式] 方法
    [root@CentOS8 ~]# echo $result
    20
    

条件判断

  1. 基本语法:[ condition ] 。注意事项如下

    1. condition 前后要有空格
    2. 条件非空即为 ture。如 [ aaa ] 返回true,[] 返回 false
  2. 常用判断条件

    1. 两个整数之间比较

      命令 说明
      = 字符串比较
      -lt (less than) 小于
      -le (less equal) 小于等于
      -eq (equal) 等于
      -gt (greater than) 大于
      -ge (greater equal) 大于等于
      -ne (not equal) 不等于
    2. 按照文件权限进行判断

      命令 说明
      -r (read) 有读的权限
      -w (write) 有写的权限
      -x (execute) 有执行的权限
    3. 按照文件类型进行判断

      命令 说明
      -e (existence) 文件存在
      -f (file) 文件存在并且是一个常规的文件
      -d (directory) 文件存在并且是一个目录
    4. 多条件判断

      1. && 表示前一条命令执行成功时,才执行后一条命令
      2. || 表示上一条命令执行 失败后,才执行下一条命令
  3. 样例

    # 23是否大于等于22
    [root@CentOS8 tmp]# [ 23 -ge 22 ]
    [root@CentOS8 tmp]# echo $?				# 由上文可知,$?=0表示正常,非0不正常
    0
    # hello.sh 是否具有写权限
    [root@CentOS8 tmp]# [ -w hello.sh ]
    [root@CentOS8 tmp]# echo $?
    0
    # aaa.txt 和 bbb.txt 是否存在(由下面结果可知前者存在后者不存在)
    [root@CentOS8 tmp]# [ -e /tmp/aaa.txt ]
    [root@CentOS8 tmp]# echo $?
    0		
    [root@CentOS8 tmp]# [ -e /tmp/bbb.txt ]
    [root@CentOS8 tmp]# echo $?
    1
    # 多条件判断样例
    [root@CentOS8 tmp]# [ condition ] && echo ok || echo notOk
    ok
    [root@CentOS8 tmp]# [ condition ] && [ ] || echo notOk
    notOk
    

read 读取控制台输入

  1. 语法:read [选项] [参数]

    1. 选项:-p 指定读取值时的提示符;-t 指定读取值时等待的时间(秒);-n 指定读入有效字符的数个
    2. 参数:变量 指定读取值的变量名
  2. 样例

    [root@CentOS8 tmp]# vi read.sh 
        #!/bin/bash
        read -t 5 -p "enter your name in 5s " NAME
        echo $NAME
    [root@CentOS8 tmp]# sh read.sh 
    enter your name in 5s zhangsan
    zhangsan
    

函数用法

  1. 系统函数

    1. basename [string/pathname] [suffix] ,basename 命令会删掉所有的前缀包括最后一个("/")字符,然后将字符串显示出来。选项 suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

    2. dirname 文件绝对路径 ,从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

    3. 样例

      [root@CentOS8 tmp]# touch /usr/local/a.txt
      [root@CentOS8 tmp]# basename /usr/local/a.txt 
      a.txt
      [root@CentOS8 tmp]# basename /usr/local/a.txt .txt
      a
      [root@CentOS8 tmp]# dirname /usr/local/a.txt 
      /usr/local
      
  2. 自定义函数

    1. 语法

      [ function ] funname[()]
      {
             
          Action;
          [return int;]
      }
      funname
      
      # 经验技巧
      # (1) 必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译
      # (2) 函数返回值,只能通过$?系统变量获得,可以显示加 return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)
      
    2. 样例

      # 需求1:计算两个输入参数的和
      [root@CentOS8 tmp]# vi sum1.sh
          #!/bin/bash
          function sum(
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值