Linux-Bash(一)
我回来了,这次接触的是Linux下的shell脚本。
前言
最近常常在Linux下启动一堆服务,每次重启电脑就得敲一堆命令,让我这个懒癌患者深受困扰!!基于不想把它们加入开机自启的前提,就开始动手写个Bash脚本将它们一键全部启动。
Bash
解释器
shell脚本首行需要有一个固定的格式,其意义表明使用对应解释器解析该脚本,常常有/bin/bash,/bin/sh等,这里我用的是bash:
1 |
常用语法
变量声明:name=
变量调用:$name
命令行参数获取:
1 | $0 |
多分支判断:
1 | case str in |
编写思路
首先定义各个服务的工作目录设置成对应变量,使用分支判断调用不同功能:启动服务、杀死服务进程、修改服务配置等。
脚本编写
根据编写思路,需要使用到的命令大致分为:启动、杀进程(kill)、修改(seq)等。
启动
在不同的环境变量下,启动服务的命令不同。在这里我拿启动python为例。
1 |
|
使用./shell.sh start来启动python
杀进程
Linux下使用kill命令即可杀进程,在这里我拿杀死启动的python为例。
1 |
|
使用./shell.sh kill来杀死python
修改
需要对服务配置文件进行修改的时候,使用Linux的seq命令可以完成。
1 |
|
使用./shell.sh config来修改config.cnf文件
总结
在编写bash脚本的时候,大部分问题都是由格式、编码等引起。
- 在Windows下编写,在Linux下使用,大概率会由换行符导致脚本无法运行:Windows下换行符为CRLF(正则表达式的\r\n,ASCII码的13和10),Unix(or Linux)下换行符为LF(正则表达式的\n)。这个问题会导致在Linux下运行\r\n为无效参数、vi等编辑器打开会出现^M、脚本头部出现乱码字符等;
- Linux Shell脚本单引号、双引号在使用时,具有不同效果:单引号为所见即所得、双引号为解析之后所得;
- seq命令在替换特殊字符时可以用\来转义(正则转义)。
完整代码
由于这个脚本涉及到一些机密的东西,完整代码不能上传到GitHub。望理解!