项目中比较常用的shell脚本命令
shell命令执行有两种执行方式:一种是,用户输入一条命令,shell就解释执行一条,这种方式被称为交互式;另一种是,用户事先写好一个 shell脚本,其中会有多条命令,让shell一次把这些命令执行完,而不用一条一条的执行命令,这种方式被称为批处理。
常见的交互式方式有:cd .. 或 pwd 等;常见的批处理方式,我们需要写一个shell脚本,例如test.sh。下面我们主要介绍我们项目中需要用到的shell脚本的基本命令及其语法。
编写一个简单的test.sh脚本:
在shell脚本中用#表示注释,相当于Java中的//注释,但是如果#位于第一行开头,并且是#!时则例外,它表示的是该脚本使用后面的编译器/bin/sh解释执行的,第二行表示插入test用户下的环境变量。在写好的shell脚本之后,我们需要给这个脚本添加可执行权限:在Linux可视化窗口执行chmod +x test.sh,然后这个test.sh这个脚本就可以了,如 sh test.sh 或 ./test.sh。
shell脚本的基本语法:
变量:Shell变量通常由字母加下划线开头,由任意长度的字母、数字、下划线组成。例如my_name="csp",这里需要注意的是,等号的两边一定不能有空格号。
命令代换:由“`”反引号括起来的也是一条命令,Shell先执行该命令,然后将该命令执行结果立刻代换到当前命令行中。例如执行一个当前目录的代换到变量path_dir中:path_dir=`pwd`,则shell会先执行pwd这个命令,将pwd命令的结果赋值给变量path_dir。
上述脚本中,就是将test数据库中的信息查询结果代换给b这个变量。注意图中用的read -p 命令是表示等待用户输入一个变量transDate的值。这里我们再介绍一种自动赋值的变量方式,而对这种方式的脚本执行时,一开始就需要进行赋值,脚本编写如下:
执行上述脚本时,命令需要 ./test.sh 20190616,这里的20190616就会自动赋值给${1}。
条件分支:
与C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命令组成的,这里我们需要注意到的是如果两条命令写在同一行则序号用(;)分号隔开,如果一行只写一条命令就不需要写分号了;另外then后面有换行,但是这条命令没写完,shell会自动续行,把下一行的命令当成一条命令进行处理,在if命令的参数里,执行结果为0表示真,执行结果非0表示假。例如:
循环:
Shell脚本的for循环结构类似于某些java语言的foreach循环(迭代器),例如
图中,还用到了另一个命令 break,这个命令表示跳出循环。其中 break n,表示可以指定跳出几层循环。说到break时,在shell还有一个命令continue表示跳过,而同样continue有命令 continue n 表示跳过几层循环。
while的用法和C语言类似,例如: