600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Linux Shell编程及自动化运维实现 变量

Linux Shell编程及自动化运维实现 变量

时间:2022-06-15 11:46:45

相关推荐

Linux Shell编程及自动化运维实现 变量

SHELL 前言

什么是shell

shell壳命令解释器,一种应用程序。shell语言的特点SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。Shell 能做什么?Shell 能做什么?

自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)日志分析处理程序(PV, UV, 200代码, !200代码, top 100, grep/awk)自动化备份恢复程序(MySQL完全备份/增量 + Crond)自动化管理程序(批量远程修改密码,软件升级,配置更新)自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)自动化扩容(增加云主机——>业务上线)

zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上线)俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现Shell可以做任何事(一切取决于业务需求)

SHELL执行方式:

shell多种执行方式

准备测试脚本

[root@localhost tmp]#vim file1

echo “hello ”

read -p “请输入您的姓名:” name

echo “哈哈 $name 是大笨蛋”

执行1:bash file1

执行2:sh file1

which bash

which sh

发现是同一个文件

执行3:. file1

执行4: source file1

同理执行3

多种执行方式的区别

1和2的方式,是子shell

3和4的方式,是本shell

1.准备环境

vim bash.sh

#!/usr/bin/bash

cd /home/

ls

一种执行方式测试

. bash.sh

3.观察目录改变了。说明影响的是当前。并使用子shell执行方式执行。

该种执行方式,是不同于前者SUB shell执行。

而是在当前shell执行,用于影响当前shell环境。

shell解释器在哪

cat /etc/shells

chsh -l

变量

简介

shell 变量? 用一个固定的字符串去表示不固定的内容,便于修改。

1. 自定义变量

简述

用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户自由定义的。

学习要点

定义变量: 变量名=变量值

引用变量: $变量名

或 ${变量名}

查看变量: echo KaTeX parse error: Expected 'EOF', got '#' at position 135: …ot@localhost ~]#̲ name="xulei 66…“符号。

那么最简单的变量调用就是通过 echo 命令输出变量的值。命令如下

#定义变量name

[root@localhost ~]# name=“xulei 666”

#输出变量name的值

