Day 28 课堂笔记

shell 编程基础

为后期的集群架构做准备

1,在linux系统中会大量使用shell,工作中的我们也需要自动化实现业务,

例如:自动备份 ,监控,自动安装服务。

Shell编程是linux运维人员必须要会的编程语言,也是最简单的编程语言

编程也是运维人员必须具备的本领:shell    python是运维人员必须具备的本领

2,什么是shell

Shell就是一个解释器,命令行的命令以及脚本都会通过shell解释,传给操作系统,处理后在输出给用户

3shell分类

Bourne  shell

C shell

[root@zhangxiangyu-58 ~]# cat /etc/shells

/bin/sh

/bin/bash

/usr/bin/sh

/usr/bin/bash

4,C7:默认的shell

[root@zhangxiangyu-58 ~]# echo $SHELL

/bin/bash

5,什么是shell脚本?

一般我们会把程序,命令放入文件中执行,这个文就称为shell脚本

工作中最多的就是编程写脚本,存放在文件里

6shell变量:

   A,全局变量(环境变量)

        在整个系统中生效,一般是大写,系统中默认就存在一些这样的变量,满足系统和程序运行的需求

   

 系统自带的环境变量:     

[root@zhangxiangyu-58 ~]# echo $PS1

[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$

   [root@zhangxiangyu-58 ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

自定义环境变量:

export  OLDBOY=“I  am  oldboy”

/etc/profile==> ~/.bash_profile ===> ~.bashrc===>/etc/bashrc

推荐把环境变量放入/etc/bashrc

root@zhangxiangyu-58 ~]# export OLDBOY="I am oldboy"

[root@zhangxiangyu-58 ~]# . /etc/bashrc

[root@zhangxiangyu-58 ~]# echo $OLDBOY

I am oldboy

    B,局部变量(自定义变量)

      是编写shell脚本最常用的变量

变量名=

a=1

变量名:数字 字母 下划线 但不能是数字开头

等号在这里面叫做赋值符,也就是把什么东西给谁

值:就是东西,变量内容。

        引用内容的符号:单引号,双引号,反引号,不加引号

[root@zhangxiangyu-58 ~]# a=1  >>>把1赋值给a,也就是a里面有个1

[root@zhangxiangyu-58 ~]# echo $a

1

[root@zhangxiangyu-58 ~]# a=oldboy    >>>默认会覆盖

[root@zhangxiangyu-58 ~]# echo $a

oldboy

[root@zhangxiangyu-58 ~]# y=$x+1

[root@zhangxiangyu-58 ~]# echo $y

1+1

[root@zhangxiangyu-58 ~]# y='$x+1'

[root@zhangxiangyu-58 ~]# echo $y

$x+1

[root@zhangxiangyu-58 ~]# let y="$x+1" >>>让括号里的内容进行计算

[root@zhangxiangyu-58 ~]# echo $y

2

[root@zhangxiangyu-58 ~]# a=1

[root@zhangxiangyu-58 ~]# echo ${a}b

1b

7,表达式

[ ]  中括号表达式,中括号里的两边必须要有空格。

字符串要加双引号

[root@zhangxiangyu-58 ~]# [ a=a ] && echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# [ "a" = "b" ] && echo 1||echo 0

0

如果表达式成立,打印1 ,否则打印0

[root@zhangxiangyu-58 ~]# [ "a" = "b" ] && echo 1  >>>&&前面的去后面的就跟着去

[root@zhangxiangyu-58 ~]# [ "a" = "b" ] ||echo 0  >>>||前面的去后面的就不去,前面的不去,后面的就去

0

取反

[  !  “a”  =  “b”  ]  && echo 1

整数表达式:

>          —gt

>=        —ge

<          —lt

<=        —le

=          —eq

不等于  —ne

[root@zhangxiangyu-58 ~]# a=1

[root@zhangxiangyu-58 ~]# [ $a -eq 2 ] && echo 1||echo 0

0

[root@zhangxiangyu-58 ~]# [ $a -eq 1 ] && echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# [ $a -gt 1 ] && echo 1||echo 0

0

[root@zhangxiangyu-58 ~]# [ $a -ge 1 ] && echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# [ $a -lt 2 ] && echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# [ $a -ne 2 ] && echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# [ $a -ne 1 ] && echo 1||echo 0

0

整数表达式符  两端必须要有空格

中括号里面的两端必须要有空格

变量和比较的内容可以不需要加引号

字符表达式:

—z  变量内长度为0时,为真(正确)。  Zero

—n  变量内容长度【不】为0时,为真(正确)  not zero

[root@zhangxiangyu-58 ~]# oldboy="I am oldboy"

[root@zhangxiangyu-58 ~]# [ -z "$oldboy" ]&& echo 1||echo 0

0

[root@zhangxiangyu-58 ~]# [ -n "$oldboy" ]&& echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# oldboy=""

[root@zhangxiangyu-58 ~]# [ -z "$oldboy" ]&& echo 1||echo 0

1

[root@zhangxiangyu-58 ~]# [ -n "$oldboy" ]&& echo 1||echo 0

0

a == a  字符串是否相同

说明:

字符串要加双引号

[root@zhangxiangyu-58 ~]# [ "test" == "host" ]&& echo 1||echo 0

0

[root@zhangxiangyu-58 ~]# [ "test" == "test" ]&& echo 1||echo 0

1

8,shell判断句

如果什么什么那么就什么什么

if  判断句语法

if  【表达式】

then   

         命令

fi

[root@zhangxiangyu-58 ~]# cat test.sh

#!/bin/bash

a=10

if [ $a -gt 1 ]

then

    echo 1

fi

[root@zhangxiangyu-58 ~]# cat test.sh

#!/bin/bash

boy="潜力股"

if [ "$boy" == "潜力股" ]

then

    echo "先和你谈谈朋友"

else

    echo "拜拜"

fi

[root@zhangxiangyu-58 ~]# bash test.sh

先和你谈谈朋友

书写脚本习惯:

1,以 .sh 结尾。

2,脚本开头第一行 #/bin/bash  脚本内容交给谁解释

read 交互式读取用户输入

read  命令  读取用户输入

-p  “提醒

-t  “多长时间内等待输入”

[root@zhangxiangyu-58 ~]# read -t 3 -p "你想干啥"

你想干啥[root@zhangxiangyu-58 ~]#

特殊位置变量:

$1 脚本文件的第一个参数

$2 脚本文件的第二个参数

9,for循环

for  n  in  取值列表

do

     执行命令

done

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容