shell 脚本笔记
2021-06-08 15:59
1351 查看
一、基本语法
系统脚本写起来就是没有编程语言舒服,Windows的bat最难用,linux的shell好一点,用起来也比较别扭
1.1 空格和引号的重要性
shell脚本中的空格需要像八股文一样严格控制,比如:
# 正确,无空格,string变量被赋值 string=`cat a.txt` # 错误,a.txt中的内容被当成命令执行 string = `cat a.txt` # 正确 if [ -z "$STRING" ] # 错误,没有空格,此外没有双引号也是错误的 if[-z "$STRING"]
二、脚本中调用其它命令
2.1 调用vi
脚本中如果不得不使用vi,例如使用
:set fileformat=unix更改文件格式
你可以直接在脚本中使用vi,如 https://blog.csdn.net/ding_yingzi/article/details/81074422
#! /bin/bash vi file.txt << EOF i # 进入 insert 模式 Here is a document! # 输入文本内容 ^[ # 意为按下ESC退出编辑模式,不能直接输入,而应当在i输入模式下先按下<c-v>, 即ctrl+v,再按 <esc> 得到 :wq # 保存退出 EOF
在shell脚本中(bash编程),
<<EOF表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。而EOF可以换成任何其他字符都可以。
上述方法是模拟vi的使用,除此之外还可以使用vi的 ex 模式,使用
vi -e或直接使用
ex命令。只支持vi 底行输入,你所输入的内容都相当于在底行:后输入
#! /bin/bash ex file.txt << EOF i # 进入插入模式,后面的内容都会被插入,直到遇见 . 为止 Here is a document! # 输入文本内容 . # 结束插入 wq EOF
ex的另一种用法:出自stackoverflow 。优点是免去了写 << EOF 的麻烦,多条命令就追加 -c,缺点是插入内容不方便
vim file.txt -c 'set fileformat=unix' -c 'wq'
三、设置开机自启
设置脚本在开机时自动启动,这里介绍注册服务的方法来设置开机自启
3.1 脚本内容要求
在开始写脚本前你就需要知道这三件事
首先,脚本必须以固定内容开头
#!/bin/sh #chkconfig: 2345 60 30 #description: [note]
第一行指定脚本解释器,这个一定要在第一行,而且字符间不能有空格,否则开机时代码无法执行
第二行指定脚本何时运行,2345指的时在哪些系统运行级别时运行,60是开机启动优先级,30是关机启动优先级,优先级1高99低,不知道具体是0-99还是1-100
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别4:系统未使用,保留 运行级别5:X11控制台,登陆后进入图形GUI模式 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
第三行 description 是描述
也可以参考系统脚本是怎么写的
cat /etc/init.d/network
其次,脚本最好处理好第一个参数
因为系统启动、暂停、重启服务,是通过向脚本传递参数实现的,虽然不处理参数,脚本也会被运行一遍,但是还是规范编写脚本较好
如
service network start其实是向脚本传了一个 start 参数。处理参数的格式如下:
# See how we were called. case "$1" in start) # 启动脚本内容 ;; stop) # 停止脚本内容 ;; restart|force-reload) # 重启脚本内容 ;; status) # 查看状态脚本内容 ;; *) # 其它参数脚本内容 echo $"Usage: $0 {start|stop|status|restart|force-reload}" # 结束case语句 esac exit 0
最后,需要注意路径问题
脚本必须放在
/etc/init.d/下,脚本中
pwd即为此目录,即使是硬链到此目录下
3.2 注册管理服务
注册服务,注册成功后就能开机自启了
cd /etc/init.d/ chkconfig --add [your_sh] chconfig --list # 查看是否添加成功
管理服务,使用
service [your_service] start|stop|status
相关文章推荐
- shell 脚本专家指南笔记
- android 学习笔记(八)building system8.5 shell脚本的学习
- shell脚本学习指南_学习笔记_第1,2章
- Linux之ubuntu学习笔记(九):shell 脚本
- Shell脚本学习笔记-函数
- Shell脚本学习笔记(七)--sed和awk
- Shell学习笔记&Mysql备份脚本
- Shell脚本学习笔记
- 【Shell】【学习笔记】Linux Shell脚本应用(五)
- 【Shell】【学习笔记】Linux Shell脚本应用(九)
- shell 脚本学习笔记
- shell 脚本实战笔记(3)--集群机器的时间同步设置
- shell脚本常用语句用法笔记
- 学习笔记:Shell脚本-2015-08-05
- bash shell笔记1 脚本基础知识
- Shell脚本笔记
- 【Shell脚本学习指南笔记】重定向文件描述符 2>&1
- shell脚本学习笔记 (正则表达式)
- shell脚本攻略学习笔记(一)小试牛刀
- android 学习笔记(八)building system8.5 shell脚本的学习