文档章节

Shell编程(shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本变量)

蛋黄_Yolks
 蛋黄_Yolks
发布于 2018/09/14 00:10
字数 1766
阅读 183
收藏 12

shell脚本介绍

Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。

更明白地来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

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

shell脚本结构和执行

Shell脚本的第一行必须是:#!/bin/bash,"#!" 是一个约定的标记,后面跟着的/bin/bash是告诉系统这个脚本需要使用/bin/bash解释器来执行,即使用哪一种Shell。

简单来说就是告诉系统这是一个什么语言写的脚本,是python是shell或者是其他的脚本语言所写的,然后系统才能使用相应的解释器去执行这个脚本。不过如果这个shell脚本是在本机执行的话,倒是可以省略掉:#!/bin/bash,因为能够识别本机的命令,但是如果到另一台机器就不一定能够执行了,所以文件的第一行才要写这样的声明。

Shell脚本的文件名称是以.sh为后缀,用于区分这是一个shell脚本,shell中的注释符是井号“#”,和其他编程语言一样,注释的那一行内容不会被解释器执行,但是要注意区别“#!”和“#”,前者是标记,后者才是注释符。

编写第一个脚本

#!/bin/bash
echo "hello shell!"
w
ls

执行脚本的方法有三种:

  • sh studyshell01.sh
  • chmod a+x studyshell01.sh; ./studyshell01.sh
  • bash studyshell01.sh

第二种执行方法是给这个Hello.sh的脚本文件加上了可执行权限,所以可以当做一个二进制文件直接执行

sh和bash实际上是同一个命令,因为sh是bash的软连接文件:

查看脚本执行过程 bash -x studyshell01.sh ,每一个“+”代表执行的命令,后面跟着命令的执行结果。

查看脚本是否语法错误 bash -n studyshell01.sh,没有输出代表没有错误,否则直接输出错误:

但是要注意的是,这只是检查脚本的语法错误,如果你系统命令写错了,是不会被检查到的。

date命令用法

1.date命令,会显示当前系统时间日期

[root@yolks3 shell]# date
2018年 09月 13日 星期四 23:45:07 CST

2.date命令,在shell中用处非常大;对文件后缀增加一个时间,以便后期管理 3.date +%Y-%m-%d, date +%y-%m-%d 年月日

[root@yolks3 shell]# LANG=en #临时切换为英文显示
[root@yolks3 shell]# date
Thu Sep 13 23:46:51 CST 2018 //英文日期
[root@yolks3 shell]# date +%Y
2018                四位的年
[root@yolks3 shell]# date +%y
18                  两位的年
[root@yolks3 shell]# date +%m
09                 月份
[root@yolks3 shell]# date +%M
47                 分钟
[root@yolks3 shell]# date +%d
13                 日期
[root@yolks3 shell]# date +%D
09/13/18           特殊格式的年月日
[root@yolks3 shell]# date +%Y%m%d
20180913           组合年月日
[root@yolks3 shell]# date +%Y-%m-%d
2018-09-13         拼接年-月-日
[root@yolks3 shell]# date +%F
2018-09-13         格式化后的年-月-日
[root@yolks3 shell]# date +%H
23                 时
[root@yolks3 shell]# date +%s
1536853846         时间戳,表示距离1970年总共过去了多少秒
[root@yolks3 shell]# date +%S
57                 秒
[root@yolks3 shell]# date +%T
23:53:26           时间:时:分:秒

4.常见时间单位

[root@yolks3 shell]# date +%w
4                  今天周几
[root@yolks3 shell]# date +%W
37                 本周是今年第多少周

5.日历

[root@yolks3 shell]# cal
   September 2018   
Su Mo Tu We Th Fr Sa
                   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 29
30

6.标记之前或之后的时间

需求:在做nginx日志切割的时候,到了凌晨切割日志,到了零点零分切割的日志是前一天的日志。所以把日志加一个时间标记的话,应标记为昨天的日期

  • day、month、year、hour、min后面可以加 s 可以不加 s
  • 减号- 表示之前的日期,加号 + 表示从今往后的日期
  • date -d "-1 day" +%F 显示前一天的日期
  • date -d "-1 month" +%F 显示上个月的日期
  • date -d "-1 years" +%F 显示上一年的日期
  • date -d "+1 hour" +%T 显示下一小时
  • date -d "+1 min" +%T 显示下一分钟

示例:

[root@yolks3 shell]# date -d "-1 day"
Wed Sep 12 23:59:16 CST 2018
[root@yolks3 shell]# date -d "-1 day" +%F
2018-09-12
[root@yolks3 shell]# date -d "-1 month" +%F
2018-08-13
[root@yolks3 shell]# date -d "-1 months" +%F
2018-08-14

7.时间戳 : date +%s

另一种表现方法,表示时间戳 : date -d @1504620492 就是@后跟时间戳

[root@yolks3 shell]# date +%s
1536854629
[root@yolks3 shell]# date -d @1536854629
Fri Sep 14 00:03:49 CST 2018

8.若想在linux系统中,把具体的日期换算成时间戳的时候,可以使用date +%s -d "2018-09-14 00:06:19"

[root@yolks3 shell]# date +%F" "%T
2018-09-14 00:06:19  显示年月日时分秒
[root@yolks3 shell]# date +%s -d "2018-09-14 00:06:19"
1536854779  转换时间戳

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 第二个 .... $#表示参数个数
  • 数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]

© 著作权归作者所有

蛋黄_Yolks
粉丝 10
博文 100
码字总数 112269
作品 0
通州
私信 提问
Shell编程基础 shell的结构、执行及变量

12月27日任务 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量 shell脚本介绍 shell是一种脚本语言,是一名运维工程师所必需掌握的最基本的能力。通...

robertt15
2018/12/27
46
0
shell脚本介绍,shell脚本结构和执行方式,date命令的用法,shell脚本中的变量简介

笔记内容: 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量 笔记日期:2017-11-21 20.1 shell脚本介绍 Shell Script,Shell脚本与Windows/Dos下的批...

ZeroOne01
2017/11/21
0
0
2018-4-17 Linux学习笔记

20.1 shell脚本介绍 shell是一种脚本语言 (shell脚本学习: blog.lishiming.net) 可以使用逻辑判断、循环等语法 可以自定义函数 shell是系统命令的集合 shell脚本可以实现自动化运维,能大大增...

XiaoluHuang
01/07
0
0
shell脚本介绍&shell脚本结构和执行&date命令用法&shell脚本中的变量

20.1 shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net • 可以使用逻辑判断、循环等语法 • 可以自定义函数 • shell是系统命令的集合 • shell脚本可以实现自动化运维...

影夜Linux
2018/07/12
64
1
shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量

shell脚本介绍 shell是一种脚本语言 和传统的开发语言比较,会比较简单 shell有自己的语法;可以使用逻辑判断、循环等语法 可以自定义函数,目的就是为了减少重复的代码 shell是系统命令的集...

lyy549745
2018/07/11
79
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部