shell脚本介绍、结构和执行、date命令用法、shell脚本中的变量「建议收藏」

shell脚本介绍、结构和执行、date命令用法、shell脚本中的变量

大家好,又见面了,我是全栈君。

shell 脚本介绍

  • shell 是一种脚本语言

    • shell有自己的语法,可以使用逻辑判断、循环等语法
  • 可以自定义函数,目的就是为了减少重复的代码

  • shell 是系统命令的集合

  • shell 脚本可以实现自动化运维,能大大增加我们的运维效率

shell 脚本结构和执行

结构

  • 脚本第一行必须为 #!/bin/bash

  • 脚本内容中以#开头的行为作为解释说明

  • 编写脚本时备注:作者、时间、功能等信息,方便之后查看

  • 脚本名用“.sh”结尾,用于区分这是一个shell脚本

执行方法

1、给脚本添加执行权限“chmod a+x test.sh”,然后直接执行过程

2、bash test.sh ; sh test.sh

  • sh 参数

    • -x:sh -x test.sh 查看脚本执行过程
    • -n:sh -n test.sh 查看脚本是否存在语法错误

    创建一个shell 脚本:
    [root@localhost shell]# vim 01.sh
    #! /bin/bash //固定格式
    echo “123”
    w
    ls

    给脚本加上执行权限:
    [root@localhost shell]# chmod a+x 01.sh

    执行脚本
    [root@localhost shell]# ./01.sh
    abc
    22:46:45 up 2:33, 1 user, load average: 0.00, 0.01, 0.05
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root pts/0 192.168.159.1 20:17 5.00s 0.06s 0.00s /bin/bash ./01.sh
    01.sh

  • 在当前终端里,把01.sh中的#! /bin/bash 去掉后在执行脚本,会看到得到的结果相同,不会出现任何的问题,这就说明这台机器是能识别里面一条一条的命令的,去运行这里面的命令;但若是换一台机器,就不一定能执行了

  • 在第一行,文件头指定 #!/bin/bash ,接下来要运行的命令是通过哪一个解释器来操作的,通常都是 /bin/bash 解释器来执行的

date 命令用法

  • date命令用于显示或设置系统时间与日期

  • 语法:date 选项 参数

  • 选项

    • -d:显示字符串指定的日期与时间(字符串前后必须加上双引号)
    • -s:根据字符串来设置时间与日期(字符串前后必须加上双引号)
  • 参数

    显示当前时间:
    [root@localhost ~]# date
    2018年 02月 07日 星期三 09:56:28 CST

    查看系统日历:
    [root@localhost ~]# cal
    二月 2018
    日 一 二 三 四 五 六
    1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28

    // cal -y可以查看一年的日历

    “+时间日期格式”:指定日期和时间显示的格式

    date +%Y(%y):以四位(两位)数格式显示年份
    [root@localhost ~]# date +%Y
    2018
    [root@localhost ~]# date +%y
    18

    date “+%Y-%m-%d %H:%M:%S %w”
    表示:年、月、日、时、分、秒、星期
    [root@localhost ~]# date “+%Y-%m-%d %H:%M:%S %w”
    2018-02-07 10:02:43 3
    // 以上参数组合时,中间有特殊符号的话需要加双引号

    date +%F:显示完整的年月日
    [root@localhost ~]# date +%F
    2018-02-07

    date +%W:显示当前时间是一年的第几周
    [root@localhost ~]# date +%W
    06

    date +%T:显示当前时间是几点
    [root@localhost ~]# date +%T
    10:05:50

    date +%s:时间戳
    // 显示从1970年1月1日00:00:00到目前经历的秒数
    [root@localhost ~]# date +%s
    1517969292

    时间戳换算:
    [root@localhost ~]# date +%s -d “20180207 10:10:00”
    1517969400
    [root@localhost ~]# date -d @1517969400
    2018年 02月 07日 星期三 10:10:00 CST

