一、shell 编程简介
shell 是操作系统的最外层。shell 合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。Shell 是用户与 Linux 操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell 脚本编程去运行。随着 Linux 企业应用越来越多,维护 Linux 日
常工作频繁,所以如果单靠手工去敲打命令是非常困难的,所以学会熟练使用SHELL 编程是每个 Linux SA 必备的功课。
Linux Shell 种类非常多,常见的有:Bourne Shell(/usr/bin/sh 或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的 Shell 语言的语法有所不同,所以不能交换使用。
最常用的 shell 是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,也是大多数 Linux 系统默认的 Shell。
简而言之:shell就是一个用户与操作系统的之间的命令解释器。或者说是用户与操作系统沟通的桥梁,用户可以输入命令执行,也可以通过shell脚本编程去运行。
二、什么是Shell脚本
单条shell命令的集合
主要功能:
- 记录命令执行的过程和执行逻辑,以便以后重复执行
- 批量处理主机
- 定时处理主机
三、怎么写一个Shell脚本
#!/bin/bash ##幻数(C语言专业术语)(直接使用的东西)
使用vim自动添加脚本首部
map <F4> ms:call GHOST_init()<cr>'s
##ms:call 表示调用 ##按F4调用GHOST_init()这个函数
autocmd BufNewFile *.sh,*.script call GHOST_init()
## 写一个新的.sh.script结尾的文件会自动调用GHOST_init()
func GHOST_init()
call append(0,"###############################################")
call append(1,"# Author: ghost")
call append(2,"# Version: 20201209")
call append(3,"# Create_Time: ".strftime("%Y/%m/%d"))
call append(4,"# Mail: ghost@westos.org")
call append(5,"# Info: ")
call append(6,"# ")
call append(7,"################################################")
call append(8,"")
call append(9,"#!/bin/bash")
endfunc
如果是想要全局设定vim格式只需将该文本加到/etc/vimrc里,但一般为了不影响别的用户使用,我这种自定义格式只设置为局部(针对某一用户) 创建~/.vimrc并将上面内容写进去
vim个文件测试:
改为自动添加再测试
但是自动添加只对新建.sh文件有效,一些老的文件想要增加这个函数调用该怎么办,可以采用新.sh文件自动添加,旧文件手动添加的方式,想怎么加就怎么加
四、怎么执行一个Shell脚本
脚本编写完毕,如何来执行呢
1).手动在环境中开启指定解释器
sh first_shell.sh
执行
2).直接在当前环境中运行shell中的指令不开启新的shell
source first_shell.sh
执行. first_shell.sh
执行
3).开启脚本中指定的shell并使用此shell环境运行脚本中的指令
chmod +x first_shell.sh
/xxx/xxx/ first_shell.sh
如bash来执行就是/bin/bash/ first_shell.sh
./ first_shell.sh
五、怎么测试Shell脚本
sh -x /data/newsh first_shell.sh
+ ##运行指令
不带+ ##命令运行的输出
六、训练题
-
ip_show.sh 网卡 实现显示当前的主机ip
-
host_messages.sh 显示当前主机的名称,ip登陆当前主机的用户
hostname: xxxxx
ipaddress: xxxx.xxxx.xxx.xxx
username: root -
clear_log.sh 执行次脚本后可以清空日志(所有日志) 通过for循环