一、介绍shell 1.SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。 2.Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。 3.Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令; 4.作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 5.它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、 6.建立文件并以并行的方式协调各个程序的运行。 7.因此,对于用户来说,shell是最重要的实用程序, 8.深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。 二、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可以做任何事(一切取决于业务需求) 三、SHELL执行方式: shell多种执行方式 1准备测试脚本: (1)执行1:bash 1111.sh

(2)执行2:sh 1111.sh

(3)执行3: . 1111.sh

(4)执行4: source 1111.sh

(5)比较四种方式的所在位置: 区别:1和2的方式,是子shell 3和4的方式,是本shell

(6):shell解释器有哪些 :shell 命令就是前一阶段所学习的大部分命令。 cp ls date组合到一起。

Linux支持的shell有哪些呢? cat /etc/shells 或 chsh -l

四、变量类型: 1.自定义变量: 特性:1. 自定义变量(示例:ping01.sh引入变量) 定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115 引用变量: $变量名 或 ${变量名} 查看变量: echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量) 取消变量: unset 变量名 作用范围: 仅在当前shell中有效 2.实例:使用变量前。麻烦 ping -c1 10.8.162.120 &>/dev/null && echo 10.8.162.120up || echo 10.8.162.120.10down

(1)使用后简洁:

(2)测试:

2.变量赋值(定义变量):

(1) 显式赋值 变量名=变量值 示例: ip=192.168.1.251 school="BeiJing 1000phone" today1=date +%F today2=$(date +%F)

(2)read 从键盘读入变量值: read -p "请输入您测试的IP地址:" ip 测试:

(3):定义或引用变量时注意事项: " " 弱引用 //脱去空格 ' ' 强引用 //脱去所有字符意思 //优先执行 :命令替换 等价于 $() 反引号中的shell命令会被先执行 另一种用法: touch $(date +%F)_file2.txt

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

使变量开机、登陆生效,将变量放到~/.bash_profile

  1. 位置变量和预定义变量:

(1)语法:预先定义过的变量 $0 脚本名 $* 所有的参数 $@ 所有的参数 $# 参数的个数 $$ 当前进程的PID $! 上一个后台进程的PID $? 上一个命令的返回值 0表示成功 (2)实例1: 实验: ./ tst.sh 1 2 3 4 5 6

4.$*和$@区别(资料): shell中$*与$@的区别

关于$* 和 $@的 一点 认识 同是菜鸟一起学习

$* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ 与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递, 并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的 单词. 注意:"$@"必须被引用.

$@ $* 只在被双引号包起来的时候才会有差异 双引号括起来的情况: $*将所有的参数认为是一个字段 $@以IFS(默认为空格)来划分字段,如果空格在“”里面,不划分。采用LS的脚本运行./test 1 "2 3" 4 来发现差异

没有括起来的情况是$@和$*一样的,见到IFS就划分字段。还是采用LS的脚本运行./test 1 "2 3" 4 来发现差异

一个小例子 ,仅供参考

[Copy to clipboard] [ - ]CODE:#!/bin/bash echo

index=1

echo "Listing args with"$":" for arg in "$"

do echo "Arg #$index=$arg" let "index+=1"

done

echo "所有的参数被认为是一个单词"

echo

index=1

echo "Listing args with "$@":" for arg in "$@" do echo "Arg #$index=$arg" let "index+=1" done

echo "所有的参数被认为是各个独立的单词"

echo

index=1

五、变量的运算

  1. 整数运算:

(1) expr用法:方法1、

(2)方法二:$(())

(3)方法三:$[]

(4)方法四:let

2.小数运算:

需要用到工具 bc 相当于一个计算器 yum -y install bc (1)小数运算,用bc和不用bc的区别 直接输入bc的用法 : (2)在shell命令上直接用bc scale=2 保留小数点后面两位 bc:交互运算器