打印指定日期&时间

  • 有时候需要使用N天(小时、分钟、秒)前的日期或时间

    两天以前:
    date -d “-2 day”
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:14:10 CST
    [root@localhost ~]# date -d “-2 day”
    2018年 02月 05日 星期一 10:14:13 CST

    两天以后:
    date -d “+2 day”
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:14:58 CST
    [root@localhost ~]# date -d “+2 day”
    2018年 02月 09日 星期五 10:15:02 CST

    一年两个月一天以前:
    date -d “-1 year -2 month -1 day”
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:16:32 CST
    [root@localhost ~]# date -d “-1 year -2 month -1 day”
    2016年 12月 06日 星期二 10:16:34 CST

时间设置

  • 手动设置时间:date -s “年-月-日 时:分:秒”

    [root@localhost ~]# date -s “2017-01-01 12:00:00”
    2017年 01月 01日 星期日 12:00:00 CST
    [root@localhost ~]# date
    2017年 01月 01日 星期日 12:00:02 CST

  • 同步网络时间:ntpdate命令

    [root@localhost ~]# yum install -y ntp
    // 安装ntpdate命令

    [root@localhost ~]# ntpdate ntp1.aliyun.com
    7 Feb 10:24:16 ntpdate[2681]: step time server 182.92.12.11 offset 34726773.904725 sec
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:24:24 CST
    // ntpdate 后面跟ntp时间服务器地址

shell 脚本中的变量

  • 当脚本中使用某个字符串较频繁,并且字符串长度很长,此时就应该使用变量来代替该字符串。

  • 使用条件语句时,常使用变量 if[$a -gt 1];then…;fi

  • 引用某个命令的结果时,用变量替代 n=’wc -l 1.txt’

  • 写和用户交互的脚本时,变量也是必不可少的 read -p “input a number:”n; echo $n 如果没写这个n,可以直接使用¥REPLY

  • 内置变量$0,$1,$2… $0表示脚本本身,$1第一个参数,$2第二个参数 $n表示第n个参数

  • 数学运算 a=1;b=2;c=$(($a+$b))或者$[$a+$b]

转载于:https://blog.51cto.com/754599082/2069721

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107714.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月13日 上午10:00
下一篇 2022年3月13日 上午10:35


相关推荐

  • python之map函数

    python之map函数map()函数会根据提供的函数对指定序列做映射。语法如下:map(func,*iterables)–>mapobject||Makeaniteratorthatcomp

    2022年7月6日
    34
  • RCU机制学习

    RCU机制学习RCU 是一组 Linux 内核 API 实现了一种同步机制 允许多个读者与写者并发操作而不需要任何锁 这种同步机制可以用于保护通过指针访问的数据 RCU 读者只需要很低的额外成本 在典型的服务器内核配置下甚至是 0 成本 如果可能有多个写者 写者之间需要其他同步机制 除了使用 RCUAPI 直接访问指针数据 更多的使用方式是封装 API 使其用于链表访问 RCU 适用于读取数据量大而且可以接收读取到旧数据的场景

    2026年3月17日
    2
  • 爬虫入门经典(五) | 简单一文教你如何爬取高德地图

    爬虫入门经典(五) | 简单一文教你如何爬取高德地图  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/。PS:由于现在越来越多的人未经本人同意直接爬取博主本人.

    2022年7月25日
    17
  • setfacl 命令[通俗易懂]

    setfacl 命令[通俗易懂]setfacl命令是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。选项-b,–remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。-k,–remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。-n,–no-mask:不要重新计算有效权限。setfacl…

    2022年6月16日
    57
  • springboot集成CAS单点登录客户端

    springboot集成CAS单点登录客户端1.springboot项目pom.xml中添加cas客户端依赖包<dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.5.0</…

    2022年5月15日
    36
  • 如何将Python算法模型注册成Spark UDF函数实现全景模型部署

    如何将Python算法模型注册成Spark UDF函数实现全景模型部署背景 Background 对于算法业务团队来说 将训练好的模型部署成服务的业务场景是非常常见的 通常会应用于三个场景 部署到流式程序里 比如风控需要通过流式处理来实时监控 部署到批任务中 部署成 API 服务然而在现实世界中 很多算法工程师都会遇到需要花费很多精力在模型部署工程上的问题 平台割裂 训练和部署是在不同平台完成的 配合问题 部署一个模型 需要研发工程师 运维配合 才能完成这件事 技术问题 一般地 大数据里的批流亦或是 Web 服务一般用 Java Scala C 偏多些 而 A

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号