shell学习15天(Shell 能做什么&Shell调用) - 01day

(一) shell 能做什么?

ok,shell无所不能!

在日常维护公司应用平台以及服务器过程中,经常会用shell来处理以下一些工作:

1. 自动化批量系统初始化程序(update 、软件安装、时区设置、安全策略...)

2. 自动化批量软件部署程序(LAMP、LNMP,Tomcat、LVS、Nginx)

3. 应用管理程序(KVM、集群管理扩容、MySQL)

4. 日志分析处理程序(PV、UV、top 100,grep/awk/sed)

5. 自动化备份恢复程序(MySQL完全备份/增量+Crond)

6. 自动化管理程序(批量远程修改密码,软件升级,配置更新)

7. 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)

8. 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)

9. 自动化扩容(增加云主机-业务上线)

eg: zabbix监控 CPU 80%+ |-50% Python API  AWS/EC2 (增加/删除云主机)+Shell Script(业务上线)

另外shell还可以:

10. 打印(俄罗斯方块、 三角形、五角星、镂空五角星、圣诞树、小火车、坦克大战、排序算法...)

总之 shell 无所不能、关键是看业务需要。

那么相信大家都知道Python吧。不得不承认Python也很高效且容易上手。那么在日常运维中,用shell还是python呢?我个人认为你要是都会会更好!但是我觉得python更适合应用,和java差不多。shell更适合写脚本吧。比如你要写一个定时删文件的任务,用shell就是一个命令的事情,犯不着用python吧。

(二) 各编程语言执行方式及应用方向

那么还有其他语言呢,下面我们从程序的运行方式、应用方向来简述:

语种          执行方式                                                                                                       

C              编译型语言    编译成  二进制机器码(CPU可直接执行的代码)

Java        编译型语言     解释器将java代码编译成 Jvm才认识的字节码在JVM上执行 如 Tomcat /Apache

shell        解释型语言     执行的时候由 bash 解释

perl         解释型语言      执行的时候由perl解释

expect    解释型语言      执行的时候由expect解释

Python    解释型语言     执行的时候由python解释

                编译型语言     解释器将Python代码编译成 Python虚拟机(PVM)才认识的字节码在PVM上执行

解释型语言: 执行慢,修改灵活

编译型语言:一旦编译后执行快,但修改麻烦。每次修改都的重新编译。

以上呢,C比较适合写操作系统底层、java和python适合做应用。shell perl expect适合写脚本。

(三) Shell 和 Python的调用方式

shell和python都有专属的解释器,shell是bash(其实还有sh等很多)、python是python,都在linux的 /usr/bin/ 下面

那么,在什么地方指定脚本的专属解释器呢?以shell脚本为例:

1. 在脚本第一行 #!(shebang)后指定解释器。

2. 在调用脚本时,shell的三种调用方式

     2-1) 指定解释器   bash  a.sh       , 此种方式会忽略脚本第一行shebang后的解释器,且不需要执行权限X

              是将a.sh作为参数传给sh(bash)命令来执行的。不是a.sh自己来执行,而是被人家调用执行,所以不要执行权限。

     2-2)    相对路径执行   ./a.sh , 此种方式会读取shebang指定的解释器,但需要执行权限X

               不能直接 a.sh 来执行,会报错,未找到命令。

               因为目前的工作目录 (/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中,加上路径后,表明执行的是这个文件。

     2-3) 绝对路径执行   /home/hujianmei/a.sh    ,此种方式会读取shebang指定的解释器,但需要执行权限X

     2-4)    shell环境执行  .  ./a.sh     或 source  ./a.sh    此种方式直接在当前shell进程执行,不会去读取shebang指定的解释器,且不需要执行权限X。   除2-4外,其余都是在子shell执行的哈~

如果不指定shebang,也不用解释器来调用,shell脚本也能执行成功。因为我们的工作环境本身就是一个shell,会被当成解释器。看吧,shell就是这么特殊。换作python肯定会报错的啦~

(四) 在Shell中调用Python

直接上代码:

bash01.sh

#!/usr/bin/bash

ping -c1 www.baidu.con &>/dev/null && echo "www.baidu.com is up" || echo "www.baidu.com is down"

/usr/bin/python <<-EOF

print "hello world"

EOF

echo "Hello  bash"

说明: 在shell中可将 python代码快通过EOF的方式交给python这个解释器来执行。

EOF代码块只能存在于shell脚本。且前面那个 - 是为了解决结尾那个EOF标记可以缩进的。如果第一个EOF没有 - ,那么结尾那个EOF必须置顶哦~

还有那个 EOF 你可以替换成任意关键字,如HUJIANMEI 也是可以的。但是为了规范,还是EOF吧!

以上四点就是今日所学! 20200211

发布了15 篇原创文章 · 获赞 0 · 访问量 3044

猜你喜欢

转载自blog.csdn.net/xx_ay/article/details/104270925