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

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

  • 一.shell前言
    • 1.什么是shell
    • 2.shel语言特点
    • 3.shell能做什么
    • 4.shell多种执行方式
    • 5.shell解释器有哪些
  • 二.变量
    • 1.简介
    • 2.变量的类型
      • 2.1自定义变量
      • 2.2环境变量
      • 2.3位置变量和预定义变量
    • 3.变量的运算
      • 3.1整数运算
      • 3.2小数运算
    • 4.创建用户脚本

一.shell前言

1.什么是shell

Linux系统Shell编程及自动化运维实现-变量_第1张图片

2.shel语言特点

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

3.shell能做什么

  • 1.自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)
  • 2.自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
  • 3.应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)
  • 4.日志分析处理程序(PV, UV, 200代码, !200代码, top 100, grep/awk)
  • 5.自动化备份恢复程序(MySQL完全备份/增量 + Crond)
  • 6.自化管理程序(批量远程修改密码,软件升级,配置更新)
  • 7.自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  • 8.配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  • 9.自动化扩容(增加云主机——>业务上线)zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机)+ Shell Script(业务上线)
  • 10.俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现
  • 11.Shell可以做任何事(一切取决于业务需求)

4.shell多种执行方式

  • 执行方式1:bash 1.sh
  • 执行方式2:sh 1.sh
  • 执行方式3:. 1.sh
  • 执行方式4:source 1.sh
  • 1和2是子shell,不影响当前shell
  • 3和4是本shell,影响当前shell

5.shell解释器有哪些

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@localhost ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

二.变量

1.简介

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

2.变量的类型

2.1自定义变量

  • 定义变量:变量名=变量值 变量名必须以字母或下划线开头 区分大小写
  • 引用变量:$变量名 或 ${变量名}
  • 查看变量:echo $变量名 set可以查看所有变量(包括自定义变量和环境变量)
  • 取消变量:unset 变量名
  • 作用范围:仅在当前shell有效
  • 注意三种引号
1." " 弱引用
2.' ' 强引用
3.` `  反引号内shell命令优先执行

2.2环境变量

  • 定义环境变量:
方法1:export back_dir2=/home/backup
方法2:back_dir1=/home/backup
      export back_dir1   #将自定义变量换成环境变量
  • 引用环境变量:$变量名 或 ${变量名}
  • 查看环境变量:echo $变量名 或 env | grep back_dir2
  • 取消环境变量:unset 变量名
  • 变量作用范围:在当前shell和子shell有效

2.3位置变量和预定义变量

  • 位置变量 $1 $2 $3 …
  • 预先定义过的变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功 
  • 示例
[root@localhost ~]# vim 1.sh
#!/bin/bash
echo "第1个位置参数是$1"
echo "第2个位置参数是$2"
echo "第3个位置参数是$3"
echo "第4个位置参数是$4"
echo "第5个位置参数是$5"
echo "所有位置参数是$*"
echo "所有位置参数是$@"
echo "所有位置参数个数是$#"
echo "当前进程pid是$$"
echo '$1='$1
echo '$*='$*
echo '$@='$@
echo '$#='$#
echo '$$='$$

[root@localhost ~]# bash 1.sh 11 22 33 44 55 66
第1个位置参数是11
第2个位置参数是22
第3个位置参数是33
第4个位置参数是44
第5个位置参数是55
所有位置参数是11 22 33 44 55 66
所有位置参数是11 22 33 44 55 66
所有位置参数个数是6
当前进程pid是4255
$1=11
$*=11 22 33 44 55 66
$@=11 22 33 44 55 66
$#=6
$$=4255

3.变量的运算

3.1整数运算

1.方法一:expr

[root@localhost ~]# expr 1 + 2
3
[root@localhost ~]# expr 1 \* 2
2
[root@localhost ~]# expr 1 / 2
0
[root@localhost ~]# expr 1 % 2
1

2.方法二:$(())

[root@localhost ~]# echo $((1+2))
3
[root@localhost ~]# echo $((1*2))
2
[root@localhost ~]# echo $((1/2))
0
[root@localhost ~]# echo $((1%2))
1

3.方法三:$[]

[root@localhost ~]# echo $[1+2]
3
[root@localhost ~]# echo $[1*2]
2
[root@localhost ~]# echo $[1/2]
0
[root@localhost ~]# echo $[1%2]
1

4.方法四:let

[root@localhost ~]# let sum=2+3 ; echo $sum
[root@localhost ~]# let i++; echo $i

3.2小数运算

[root@localhost ~]# echo "scale=2;6/4" | bc   #交互运算器
[root@localhost ~]# awk 'BEGIN{print 1/2}'   #scale=2保留小数点后两位
[root@localhost ~]# echo "print 5.0/2" | python

4.创建用户脚本

  • 编写脚本,输入要创建的用户和密码
[root@localhost ~]# vim useradd.sh
#!/bin/bash
read -p "please input username:" name
read -p "please input password:" password
useradd $name
echo "$password" | passwd --stdin $name &> /dev/null
echo "$name create finished.the password is $password"

[root@localhost ~]# bash useradd.sh 
please input username:u1
please input password:1
u1 create finished.the password is 1
  • 编写脚本,配置本地yum源
[root@localhost ~]# vim yum.sh 
#!/bin/bash
#配置本地源-光盘
mount /dev/cdrom /mnt &> /dev/null

rm -rf /etc/yum.repos.d/*
cat < /etc/yum.repos.d/yum.repo
[local]
name=localyum
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
yum repolist all

你可能感兴趣的:(Linux,Shell编程及自动化运维实现,shell,linux)