十六周二次课

20.1 shell脚本介绍

shell 是一种脚本语言;和传统的开发语言比较,会比较简单

shell有自己的语法;可以使用逻辑判断、循环等语法

可以自定义函数
定义函数的目的,就是为了减少重复代码

shell是系统命令的集合

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

20.2 shell脚本结构和执行

开头需要加#!/bin/bash //告诉系统,这个脚本是通过哪一个解释器来进行操作的

以#开头的行作为解释说明

脚本的名字以.sh结尾,用于区分这是一一个shell脚本

执行方法有两种:

chmod +x 1.sh; ./1.sh
bash 1.sh

查看脚本执行过程

bash -x 1.sh
[[email protected] shell]# sh -x 01.sh
+ echo 123        //表示运行的命令
123
+ w
20:34:44 up  3:11,  1 user,  load average: 0.50, 0.56, 0.56
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.22.220    10:23    1.00s  0.07s  0.01s w
+ ls
01.sh

查看脚本是否有语法错误

bash -n 1.sh

没有输出,表示没有错误

修改一下文件测试一下错误

#!/bin/bahs
echo "123"
w
ls
for i in `seq 1 10`
do
  echo $i
don

检查错误:

# sh -n 01.sh
01.sh:行9: 语法错误: 未预期的文件结尾

20.3 date命令用法

  • date +%Y-%m-%d, date +%y-%m-%d 年月日
[[email protected] ~]# date +%Y-%m-%d

2018-03-29

[[email protected] ~]# date +%y-%m-%d

18-03-29

[[email protected] ~]# date +%F

2018-03-29

[[email protected] ~]# date +%Y%m%d

20180329
  • date +%H:%M:%S = date +%T 时间
[[email protected] ~]# date +%H:%M:%S

11:18:24

[[email protected] ~]# date +%T

11:18:49
  • date +%s 时间戳
[[email protected] ~]# date +%s

1522293644

[[email protected] ~]# date +%s -d ‘2017-09-18 17:23:25‘

1505726605
  • date -d @1504620492 //转换时间戳为时间
[[email protected] ~]# date -d @1504620492

2017年 09月 05日 星期二 22:08:12 CST

[[email protected] ~]# date -d @`date +%s`

2018年 03月 29日 星期四 11:22:33 CST

[[email protected] ~]# date

2018年 03月 29日 星期四 11:22:54 CST
  • date -d "+1day" 一天后
[[email protected] ~]# date -d "+1day"

2018年 03月 30日 星期五 11:24:42 CST

[[email protected] ~]# date -d ‘1day‘ +%F

2018-03-30
  • date -d "-1 day" 一天前
[[email protected] ~]# date -d "-1day"

2018年 03月 28日 星期三 11:25:45 CST

[[email protected] ~]# date -d "1day ago"

2018年 03月 28日 星期三 11:28:36 CST

[[email protected] ~]# date -d "1day"

2018年 03月 30日 星期五 11:35:39 CST
  • date -d "-1 month" 一月前
[[email protected] ~]# date -d ‘-1month‘

2018年 03月 01日 星期四 11:38:13 CST

[[email protected] ~]# date -d "-1month"

2018年 03月 01日 星期四 11:38:52 CST
  • date -d "-1 min" 一分钟前
[[email protected] ~]# date -d ‘-1min‘

2018年 03月 29日 星期四 11:38:43 CST
  • date +%w, date +%W 星期
[[email protected] ~]# date +%w

4

[[email protected] ~]# date +%W

13
  • cal 以日历形式显示
[[email protected] ~]# cal

March 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

date +%w星期几;date +%W 本年的第几个星期
date -d "+1 day" +%F 一天后
date -d "-1 day" +%F一天前
date -d "-1 month" +%F一个月前
date -d "-1 min " +%F一分钟前
date -d "-1 year " +%F 一年前

20.4 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]
  • Shell编程中的注释以#开头
  • 对shell变量进行数字运算 使用expr 命令:expr integer operator integer,其中operator 为+ - / %, 但对的使用要用转义符\
  • Shell编程的参数传递, 可通过命令行参数以及交互式输入变量(read) 例:

restoreall.sh 对backup.sh程序的备份磁带进行恢复:

$ cat > restoreall.sh

cd $WORKDIR

