Shell脚本入门 01:格式与基础使用
Posted Naisu Xu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本入门 01:格式与基础使用相关的知识,希望对你有一定的参考价值。
目的
通常在终端中操作Linux都是一行一行输入命令进行的,每输入一行执行后根据结果再输入下一条命令。这种操作在简单使用或是在单次使用中没什么问题,但是如果需要进行复杂的工作或是多次进行重复的操作的时候就比较费时费力了。这些情况下可以把要执行的操作命令都写到一个文件中,让Shell读取文件然后执行其中命令。这就是Shell脚本。
Shell脚本的编写和其它脚本语言编写程序很像,也支持变量、数组、条件选择、循环、函数、模块化等功能语法。这篇文章就对Shell脚本的一些基础的格式与使用方法进行介绍。
脚本格式
Shell脚本主要就是把一些命令行操作整合起来使用,所以最重要的格式就是终端中对于命令使用的格式,这个算是比较基础的Linux使用技能了,这里就不进行介绍了,除了这个内容外Shell脚本中还有一些特有的格式。
Shell脚本文件通常是以 .sh
为后缀名的,比如 helloworld.sh
。
Shell脚本内容编写上也有一些格式,这里通过下面的例子进行说明:
#!/bin/bash
echo "Hello World !" # 这是一条语句
一般来说Shell文件的第一行都是以 #!
开头的,后面跟的是用于读取执行该脚本文件的解释器(即Shell程序)的路径,常见的写法有 #!/bin/bash
、 #!/bin/sh
,现在的Linux发行版中常用的Shell程序是bash,sh通常也是指向bash的,所以这两种写法现在来说差别不大。
Shell脚本中 #
和它后面的内容都是注释(第一行和转义的字符串除外)。
脚本使用
脚本文件的使用常见的有下面几种方式:
将Shell脚本作为程序运行:
这是最常用的方式,只要给脚本文件可执行权限后就可以作为程序来执行了,比如下面演示:
将Shell脚本作为Shell程序的参数来解释执行:
使用source命令读取Shell脚本内容并执行:
source是一个内置命令,这个命名会读取脚本文件内容然后执行该内容。使用方法为 source filename
或者 . filename
,后一种方法注意中间有空格。
几种方式区别:
上面几种方法中后面两种方法脚本文件不需要给可执行权限。
前面两种方法会新开一个进程执行操作,而最后一种方法会在当前终端的进程中执行。Linux中 $$
变量表示当前进程的进程号,下面使用此进行测试:
exit 命令
exit
命令用于退出当前Shell进程。
exit
可以接受一个整数值作为参数,代表退出状态,取值 0~255
。如果不指定,默认状态值是 0
。通常情况下退出状态 0
表成功,其它数值表示失败。可以使用 $?
来获取上一条命令或脚本的退出状态。
上面演示中最后一次启动脚本的方式脚本命令和当前终端实在同一进程的,所以遇到exit终端就被关闭了。
read 命令
read
命令用来从标准输入中读取数据并赋值给变量。其语法为 read [-options] [variables]
,常用选项说明如下:
选项 | 说明 |
---|---|
-a | 把读取的数据赋值给数组 array,从下标 0 开始 |
-d | 用指定字符串指定读取结束的位置,而不是一个换行符(读取到的数据不包括指定字符串) |
-p | 输出不换行的提示信息 |
-r | 不替换输入的转义符 |
-s | 不在屏幕上显示输入的字符 |
-t | 设置超时时间,单位为秒 如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败 |
-u | 使用文件描述符作为输入源,而不是标准输入,类似于重定向 |
如果没有变量来接收输入的话,输入内容会被放在变量 REPLY
中:
组命令
多个命令可以合成以组整体上依次执行,主要有下面两种写法:
command1; command2; command3; ...
(command1; command2; command3; ...)
第一种方式花括号和命令之间必须有一个空格,并且最后一个命令必须用一个分号或者一个换行符结束。这种方式命令会在当前Shell进程中执行。
第二种方式命令会在子Shell中执行。(子Shell是继承了父进程中的函数、变量的子进程,但在子Shell对这些的修改不会影响到父进程)
组命令可以结合重定向和管道等使用。
总结
Shell脚本的编写格式和使用本身还是很简单的,稍微复杂的是内容编写上的一些语法规则等,这些内容将在接下来的文章中进行介绍。
以上是关于Shell脚本入门 01:格式与基础使用的主要内容,如果未能解决你的问题,请参考以下文章