43-Shell编程基础

格式

#!/bin/bash
#!幻数 指定脚本用的命令解释器
执行脚本
sh
sh +x

1、为什么要学习shell编程?

Linux系统中会大量的使用Shell,工作中我们也需要自动化实现业务,例如:自动备份、监控、自动安装服务
Shell编程是Linux运维人员必须要会编程语言。最简单的编程语言。
编程也是运维人员必须具备的本领:
Shell、python是运维人员必须具备的本领

2、什么是Shell?

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

3、Shell的分类

/bin/sh、/bin/bash、/usr/bin/sh、/usr/bin/bash

4、CentOS7默认脚本是Shell

[root@zhang ~]# echo $SHELL
/bin/bash

5、什么是Shell脚本?

程序、命令放入文件里执行,这个文件称之为Shell脚本文件。
工作中最多的编程写脚本,存放在文件里。

二、变量

1.变量

方便脚本里面进行重复使用

命名规则
    看见变量名称  识别变量作用
    不能以数字开头

变量分类
    局部变量(普通变量)
    IP=10.0.0.200
    time=2019-01-01

全局变量(环境变量)
    系统创建
        在整个系统中生效
    大部分地方意思一样
    一般是大写

特殊变量
        \$?  数字  \$#  \$*

2.局部变量(普通变量)

16952149-634200bda953fb7e.png
image

3.引号系列

16952149-ccb04eb3cbd3ced7.png
image

4.特殊变量

16952149-e0d79be1e3cb3fe7.png
image

5.局部变量和全局变量区别:

[root@m01 /server/scripts]# LIDAO=996
[root@m01 /server/scripts]# 
[root@m01 /server/scripts]# echo $LIDAO
996
[root@m01 /server/scripts]# cat show.sh 
#!/bin/bash
echo $LIDAO
[root@m01 ~]# sh show.sh  \\执行脚本为空

[root@m01 ~]# 
[09:17 root@m01 ~]#  export LIDAONB  \\添加全局变量
[09:22 root@m01 ~]# echo $LIDAONB
666
[09:22 root@m01 ~]# sh show.sh 
666

6.局部变量和全局变量区别

https://www.processon.com/view/link/5a0e4380e4b06c8e10923353

16952149-e9ac48f3db41ee1e.png
image
16952149-186b6fb8aa849faa.png
image

7.awk的 -v 参数

[09:49 root@m01 ~]# x=10
[09:49 root@m01 ~]# y=99
[09:49 root@m01 ~]# echo $x
10
[09:49 root@m01 ~]# echo $y
99
[09:49 root@m01 ~]# awk 'BEGIN{print $x/$y}'
awk: cmd. line:1: fatal: division by zero attempted
[09:49 root@m01 ~]# awk -vn1=10 -vn2=99 'BEGIN{print n1/n2}'
0.10101
[09:51 root@m01 ~]# awk -vn1=$x -vn2=$y 'BEGIN{print n1/n2}'
0.10101
[09:51 root@m01 ~]# awk -vx=10 -vy=99 'BEGIN{print x/y}'
0.10101
[09:53 root@m01 ~]# 

8.利用shell编译小型计算器

[10:18 root@m01 ~]# vim show.sh 
#!/bin/bash
. /etc/profile
x=$1
y=$2

echo $1\+$2= ;awk -vx=$x -vy=$y 'BEGIN{print x+y}'
echo $1\-$2= ;awk -vx=$x -vy=$y 'BEGIN{print x-y}'
echo $1\*$2= ;awk -vx=$x -vy=$y 'BEGIN{print x*y}'
echo $1\/$2= ;awk -vx=$x -vy=$y 'BEGIN{print x/y}'

[10:19 root@m01 ~]# sh show.sh 5 6
5+6=
11
5-6=
-1
5*6=
30
5/6=
0.833333

知识有限暂不支持小数运算

16952149-f4358a5a2f9c0c13.png
image
16952149-b2ffdf740a0e2c18.png
image

9.特殊变量中简单判断参数个数:

16952149-d9ff6e10bb2d9edf.png
image
16952149-1e1406e2cc875141.png
image

10.判断目录存不存在,不存在就创建

16952149-b7ba11ab70afeb3d.png
image
16952149-c1fd3735773015e0.png
image

三、判断语句

if判断句语法:单分支: 如果。。。那么就
if [ 表达式 ]
then命令
else
exit 退出
fi 果如

1.if语句格式:

if [ 表达式 ]
    then命令
    exit 退出
fi

16952149-02c95db033dc5d95.png
image
16952149-17e6ab5d7b082e4d.png
image

2.对比两个数值大小

16952149-226c5d1a33ce2201.png
image
16952149-4842ba1920c8c5d2.png
image

3.检查定时任务是否运行中

16952149-29e9ac0bc174f36f.png
image
16952149-55272ddfed6454da.png
image

避免过滤的时候 过滤掉grep命令自己

16952149-4226bfdca482d490.png
image

四、循环语句

for语句

16952149-c1bf605a8d4a8c42.png
image

五、扩展:

read命令

http://man.linuxde.net/read

从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY

-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。

16952149-a3dc9a5e73681feb.png
image
16952149-899134561cf68bca.png
image

转载于:https://www.jianshu.com/p/336214447c94

猜你喜欢

转载自blog.csdn.net/weixin_33910385/article/details/91264381