为什么学习和使用Shell编程
什么是Shell
shell的起源
shell的功能
shell的分类
如何查看当前系统支持的shell?
如何查看当前系统默认shell?
驼峰语句
shell脚本的基本元素
shell脚本编写规范
shell脚本的执行方式
shell脚本的退出状态 (查看状态echo $?)
执行脚本的方法
为什么学习和使用Shell编程
对于一个合格的系统管理员来说,学习和掌握
Shell
编程是非常重要的。通过编程,可以在很大程度 上简化日常的维护工作,使得管理员从简单的重复劳动中解脱出来。
shell
程序的特点:
1
、简单易学
2
、解释性语言,不需要编译即可执行
什么是Shell
在学习
Shell
编程之前,必须弄清楚什么是
Shell
。为了能够使读者在学习具体的
Shell
编程之前对 Shell有个基本的了解,本节将对
Shell
进行概括性的介绍,包括
Shell
的起源和功能。
shell的起源
1964
年,美国
AT&T
公司的贝尔实验室、麻省理工学院及美国通用电气公司共同参与开始研发一套 可以安装在大型主机上的多用户、多任务的操作系统,该操作系统的名称为Multics
。
1970
年,丹尼斯
•
里奇和汤普逊启动了另外一个新的多用户、多任务的操作系统的项目,他们把这 个项目称之为UNICS
。 1973年,使用
C
语言重新编写了
Unix
。通过这次编写,使得
Unix
得以移植到其他的小型机上面。 1979年,第一个重要的标准
UNIX Shell
在
Unix
的第
7
版中推出,并以作者史蒂夫
•
伯恩(
Stephen Bourne)的名字命名,叫做
Bourne Shell
,简称为
sh
。
20
世纪
70
年代末,
C Shell
作为
2BSD UNIX
的一部分发布,简称
csh
。
之后又出现了许多其他的
Shell
程序,主要包括
Tenex C Shell
(
tcsh
)、
Korn Shell
(
ksh
)以及 GNU Bourne-Again shell(
bash
)。
shell的功能
Shell
又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于
Windows
操作系统中的命令行,但是,
Shell
的功能远比命令行强大的多。在
UNIX
或者
localhost
中, Shell既是用户交互的界面,也是控制系统的脚本语言。
shell的分类
Bourne Shell
:标识为
sh
,该
Shell
由
Steve Bourne
在贝尔实验室时编写。在许多
Unix
系统中,该 Shell是
root
用户的默认的
Shell
。 Bourne-Again Shell:标识为
bash
,该
Shell
由
Brian Fox
在
1987
年编写,是绝大多数
localhost
发行 版的默认的Shell
。
Korn Shell
:标识为
ksh
,该
Shell
由贝尔实验室的
David Korn
在二十世纪八十年代早期编写。它完 全向上兼容 Bourne Shell
并包含了
C Shell
的很多特性。 C Shell:标识为
csh
,该
Shell
由
Bill Joy
在
BSD
系统上开发。由于其语法类似于
C
语言,因此称为
C Shell。
如何查看当前系统支持的shell?
[root@localhost ~]
# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
如何查看当前系统默认shell?
[root@localhost ~]# echo $SHELL
/bin/bash
驼峰语句
什么是驼峰语法?
骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,
第
一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母
,例如:
myFirstName
、
myLastName
,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
除了驼峰命名法,另外还有匈牙利命名法。基本原则是:变量名
=
属性
+
类型
+
对象描述。匈牙利命
名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单 词或多个单词组合,该单词要指明变量的用途。比如m_lpszStr,
表示指向一个以
0
字符结尾的字符串的长 指针成员变量。 另外,有些程序员喜欢用下划线。比如file_name
。
shell脚本的基本元素
对于一个基本的
Shell
程序来说,应该拥有以下基本元素:
声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为
#!/bin/bash
。
2.
命令:可执行语句,实现程序的功能。
3.
注释:说明某些代码的功能,通过在代码中增加注释可以提高程序的可读性。
(
1
)单行注释:
#
开头的一整行都是注释,例如:
#comment1
#comment2
#comment3
……
2
)多行注释,使用冒号
“:”
配合
here document
可实现多行注释,例如:
4.
赋予
rx
的权限
shell脚本编写规范
1
)脚本文件名应见名知意,例如
backup_mysql.sh
2
)文件开头指定脚本解释器
#!/bin/sh
或
#!/bin/bash
3
)开头加版本特权等信息
# Date:
创建日期
# Author:
作者
# Mail:
联系方式
# Function:
功能
# Version:
版本
4
)脚本中尽量不要用中文注释
别吝啬添加注释,必要的注释方便自己别人理解脚本逻辑和功能;
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰;
单行注释,可以放在代码行的尾部或代码行的上部;
多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分。
5
)多使用内部命令
常用的内部命令有:
echo
、
eval
、
exec
、
export
、
read
、
shift
、
exit
shell脚本的执行方式
1)bash ./filename.sh(产生子进程,再运行,使用当前指定的bash shell去运行)
2
)
./filename.sh
(产生子进程,再运行,使用脚本里面指定的
shell
去运行。使用该种方式执行需要
x 权限
3
)
source ./filename.sh
(
source
命令是一个
shell
内部命令,其功能是读取指定的
shell
程序文件,并 且依次执行其中的所有的语句,并没有创建新的子shell
进程,所以脚本里面所有创建的变量都会保存到 当前的shell
里面)
4
)
. filename.sh
(和
source
一样,也是使用当前进程执行)
shell脚本的退出状态 (查看状态echo $?)
在
UNIX
或者
Linux
中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为 0~255。通常情况下,成功的命令返回
0
,而不成功的命令返回非
0
值。非
0
值通常都被解释成一个错误 码。行为良好的UNIX
命令,程序和工具都会返回
0
作为退出码来表示成功。
Shell
脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定 退出状态码。另外,用户也可以在脚本中使用exit
语句将指定的退出状态码传递给
Shell
。
[root@localhost ~]
# vim ~/.vimrc
shell
脚本的执行方式
1
)交互式执行
2
)作为程序文件执行(常用)
对于一组需要经常重复执行的
Shell
语句来说,将它们保存在一个文件中来执行。我们通常称这种包 含多个Shell
语句的文件为
Shell
脚本,或者
Shell
脚本文件。脚本文件是普通的文本文件,可使用任何的 文本编辑器查看或修改Shell
脚本。
执行脚本的方法
1
)
bash ./filename.sh
(产生子进程,再运行,使用当前指定的
bash shell
去运行)
2
)
./filename.sh
(产生子进程,再运行,使用脚本里面指定的
shell
去运行。使用该种方式执行需要
x
权限)
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec
":call SetTitle()"
func SetTitle()
if
expand(
"%:e"
)
==
'sh'
call setline(1,
"#!/bin/bash"
)
call setline(2,
"#########################"
)
call setline(3,
"#File name:"
.expand(
"%"
))
call setline(4,
"#Version:v1.0"
)
call setline(5,
"#Email:admin@test.com"
)
call setline(6,
"#Created time:"
.strftime(
"%F %T"
))
call setline(7,
"#Description:"
)
call setline(8,
"#########################"
)
call setline(9,
""
)
endif
endfunc
创建一个shell文件如图
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)