12月27日任务

20.1 shell脚本介绍

20.2 shell脚本结构和执行

20.3 date命令用法

20.4 shell脚本中的变量

shell脚本介绍

shell是一种脚本语言,是一名运维工程师所必需掌握的最基本的能力。通过使用shell可以实现简单的自动化运维,从而减轻我们的工作压力,增加实际的工作效率。

shell脚本是系统命令的集合,通过使用shell的逻辑判断、循环语法、自定义的函数,可以实现更复杂功能脚本的编写。配合Linux的crond服务,能够实现周期性操作的自动化运行,从而大大减少运维工作量。

shell脚本的学习需要做到多学多练,熟能生巧。另外Linux基础知识也不容忽视,它是编写一个shell脚本的基础。只有勤学、多练,多思考,这样才能尽快、更好的学好shell编程。


Shell脚本结构和执行方法

一个shell脚本是以.sh结尾的文件,文件开头#!/bin/bash。 对于本机而言#!/bin/bash并不是必须的,但是对于其他机器上,不加开头就不一定可以执行,它的意思即其后的代码是由/bin/bash命令进行解析的。所以编写shell时最好都写上。

范例:example1.sh

vim example1.sh
#!/bin/bash
# by test

echo "hello world"

由#开头的行在shell中为注释行(#!除外),此外有些特殊的脚本中#开始的行并一定是注释,例如chkconfig脚本。

执行脚本的方法

  1. 先赋予执行权限,再./执行
# 这里脚本在当前工作目录中,执行其他路径下的脚本需要使用绝对路径
chmod +x example1.sh
./example
  1. 使用bash命令
bash example1.sh

查看脚本执行过程

sh -x example1.sh

检测脚本语法

# 没信息表明没有语法错误
sh -n example1.sh

date命令用法

date命令在shell脚本内十分有用,它可以生成想要的时间格式。

默认date命令显示

[root@localhost shell]# date

常用的几种时间格式表示

# 日期 YYYY-MM-DD 格式
date +%F == date +%Y-%m-%d

# 时间 HH:MM:SS 格式
date +%T == date +%H:%M:%S

# 几天前、后...
date -d "+1 day"    // 一天后(明天的日期)
date -d "-1 day"    // 一天前(昨天的日期)
date -d "-1 month"  // 一月前(上个月的今日)
date -d "-1 min"    // 一分钟前

# 自1970-01-01后的秒数
date +%s

# 将+%s的秒数换为具体时间
date -d @1504697280

# 将具体时间描述换算为秒数
date +%s -d "2018-02-05 19:30:00"

#星期几即本年的第几周
date +%w --> 1 //星期一
date +%W --> 06 //18年的第6周
date +%a --> Mon //周一
date +%A --> Monday //周一全称

# 月份
date +%b --> Feb
date +%B --> February

Shell脚本的变量

shell变量的使用场景

字符串替换

shell的编写过程中,如果某些字符串多次使用并且字符串的长度较长时可以使用shell变量进行代替,在使用时使用$变量进行操作,减少重复劳动。例如某些命令的绝对路径表示。

条件判断

此外在shell条件判断语句时,也常用变量,例如:

if[ $a -gt 1 ]
then
    ...
fi

命令引用

引用某个命令的结果时,将命令的结果赋予某个变量,在后续便于进行判断等条件处理。例如 n=wc -l 1.txt

命令交互

写于用户交互的脚本时,变量也是必不可少的。例如:

read -p "Input a number: " n
echo $n

内置变量

shell内有一些内置变量,其使用场景还是比较广泛的。

$0 --> 脚本本身
$1 --> 脚本后接的第一个参数
$2 --> 脚本后接的第二个参数
$# --> 参数的个数
$@ -->

数学运算

shell内可以进行简单的数学运算:

a=1
b=2
c=$(($a+$b)) //或c=$[$a+$b]
12-28 01:14