cpio -i < /dev/rmt/0h
$      s hel l 变量名的开始 如$var
|      管道 将标准输出转到下一个命令的标准输入
#     注释开始
&     在后台执行一个进程
?        匹配一个字符
*       匹配0 到多个字符(与DOS不同可在文件名中间使用并且含.)
$-    使用set 及执行时传递给shell的标志位
$!     最后一个子进程的进程号
$#    传递给shell script 的参数个数
$*    传递给shell script 的参数
[email protected]    所有参数 个别的用双引号括起来
$?    上一个命令的返回代码
$0    当前shell的名字
$n    (n: 1-)  位置参数
$$    进程标识号(Process Identifier Number, PID)
>f i l e         输出重定向
<f i l e         输入重定向
`command`     命令替换 如    filename=`basename /usr/local/bin/tcsh`
>>fiile       输出重定向 append 

原文地址:http://blog.51cto.com/235571/2139505

时间: 2024-08-30 09:36:47

十六周二次课的相关文章

十二周二次课(3月13日)

十二周二次课(3月13日)12.6 Nginx安装 cd /usr/local/src wget http://nginx.org/download/nginx-1.12.1.tar.gz tar zxvf nginx-1.12.1.tar.gz cd nginx-1.12.1 ./configure --prefix=/usr/local/nginx make && make install 安装完成 编辑配置文件及启动脚本 vim /etc/init.d/nginx   复制如下内容.

十二周二次课 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.

十二周二次课 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.9 Nginx域名重定向 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.9 Nginx域名重定向 原文地址:http://blog.51cto.com/wbyyy/2087031

十六周一次课

十六周一次课 18.11 LVS DR模式搭建18.12 keepalived + LVS 18.11 LVS DR模式搭建 LVS DR模式搭建 DR模式搭建 – 准备工作 三台机器 分发器,也叫调度器(简写为dir) 133.130 rs1 133.132 rs2 133.133 vip 133.200 DR模式搭建 dir上编写脚本 vim /usr/local/sbin/lvs_dr.sh //内容如下 #! /bin/bashecho 1 > /proc/sys/net/ipv4/ip

十二周二次课(4月24日)

十二周二次课(4月24日)12.6 Nginx安装12.7 默认虚拟主机12.8 Nginx用户认证12.9 Nginx域名重定向 扩展nginx.conf 配置详解 http://www.ha97.com/5194.html http://my.oschina.net/duxuefeng/blog/34880nginx rewrite四种flag http://www.netingcn.com/nginx-rewrite-flag.html http://unixman.blog.51cto.

linux十四周二次课(5月10日)笔记

十四周二次课(5月10日)14.4 exportfs命令14.5 NFS客户端问题15.1 FTP介绍15.2/15.3 使用vsftpd搭建ftp 14.4 exportfs命令 如果远程客户端正在使用nfs服务,正在挂载着.如果服务端停止NFS服务,远程的客户端会挂起. A共享一个目录,B往里面写或读文件.如果A停掉了NFS,B就不能读写.如果B读写很频繁,就会导致读写共享文件的进程,比如PHP挂起.会导致进程异常,甚至把机器搞死.A不能随便重启,需要把B和C挂载的目录先卸载下来. 卸载掉挂

十五周二次课

18.6 负载均衡集群介绍 主流开源软件LVS.keepalived.haproxy.nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用 keepalived的负载均衡功能其实就是lvs lvs这种4层的负载均衡是可以分发TCP协议,web服务是80端口,除了分发80端口,还有其他的端口通信的,比如MySQL的负载均衡,就可以用LVS实现,而nginx仅仅支持http,https,mail,haproxy:haprox

20171121_Python学习六周二次课(11月21日)

任务: 12.5 游标12.6 mysql连接池12.7 设计表结构 笔记: a)      游标操作 我们先来看一个例子: 接下来,我们通过python代码增加一条数据到数据库中,代码如下: import MySQLdb def connect_mysql(): db_config = { 'host': '192.168.48.128', 'port': 3306, 'user': 'xiang', 'passwd': '123456', 'db': 'python', 'charset':

十四周二次课

14.4exports命令 14.5NFS客户端问题 15.1FTP介绍 15.2/15.3使用vsftpd搭建ftp服务 14.4exports命令 exportfs命令 常用选项 -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在服务端上 -vim /etc/exports //增加 /tmp/ 192.168.11.0(rw,sync,no_root_squash) exportfs -arv //不用重启nfs服务,配置文件就会生效 以下操作

十五周二次课、三次课(4月3日、4月4日)

不停库不锁表在线主从配置 http://blog.sina.com.cn/s/blog_6f2108260101kwxv.html mysql主从常见问题 1.从库的mysql命令行下执行:show slave status \G,查看三个状态:            Slave_IO_Running: Yes  表示从库的同步IO进程正常        Slave_SQL_Running: Yes 表示从库的执行同步过来SQL语句的进程正常        Seconds_Behind_Mast