怎样编写shell脚本

2018年11月23日 | 分类: 【技术】

【介绍】

Shell脚本(Shell Script)与Windows/Dos下的批处理相似,使用Linux/Unix下的shell命令预先放入到一个纯文本文件中,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。
Shell脚本提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。
Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。
Shell既是一种命令语言,又是一种程序设计语言(Shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

【日期】

参考:https://www.cnblogs.com/OliverQin/p/5865656.html
参考:https://www.cnblogs.com/paul8339/p/5773377.html

Date命令例子:

Linux:/usr/local/sbin # date +”%Y-%m-%d %H-%M-%S”
2018-06-22 02-19-41

date在脚本中的几个用法:

date +%Y 以四位数字格式打印年份

date +%y 以二位数字格式打印年份

date +%m 月份

date +%d 日期

date +%H 小时

date +%M 分钟

date +%S 秒

date +%w 星期,如果结果显示0,则表示周日

【语法】

打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为 .sh(sh代表shell)(扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名也可以用.php)。

#!/bin/bash
echo "Hello World !"

“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
echo命令用于向窗口输出文本。

【回车】

参考:https://blog.csdn.net/evils798/article/details/7202778
参考:https://www.cnblogs.com/mecca/p/4414474.html
参考:http://www.bubuko.com/infodetail-1879066.html

以 nohup 启动服务可以在终端关闭后保证Linux环境下的服务在后台继续运行。

参考:https://amon.org/nohup

通常在终端执行:

nohup sh catalina.sh run &

需要执行一下回车键才能保证命令进行,为了保证 nohup 在脚本中被成功调用执行,需要在脚本中增加回车的符,否则命令执行不成功。

以下是以 nohup 方式启动 tomcat 的脚本:

#!/bin/bash
str=$"/n"
cd /SAPP/tomcat-admin/bin
nohup sh catalina.sh run &
sstr=$(echo -e $str)
echo $sstr
tail -20 nohup.out > /home/log/admin.log

【报错】

编辑好shell脚本,上传到服务器,尝试执行。

 ./go.sh

报错1:

如果报错:

-bash: ./go.sh: Permission denied

需要修改权限:

chmod +x go.sh

报错2:

如果报错:

-bash: ./go.sh: /bin/bash^M: bad interpreter: No such file or directory

因为shell脚本在Windows环境下编辑再上传的,需要使用 dos2unix 处理:

yum install -y dos2unix && dos2unix go.sh