20.1 shell脚本介绍~20.4 shell脚本中的变量


	* shell是一种脚本语言 和传统的开发语言比较,会比较简单
	* 
shell有自己的语法;可以使用逻辑判断、循环等语法
	* 
可以自定义函数,目的就是为了减少重复的代码
	* 
shell是系统命令的集合
	* 
shell脚本可以实现自动化运维,能大大增加我们的运维效率




	* 开头需要加#!/bin/bash
	* 以#开头的行作为解释说明
	* 脚本的名字以.sh结尾,用于区分这是一个shell脚本
	* 执行方法有两种
	* chmod +x 1.sh; ./1.sh
	* bash 1.sh
	* 查看脚本执行过程 bash -x 1.sh
	* 查看脚本是否语法错误 bash -n 1.sh

一、实践操作:
1)创建一个shell文件夹,并切入到文件夹中

# mkdir shell
# cd shell/
2)写shell脚本
#! /bin/bash //第一行必须这么写,固定格式,作用就是脚本若是在当台机器上去执行,可以不加这一行也没关系,因为它知道下面若干条的命令能在这台机器上去执行,去解析

#!/bin/bash
echo "abc"
w
ls
3)执行脚本----->sh 1.sh

# sh 1.sh
abc
18:25:12 up  1:32,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.43.1     17:08    0.00s  0.02s  0.00s sh 1.sh
1.sh
	1. 
在当前终端里,把1.sh中的#! /bin/bash 去掉后在执行脚本,会看到得到的结果相同,不会出现任何的问题,这就说明这台机器是能识别里面一条一条的命令的,去运行这里面的命令;但若是换一台机器,就不一定能执行了


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


4)给1.sh文件一个执行权限 chmod a+x 1.sh

# chmod a+x 1.sh
5)执行shell脚本 ./1.sh 能这样执行,说明这些命令被解析了,被/bin/bash认识了

# ./1.sh
abc
18:31:43 up  1:38,  1 user,  load average: 0.02, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.43.1     17:08    7.00s  0.13s  0.00s /bin/bash ./1.sh
1.sh
6)/bin/bash也是一条命令,/bin/bash和/bin/sh是同一个文件

# ll /bin/bash
-rwxr-xr-x 1 root root 964544 Apr 11 08:53 /bin/bash
[root@master shell]# ll /bin/sh
lrwxrwxrwx 1 root root 4 Aug 13 18:23 /bin/sh -> bash
7)1.sh文件内容就是被/bin/bash所解析的;若没有 /bin/bash ,可以使用 /bin/bash 1.sh去执行

# /bin/bash 1.sh
abc
18:36:25 up  1:43,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.43.1     17:08    1.00s  0.03s  0.00s /bin/bash 1.sh
1.sh
8)1.若是在shell脚本中在写入第二遍 #号开头的行, 就表示解释说明的作用
2.脚本的一般都是以.sh结尾,是为了区分这是一个shell脚本,否则需要打开这个文件,才知道是shell脚本
3.运行shell脚本有两种方法
	* 
一种是sh 1.sh运行shell脚本
	* 
另一种方法

		* 
先 chmod a+x 1.sh 给文件加一个执行权限
		* 
再 ./1.sh 去执行

			* 
这里的 ./ 就相当于一个相对路径,相对当前一个路径
			* 
也可以使用绝对路径去执行脚本 /root/shell/1.sh ,其实就是找到这个文件去执行



# /root/shell/1.sh
abc
18:39:10 up  1:46,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.43.1     17:08    6.00s  0.03s  0.00s w
1.sh
9)查看脚本执行过程 sh -x 1.sh 或者bash -x 1.sh
-x,就是显示脚本执行的过程
每一个加号,表示一个操作步骤

# sh -x 1.sh
+ echo abc
abc
+ w
18:42:06 up  1:48,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.43.1     17:08    6.00s  0.03s  0.00s sh -x 1.sh
+ ls
1.sh
10)查看脚本是否有错误 sh -n 1.sh,若是没有任何的输出,那么脚本则没有错误,sh -n 1.sh命令是检测是否存在语法错误

# sh -n 1.sh



	* date +%Y-%m-%d, date +%y-%m-%d 年月日
	* date +%H:%M:%S = date +%T 时间
	* date +%s 时间戳
	* date -d @1504620492
	* date -d "+1day" 一天后
	* date -d "-1 day" 一天前
	* date -d "-1 month" 一月前
	* date -d "-1 min" 一分钟前
	* date +%w, date +%W 星期

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

# LANG=en    切换为英文显示
# date
Wed Jul 11 23:01:05 CST 2018
# date +%Y
2018    四位的年
# date +%y
18        两位的年
# date +%m
07        月份
# date +%M
02        分钟
# date +%d
11       日期
# date +%D
07/11/18    直接标记年月日,不过格式比较特殊
# date +%Y%m%d
20180711    年月日
# date +%F
2018-07-11    年月日,这种带横杠的
2)常见的时间单位

# date +%w
3        表示周几
# date +%W
28        今年的第几周,今年的第28周
# date +%h
Jul        英文的月份
# date +%H
23            小时
# date +%S
53            秒
# date +%s
1531322044    这是一个时间戳,距离1970总共过去多少秒

3)时间其他标记方法
date +%H:%M:%S = date +%T 时间

# date +%T
19:26:06
# date +%H:%M:%S
19:26:31

4)显示日历 cal命令,查看到日期

# cal
     August 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 31

注:标记之前的日期
	* 
比如:在做nginx日志切割的时候,到了凌晨切割日志,到了零点零分切割的日志是前一天的日志。所以把日志加一个时间标记的话,应标记为昨天的日期
	* 
学会用date标记之前的日期
	* 
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 显示下一分钟


5)时间戳  date +%s
另一种表现方法,表示时间戳
date -d @1531322291就是@后跟时间戳

# date +%s
1535456624
# date -d @1535456624
Tue Aug 28 19:43:44 CST 2018

6)想在linux系统中,把具体的日期换算成时间戳的时候,可以使用date +%s -d "2018-08-28 11:46:00"

# date +%s -d "2018-08-28 11:46:00"
1535427960
# date -d @1535427960
Tue Aug 28 11:46:00 CST 2018



	* 当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
	* 
使用条件语句时,常使用变量 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]


 

转载于:https://my.oschina.net/xiaoliangxiansen/blog/2051197

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值