码迷,mamicode.com
首页 > 系统相关 > 详细

《shell编程实战》第2章shell脚本入门

时间:2018-04-23 11:05:31      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:shell   编程   老男孩   bash   

《shell编程实战》第2章shell脚本入门
1、shell是什么
shell是一个命令解释器,它的作用是解释执行用户输入的命令和程序,负责与用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,然后输出到屏幕返回给用户。简单地说,shell翻译用户的话给内核,内核听后控制硬件工作,工作完内核将结果告诉shell,shell再打印给用户看。shell是用户和内核乃至硬件之间沟通的桥梁。
用户敲命令->shell翻译-内核控制->硬件工作->内核结果上报->shell打印->用户得到答案
shell英文意思为“贝壳”,linux里是说就像贝壳一样包住系统内核和硬件。
2、什么是shell脚本
当命令或程序语句不在命令行下执行,而是通过程序文件的形式在shell中执行,这个程序就被称为shell脚本。shell脚本是针对给shell用的,它将一些shell的语法与命令写在里面,搭配正则表达式、管道、重定向等,实现我们想要的功能。
例1、写一个清除/var/log/messages的命令脚本。
#!/bin/bash
#version:v1.0
echo > /var/log/messages && echo "Log cleaned up."
这样基本就OK了。但仔细思考一下,这个脚本还是有一些问题的,具体如下:
(1)非root用户没有权限执行这条命令。
(2)只管进行顺序操作,没有流程控制语句。
例2、写一个脚本,功能一样但要带流程控制。每一步执行成功或失败都应该有提示。
#!/bin/bash
#version:v2.0
#首先判断是不是root,然后判断日志目录是否存在,再判断日志是否存在,最后清空日志。
#判断是不是root($UID是否为0)
if [ $UID -ne 0 ]
then echo "Must be root!"
exit 1 #返回1表示脚本执行失败了
fi
echo "You are root."
#判断日志目录是否存在
cd /var/log || {
echo "Cannot change to the directory."
exit 1
}
#清空日志
echo > messages && {
echo "Log cleaned up."
exit 0
}
echo "Log cannot clean up."
exit 1
重要提示:花括号{}的位置一定不能打错!!笔者打到了“exit 1”"exit 0"的后面:
cd /var/log || {
echo "Cannot change to the directory."
exit 1}
然后就提示logclean4.sh: line 29: syntax error: unexpected end of file。找了一个小时也没找出哪里错了!建议还是跟按老男孩一模一样的敲。
3、shell的地位
shell脚本适合用来处理纯文本类型的数据,而Linux中几乎所有服务的配置和日志文件都是纯文本类型的。因此,学好shell脚本能在linux系统中发挥巨大作用!
4、shell的种类
(1)Bourne shell,包括sh、ksh、bash三种。
(2)C shell,包括csh、tcsh两种。
查看linux支持的shell:cat /etc/shells
5、其它脚本语言对比
(1)PHP,专注于WEB开发
(2)Perl,语法较复杂
(3)Python,在掌握shell编程之后可深入学习
相比而言,shell的优势在于处理偏操作系统底层的业务。一些常见的系统脚本,使用shell开发会更简单快速。
6、查看操作系统默认的shell
老男孩书里给出了两种方法,不过第二种方法好像不太适合我。视频里给出了第三种方法,网上有第四方法:
(1)[root@thzzc1994 ~]# echo $SHELL
/bin/bash
(2)[root@thzzc1994 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
这种方法改进一下,在root前面加个^,表示root打头的一行就行了:
[root@thzzc1994 ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
(3)[root@thzzc1994 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
(4)[root@thzzc1994 ~]# grep SHELL /etc/default/useradd
SHELL=/bin/bash
这种方法还可以等同于
[root@thzzc1994 ~]# useradd test
[root@thzzc1994 ~]# tail -1 /etc/passwd
test:x:501:501::/home/test:/bin/bash

附录:
1、清空日志的四种方法
(1)echo "" > test.log
(2)echo > test.log
(3)> test.log
(4)cat /dev/null > test.log
2、查看bash版本
bash --version

《shell编程实战》第2章shell脚本入门

标签:shell   编程   老男孩   bash   

原文地址:http://blog.51cto.com/10249069/2106639

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!