十六周五次课python
20.1shell脚本介绍:shell
20.2shell脚本结构和执行方法ubuntu
20.3date命令用法vim
20.4shell脚本中的变量bash
20.1shell脚本介绍:网络
摘要: Shell是一个用C 语言编写的程序, 它是用户操做Linux的桥梁, 也就是平时咱们链接Linux 的所看到的命令行窗口。平时咱们输入的Linux 命令都是在Shell 程序中完成的。Shell 脚本, 我认为就是一组在Shell 程序中按照顺序执行的命令。一般使用的shell不会是太复杂的操做, 由于shell 脚本对于实现一些比较复杂的逻辑比较麻烦,由于对于比较复杂的逻辑可使用 python 语言实现。运维
shell是一种脚本语言函数
可使用逻辑判断、循环等语法spa
可自定义函数.net
shell是系统命令的集合
shell脚本能够实现自动化运维,能大大增长咱们的运维效果
shell就是系统中敲过的一些命令把它们写到了文件中,而后再去执行这个文件,批量的执行文件里的命令。
要想学好shell,首先要熟悉命令,各类服务的搭建,包括各类服务的管理和配置,只有懂了这些,才能写出来。另外,除了以上这些,还要懂一些判断。
20.2shell脚本结构和执行方法
结构
开头须要“#!/bin/bash”
脚本内容中以#开头的行做为解释说明
编写脚本时备注:做者、时间、功能等信息,方便以后查看
脚本的名字用“.sh”结尾,用于区分这是一个shell脚本
[root@localhost ~]# mkdir shell
[root@localhost ~]# cd shell
[root@localhost shell]# ls
[root@localhost shell]# vim 01.sh
#!/bin/bash
echo "123"
w
ls
[root@localhost shell]# sh 01.sh
123
07:47:04 up 30 min, 1 user, load average: 0.04, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 0.00s 0.17s 0.00s sh 01.sh
01.sh
[root@localhost shell]#
第1行以#!/bin/bash开头,表示该文件使用的是bash语法。若是不设置该行,你的shell脚本也能够执行,可是不符合规范。
[root@localhost shell]# vim 01.sh
echo "123"
w
ls
保存,退出。
[root@localhost shell]# sh 01.sh
123
07:51:14 up 34 min, 1 user, load average: 0.02, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 2.00s 0.20s 0.00s sh 01.sh
01.sh
[root@localhost shell]#
能够运行,说明这台机器是能够识别这些一条一条的命令的。若是不加开头,换一台机器,可能不会执行,开头是为了说明使用哪一个解释器(/bin/bash)来执行的。
执行方法:
给脚本添加执行权限“chmod a+x test.sh”,而后直接执行该脚本“./test.sh”
bash test.sh;sh test.sh
[root@localhost shell]# chmod a+x 01.sh
[root@localhost shell]# ./01.sh
123
07:55:47 up 39 min, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 3.00s 0.22s 0.00s /bin/bash ./01.sh
01.sh
[root@localhost shell]#
既然可以执行,就说明被解析了,被/bin/bash认识了。
[root@localhost shell]# cat 01.sh
#!/bin/bash
echo "123"
w
ls
[root@localhost shell]#
其实,/bin/bash是一条命令。
[root@localhost shell]# ll /bin/bash
-rwxr-xr-x. 1 root root 960472 Aug 3 05:11 /bin/bash
[root@localhost shell]#
[root@localhost shell]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Dec 21 11:43 /bin/sh -> bash
[root@localhost shell]#
/bin/bash和/bin/sh是同一个文件,若是没有开头#!/bin/bash,能够这样执行。
[root@localhost shell]# /bin/bash 01.sh
123
08:00:29 up 44 min, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 5.00s 0.26s 0.00s /bin/bash 01.sh
01.sh
[root@localhost shell]#
sh -x test.sh 查看脚本执行过程
[root@localhost shell]# sh -x 01.sh
+ echo 123
123
+ w
07:22:14 up 11:39, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:21 6.00s 0.07s 0.01s w
root pts/1 192.168.231.1 20:36 8:31m 0.05s 0.05s -bash
+ ls
01.sh
[root@localhost shell]#
每个+都是一个命令,下面一行是该命令的执行结果。
sh -n test.sh 查看脚本是否存在语法错误,若是出现语法问题,会报错,但报错的地方可能不太精确。
[root@localhost shell]# sh -n 01.sh
[root@localhost shell]#
20.3date命令用法
date命令用于显示或设置系统时间与日期。
语法: date [option] 参数
Options:
-d <string>:显示字符串指定的日期与时间(字符串先后必须加上双引号)
-s<string>:根据字符串来设置时间与日期(字符串先后必须加双引号)
参数:
<+时间日期格式>:指定日期和时间显示的格式
显示当前时区的当前时间:
[root@localhost shell]# date
Wed Jan 24 07:30:01 CST 2018
[root@localhost shell]#
经常使用日期格式
查看系统日历
[root@localhost shell]# cal
January 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
[root@localhost shell]#
注: cal=calendar(日历),“cal -y”能够查看一年的日历。
date +%Y(%y):以四位(两位)数字格式显示年份
[root@localhost shell]# date +%Y
2018
[root@localhost shell]# date +%y
18
[root@localhost shell]#
date "+%Y-%m-%d %H:%M:%S %w"
以上参数分别表示:年、月、日、时、分、秒、星期
[root@localhost shell]# date "+%Y-%m-%d %H:%M:%S %w"
2018-01-24 07:36:27 3
[root@localhost shell]#
date +%F:显示完整的年月日
[root@localhost shell]# date +%F
2018-01-24
date +%W:显示当前时间是一年的第几周
[root@localhost shell]# date +%W
04
date +%T:显示当前时间是几点
[root@localhost shell]# date +%T
07:39:43
date +%s:时间戳,显示从1970年1月1日00:00:00到目前经历的秒数
[root@localhost shell]# date +%s
1516750791
[root@localhost shell]# date +%s -d "2017-01-24 07:42:30"
1485214950
[root@localhost shell]# date -d @1485214950
Tue Jan 24 07:42:30 CST 2017
[root@localhost shell]#
打印制定日期&时间
有时候须要使用N天(小时、分钟、秒)前的日期或时间。
格式: date -d "1 day" +%d
[root@localhost shell]# date -d "-2 day" +%d
22
[root@localhost shell]# date -d "-1 year -2 month -1 day" +%Y-%m-%d
2016-11-23
说明: 指定某时间或日期的时候,后面要跟对应的时间格式参数(以上方法一样适用于时分秒)。
时间设置
手动设置时间:date -s “x-x-x x:x:x:”
[root@localhost shell]# date -s "2018-01-24 07:46:30"
Wed Jan 24 07:46:30 CST 2018
同步网络时间:ntpdate命令
[root@localhost shell]# yum install -y ntp
#安装ntp的同时会同步安装ntpdate命令
[root@localhost shell]# ntpdate ntp.ubuntu.com
24 Jan 07:48:15 ntpdate[12847]: step time server 91.189.89.198 offset -18.244893 sec
[root@localhost shell]# date
Wed Jan 24 07:48:43 CST 2018
20.4shell脚本中的变量
当脚本中使用某个字符串较频繁,而且字符串长度很长,此时就应该使用变量来代替该字符串。
[root@tianqi-01 shell]# vim variate.sh
#!/bin/bash
d=`date +%F`
echo "Today is $d"
[root@tianqi-01 shell]# sh variate.sh
Today is 2018-01-23
[root@tianqi-01 shell]#
说明: 该脚本中将变量d定义为了当前日
注意: 在shell脚本中将命令结果定义为变量时要使用反引号,调用变量的方法:“$变量名” 。
$0,$1,$2,$3……
$0:表示脚本自己
$1:第一个参数
$2:第二个参数
$#:表示参数的个数
[root@tianqi-01 shell]# vim sum.sh
#!/bin/bash
a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
注: 数学运算要用[ ]括起来,且前面要加符号$。
[root@tianqi-01 shell]# vim sum.sh
#!/bin/bash
read -p "Please input a number:" x
read -p "Please input a number:" y
sum=$[$x+$y]
echo "$x+$y=$sum"
[root@tianqi-01 shell]# sh sum.sh
Please input a number:6
Please input a number:7
6+7=13
[root@tianqi-01 shell]#
注: read命令用于和用户交互,它把用户输入的字符串做为变量值,可使用-t选项指定读取值时等待的时间(超出时间后自动退出脚本)。
有时候使用相似/etc/init.d/iptables restart的命令,前面的/etc/init.d/iptables文件其实就是一个shell脚本,后面的字符串restart就是预设变量。
[root@tianqi-01 shell]# vim option.sh
#!/bin/bash
sum=$[$1+$2]
echo "sum=$1+$2=$sum"
echo "Result of $0"
[root@tianqi-01 shell]# sh option.sh 7 8
sum=7+8=15
Result of option.sh
[root@tianqi-01 shell]#
说明: 脚本中的$1和$2即为shell的预设变量,分别为脚本的第一个参数和第二个参数,shell脚本预设变量是没有限制的,注意$0位脚本自己的名字。