Shell脚本编程之(一)Shell脚本简介
什么是Shell脚本
shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的
shell script 可以简单的被看成是批处理文件, 也可以被说成是一个程序语言,且这个程序语言由于都是利用 shell 与相关工具指令, 所以不需要编译即可执行
我为什么要学Shell脚本
自动化
当然Shell脚本的功能有很多,目前对我而言就是为了减少手动操作的的次数
编写Shell脚本注意事项
- 指令的执行时从上到下、从左到右的分析与执行
- 指令、选项与参数间的多个空白都会被忽略掉
- 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空格键
- 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令
- 至于如果一行的内容太多,则可以使用『 [Enter] 』来延伸至下一行
- 『 # 』可做为批注!任何加在 # 后面的资料将全部被视为批注文字而被忽略
如何执行一个脚本文件
比如在/home/rivers/目录下有一个shell.sh脚本文件
直接下达命令
(1)绝对路径
使用 /home/rivers/shell.sh 来下达指令
(2)相对路径
假设工作目录在 /home/rivers/ ,则使用 ./shell.sh 来执行
(3)变量『PATH』功能
把shell.sh放在 PATH 指定的目录内,例如: ~/bin/
以 bash 程序来执行
通过 bash shell.sh或sh shell.sh来执行
Shell脚本的Hello World
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2018/12/22 Rivers First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
上面代码格式是《鸟哥Linux私房菜》建议的一种写Shell脚本的格式
代码格式解释
第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称
因为我们使用的是 bash ,所以,必须要以『 #!/bin/bash 』来宣告这个文件内的语法使用bash 的语法!
那么当这个程序被执行时,他就能够加载 bash 的相关环境配置文件 (一般来说就是 non-login shell 的~/.bashrc), 并且执行 bash 来使我们底下的指令能够执行!这很重要的!(在很多状况中,如果没有设定好这一行, 那么该程序很可能会无法执行,因为系统可能无法判断该程序需要使用什么 shell 来执行啊!)
程序内容的说明
整个 script 当中,除了第一行的『 #! 』是用来宣告 shell 的之外,其他的 # 都是『批注』用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的基本数据。一般来说, 建议你一定要养成说明该script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 创建日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!
主要环境变量的宣告
建议务必要将一些重要的环境变量设定好,鸟哥个人认为, PATH 与 LANG (如果有使用到输出相关的信息时) 是当中最重要的! 如此一来,则可让我们这支程序在进行时,可以直接下达一些外部指令,而不必
写绝对路径呢!比较方便啦!
主要程序部分
就将主要的程序写好即可!在这个例子当中,就是 echo 那一行啦!
执行成果告知 (定义回传值)
利用 exit 这个指令来让程序中断,并且回传一个数值给系统。 在我们这个例子当中,使用 exit 0 ,这代表离开 script 并且回传一个 0 给系统, 所以执行完这个 script 后,若接着下达 echo $? 则可得到0 的值喔! 利用这个 exit n (n 是数字) 的功能,我们还可以自定义错误讯息, 让这支程序变得更加的 smart 呢!
执行结果
[root@node01 bin]# sh hello.sh
Hello World!
可以看到我们使用的是第二种bash的方式执行的脚本,也可以使用直接命令的方式:
[root@node01 bin]# ./hello.sh
-bash: ./hello.sh: Permission denied
纳尼?无法执行的原因写的很明显,没有权限,而我们在上面总结的时候特意强调,使用直接下达命令执行脚本,必须得给这个脚本增加可执行权限
[root@node01 bin]# chmod a+x hello.sh ; ./hello.sh
Hello World!
建议
- 撰写 script 的工具最好使用 vim 而不是 vi ,因为 vim 会有额外的语法检验机制,能够
在第一阶段撰写时就发现语法方面的问题 - 按照上面的格式,养成一个良好的编写脚本格式的习惯
Shell脚本编程之(一)Shell脚本简介相关推荐
- (shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务
文章目录 shell脚本编程 条件语句 脚本执行多条命令 执行定时任务 本文着重于提高我们的生产力,所以将这几个作为了一个专题. shell脚本编程 脚本中不同语句用分号隔开,和c语言一样. for, ...
- linux系统shell脚本编程,Linux系统shell脚本编程(一)
哈喽,大家好,我是Adam.前面我发了不少关于linux 的文章,今天也是一样,将分几篇文章系统化的讲讲shell脚本编程.废话不多说,走起走起! 首先说一下shell脚本是什么.简单来 ...
- linux脚本编程延时函数,shell脚本编程之函数
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起 ...
- Linux命令行与shell脚本编程大全(shell脚本编程基础部分)
第十一章 构建基本脚本 #为注释,但#!在第一行中后可以接shell的种类:如#!/bin/bash 会告诉shell用哪个shell来运行脚本 echo -n(显示在同一行中) 环境变量:set 用 ...
- Shell脚本编程:使用shell打印九九乘法表
前言 学了东西就得用起来,学习任何东西都一样,学以致用嘛.下面是用shell脚本编写九九乘法. 用到了shell函数.while循环.if条件控制 等shell基本语法. 脚本代码 #!/bin/ba ...
- linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理
如果在没有使用密钥认证的情况下,想通过SSH来传输文件给多个主机会面临交互的问题,这在脚本中是非常不友好的.要解决这个问题的话可以使用expect这个工具,它的功能就是提前把交互中需要的内容先写好,然 ...
- java dtu 采集程序_DTU脚本编程_本地采集脚本指令详解
前言: 通过配置DTU的脚本指令实现DTU定时自动采集,用户只需知道外接仪表.无需再单独增加控制器传感器的采集流程,然后通过编写脚本指令即可让DTU按照用户的流程自动采集.上传数据.脚本实现了基本的开 ...
- shell脚本编程for循环求阶乘_shell脚本编程(完结版).pdf
shell脚本编程(完结版) Shell 脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦 如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论 1 Shell ...
- 【Linux命令行与Shell脚本编程】第五章 理解 Shell 父子关系 后台进程 协程
Linux命令行与Shell脚本编程 第五章 理解 Shell 文章目录 Linux命令行与Shell脚本编程 五,理解 Shell 5.1,shell的类型 5.2,shell的父子关系 5.2.1 ...
- 《Linux命令行与shell脚本编程大全》(第三版)读书笔记
第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...
最新文章
- 测试工程师的好日子来啦?Testin发布AI测试产品,提升易用性和自动化效率
- Android中使用running services查看service进程内存
- 聊聊flink的logback配置
- CentOS 下 yum(基于rpm的包管理工具) 命令详解
- 导入第三方库报 unknown type name 'NSString' 错误
- spark 中的RDD编程:基于Java api
- 类型转换和操作符重载 (c#)
- nginx mozilla_如何开始为Mozilla贡献力量
- 同一个SQL语句,为啥性能差异咋就这么大呢?
- 电脑重启后不必输入用户名密码,直接自己登入的方法
- 评价类问题中的模糊综合评价法
- Warshall 算法
- iOS AVCapture前置摄像头不显示镜像翻转
- 一文看懂抢注域名的相关问题解答
- CPU-Z V1.99 x64 得分
- 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到计算机
- 户口本识别/户口本OCR识别
- 1.4、云计算HCIA虚拟化存储基础知识
- vlog常用参数解析
- JavaScript typeof, null, 和 undefined
热门文章
- Java基础__Integer类型中的自动装箱
- 【转】cs231n学习笔记-CNN-目标检测、定位、分割
- JSON C# Class Generator ---由json字符串生成C#实体类的工具(转)
- struts2 struts.xml 配置(转载)
- office2003 office2007同时安装 配置问题的解决
- 腾讯“云+未来”峰会亮相山城,助力重庆成为数字中国新标杆
- SNMP协议交互学习-获取udp的udpindatagrams
- 企业引进HRM系统需要规避的五大误区
- 贪心 FZU 2013 A short problem
- Objective-C中的UIScrollView