|
|
|
|
移动端

2.2 什么是Shell脚本

《跟老男孩学Linux运维:Shell编程实战》本书是一本较完整的Shell编程实战型图书,并非大而全,但处处可以体现实战二字,大多内容取于企业实战,并结合老男孩十几年的运维工作和教学工作进行了梳理。本节为大家介绍什么是Shell脚本。

作者:老男孩来源:机械工业出版社|2017-04-20 18:20

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

2.2 什么是Shell脚本

理解了Shell之后,再理解Shell脚本就简单了。当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序就被称为Shell脚本。如果在Shell脚本里内置了很多条命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。Shell脚本类似于DOS系统下的批处理程序(早期扩展名一般为“*.bat”)。用户可以在Shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机地结合起来,就形成了一个功能强大的Shell脚本。

下面是在Windows下利用bat批处理程序开发的备份企业网站及数据库数据的脚本范例。

范例2-1:在Windows下利用bat批处理程序备份网站及数据库数据的脚本。

  1. @echo off  
  2. set date=%date:~0,4%-%date:~5,2%-%date:~8,2%            #<==定义时间变量。  
  3. mysqldump -uroot -poldboy -A -B  > D:\bak\"%date%".sql  #<==备份数据库数据。  
  4. rar.exe a -k -r -s -m1 D:\bak\"%date%".sql.rar D:\bak\"%date%".sql  
  5. #<==打包备份出来的数据库数据。  
  6. del D:\bak\*.sql #<==删除未打包的无用数据库数据。  
  7. rar.exe a -k -r -s -m1 D:\bak\"%date%"htdocs.rar D:\work\PHPnow\htdocs  
  8. #<==打包站点目录下的数据。 

范例2-2:清除/var/log下messages日志文件的简单命令脚本。

把所有命令放在一个文件里,堆积起来后就形成了脚本,下面就是一个由最简单的命令堆积而成的Shell脚本。需要注意的是,必须使用root身份来运行这个脚本。

  1. # 清除日志脚本, 版本 1。  
  2. cd /var/log  
  3. cat /dev/null>messages  
  4. echo "Logs cleaned up." 

提示: /var/log/messages是Linux系统的日志文件,很重要。

范例2-2所示的脚本其实是有一些问题的,具体如下:

1)如果不是root用户,则无法执行脚本清理日志,并且会提示系统的权限报错信息。

2)没有任何流程控制语句,简单地说就是只进行顺序操作,没有成功判断和逻辑严密性。

范例2-3:写一个包含命令、变量和流程控制的语句来清除/var/log下messages日志文件的Shell脚本。

  1. # !/bin/bash  
  2. # 清除日志脚本, 版本 2  
  3. LOG_DIR=/var/log  
  4. ROOT_UID=0     #<==$UID为0的用户,即root用户  
  5. # 脚本需要使用root用户权限来运行,因此,对当前用户进行判断,对不合要求的用户给出友好提示,并终止程序运行。  
  6. if [ "$UID" -ne "$ROOT_UID" ] #<==如果当前用户不是root,则不允许执行脚本。  
  7.   then  
  8.     echo "Must be root to run this script." #<==给出提示后退出。  
  9.     exit 1 #<==退出脚本。  
  10. fi  
  11. # 如果切换到指定目录不成功,则给出提示,并终止程序运行。  
  12. cd $LOG_DIR || {  
  13.     echo "Cannot change to necessary directory."  
  14.     exit 1  
  15. }  
  16. # 经过上述两个判断后,此处的用户权限和路径应该就是对的了,只有清空成功,才打印成功提示。  
  17. cat /dev/null>messages && {  
  18.     echo "Logs cleaned up."  
  19.     exit 0  # 退出之前返回0表示成功,返回1表示失败。  
  20. }  
  21. echo "Logs cleaned up fail."  
  22. exit 1 

初学者如果想要快速掌握Shell脚本的编写方法,最有效的思路就是采用电子游戏中过关的方式,比如,对于范例2-3的脚本可以设计成如下几关:

第一关,必须是root才能执行脚本,否则给出友好提示并终止脚本运行。

第二关,成功切换目录(cd /var/log),否则给出友好提示并终止脚本运行。

第三关,清理日志(cat /dev/null > messages),若清理成功,则给出正确提示。

第四关,通关或失败,分别给出相应的提示(echo输出)。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

精通Spring 2.0

本书是关于Spring 2.0的权威教程,是Java/Java EE开发者必备的参考书。本书详尽系统地介绍了Java EE的基础知识、Spring 2.0的各种功能,以...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