[root@localhost ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 73: …则,就会报错。比如: #̲变量名不能以数字开头 …aa"456

#调用变量aa,发现值已经变成了123456

[root@localhost ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 18: … 123456 #̲在进行变量叠加时,也可以使用{变量名}格式

[root@localhost ~]# aa=${aa}789

[root@localhost ~]# echo $aa

123456789

这里要小心,在进行变量叠加时,变量名需要用双引号或 ${} 包含。

变量查看

我们可以通过 echo 命令查询已经设定的变量的值,这种查询是已知变量名查询变量值。

但是如果我不知道变量名,那么可以查询系统中已经存在的变量吗?

[root@localhost ~]# set

变量删除

要想删除自定义变量,可以使用 unset 命令。命令格式如下:

[root@localhost ~]# unset 变量名

这条命令执行之后,再查询变量,就会发现这个变量已经为空了。

[root@localhost ~]# unset name

[root@localhost ~]# echo $name

输出是空的

示例

使用变量前

需求

编写测试主机在线的脚本。当主机在线提示在线,当主机不在线提示不在线。

编写脚本

[root@localhost ~]vim ping.sh

ping -c1 192.168.100.10 &> /dev/null && echo 192.168.100.10up || echo 192.168.100.10down

注释

&&和||是三目表达式

&& 前面的命令成功。执行后面的命令

||前面的命令失败。执行后面的命令

授权脚本

[root@localhost ~]#chmod +x ping.sh

执行脚本

[root@localhost ~]#./ping.sh

思考

如果更换测试IP。需要修改脚本的哪些部分?

需要修改三个部分

使用变量后

编写脚本

[root@localhost ~]vim ping.sh

#!/bin/bash

ip=192.168.100.10

ping -c1 $ip &>/dev/null && echo i p u p ∣ ∣ e c h o " ip up || echo " ipup∣∣echo"ip down”

授权脚本

[root@localhost ~]# chmod +x ping.sh

执行脚本

[root@localhost ~]# ./ping.sh

思考

添加变量后,修改一处即可。

交互定义变量

read 从键盘读入变量值

赋值方式

read 变量名

示例

read -p “请输入您测试的IP地址:” ip

ping -c1 $ip &>/dev/null && echo " i p u p " ∣ ∣ e c h o " ip up" || echo " ipup"∣∣echo"ip

down"

注意事项:3种引号

定义或引用变量时注意事项:

" " 弱引用

’ ’ 强引用

优先执行

双引号1

[root@localhost ~]# schoo=1000 phone

错误示范,shell把空格识别做命令分隔符。

bash: phone: 未找到命令

[root@localhost ~]# schoo=“1000 phone”

正确示范,变量值中的空格,被转义为一个普通符号

[root@localhost ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 71: …ot@localhost ~]#̲ schoo=schoo is good

错误示范,已有变量的基础上,再追加内容。

bash: is: 未找到命令

没有加引号,被识别为两条命令

[root@localhost ~]# schoo="$schoo is good"

正确示范,加了双引号。组成了整体,空格失去含义。

[root@localhost ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 75: …ot@localhost ~]#̲ schoo='schoo 666’

单引号,转义一切符号

[root@localhost ~]# echo $schoo

$schoo 666

$也被转义了。一切都被转义了。

反引号

[root@localhost ~]# schoo=date

反引号是优先执行。先执行date的命令,再执行定义变量。

[root@localhost ~]# echo $schoo

05月 06日 星期三 14:57:13 CST

所以看到变量的结果,是时间

注意

变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

中间不能有空格,可以使用下划线(_)。

不能使用标点符号。

不能使用bash里的关键字(可用help命令查看保留关键字)。

起变量名,请使用五个字母以上。

2. 整数运算

方法一:expr

语法

expr 1 + 2

expr $num1 + $num2

+加

-减

*乘(是任意字符,使用\ 转义一下。)

/除

%取余

案例

需求

运算学员的成绩总分

制作脚本

[root@localhost ~]# vim sum.sh

#!/bin/bash

read -p "请输入您的第一门成绩: " number1

read -p "请输入您的第二门成绩: " number2

echo -n "总成绩是: "

expr $number1 + KaTeX parse error: Expected 'EOF', got '#' at position 41: …ot@localhost ~]#̲ chmod +x sum.s…(())

语法

echo ( ( (( ((num1+$num2))

echo $((num1+num2))

echo $((5-32))

echo ( ( 2 ∗ ∗ 3 ) ) / / ( 蜜 ) 2 的 3 次 方 方 法 三 : ((2**3)) //(蜜)2的3次方 方法三: ((2∗∗3))//(蜜)2的3次方方法三:[]

语法

echo $[5+2] + - * / %

echo $[5**2]

方法四:let

示例

let sum=2+3; echo $sum

let i++; echo $i

3. 小数运算(了解)

请提前安装计算器程序bc

echo "24" |bc

echo “2^4” |bc

echo “scale=2;6/4” |bc

bc:交互运算器

scale=2 保留小数点后面两位

4. 环境变量(了解)

前言

自定义变量,只能再当前shell生效。其他shell是不生效的。

说白了,你的变量只能你用。那如果有些变量,需要所有的用户都使用用。

怎么办呢?

定义环境变量:

直接声明

方法一 export back_dir2=/home/backup

声明环境变量

转换声明

方法二 export back_dir1 将自定义变量转换成环境变量

转换环境变量

变量作用范围: 在当前shell和子shell有效

想使变量。在当前用户登陆后一直生效,可以将变量放到~/.bash_profile

想使变量。在所有用户登陆后一直生效,可以将变量放到/etc/profile

示例

[root@localhost ~]# abc=123

定义普通变量1

[root@localhost ~]# def=456

定义普通变量2

[root@localhost ~]# bash

打开子shell

[root@localhost ~]# echo $abc

调用普通变量,失败

[root@localhost ~]# echo $def

调用普通变量,失败

[root@localhost ~]# exit

退出子shell

exit

[root@localhost ~]# export abc

讲变量声明为环境变量。儿子shell都能用。

[root@localhost ~]# bash

打开子shell

[root@localhost ~]# echo $abc

发现变量可以用了。

123

[root@localhost ~]# echo $def

普通变量还是不行。

5. 位置变量和预定义变量(了解)

位置变量语法

位置变量

命令 参数1 参数2 参数3 …9以后特殊定义

$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 …

示例

需求

制定脚本程序,用户自行输入两门学科的成绩(整数),自动算出平均分。

制作脚本

[root@localhost ~]# vim avg.sh

#!/bin/bash

echo “($1+KaTeX parse error: Expected 'EOF', got '#' at position 34: …ot@localhost ~]#̲ chmod +x …num1+$num2)/2” |bc

总结

1.位置变量就是$1,$2,$3,$4

2.位置变量预先已经被定义过了。

3.用户使用时,必须携带参数。

4.位置变量不是程序设计的唯一方法。比如read也可以。

预定义变量

$0 脚本名/程序名

$所有的参数

$# 参数的个数

$? 上一个程序的返回值(0是成功,非零失败)

$$ 程序的PID

示例

定义脚本

[root@localhost ~]# vim avg.sh

#!/bin/bash

echo “($1+$2)/2” | bc

echo “该程序名为 0 " e c h o " 该 程 序 使 用 了 0" echo "该程序使用了 0"echo"该程序使用了# 个参数”

echo “该程序的参数如下: $*”

调用脚本

[root@localhost ~]# ./avg.sh 60 50

55

该程序名为./avg.sh

该程序使用了2 个参数

该程序的参数如下: 60 50

总结

这两类变量,在设计系统时就已经定义好了。

需要使用时,直接调用即可。

课后题

编写自动创建用户并设置初始密码的脚本。

#!/bin/bash

read -p "please input username: " name

useradd $name

echo “123456” | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 6: name &̲> /dev/null ech…name create finished,the password is 123456"

编写脚本,配置本地yum源

#!/bin/bash

mount /dev/cdrom /mnt &> /dev/null

rm -rf /etc/yum.repos.d/*

cat << EOF > /etc/yum.repos.d/yum.repo

[local]

name=localyum

baseurl=file:///mnt

enabled=1

gpgcheck=0

EOF

yum repolist all

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。