shell编程基础
Posted dubhlinn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程基础相关的知识,希望对你有一定的参考价值。
shell概述
1. shell编程的意义
个人理解,shell编程类似于存储过程。存储过程是完成指定功能的一组sql语句集合,而shell编程就是完成指定功能的一组linux命令的集合。例如,我们要在服务器上部署一个一个项目,通常要做如下几个操作:
- 进入项目目录:cd /home/dubhlinn/project/demo
- 切分支:git checkout master
- 从远程仓库拉取最新代码:git pull
- 打包:mvn clean install -P production
- 部署:docker build -t ...
每次部署都要执行相同的一套流程,如果能把这些操作放在一个文件里,只需执行这个文件即可,会明显提高服务器运维管理的效率。这就是shell编程要满足的需求。
2. shell分类
linux的shell分类很多,例如
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
其中,最常用的是bash shell,即/bin/bash。
3. shell编程的格式
可以使用vi或vim编辑器创建shell脚本文件,其扩展名并没有要求,可以使用(.sh)表示它是一个shell文件,例如hello.sh、deploy.sh等,但是使用别的扩展名或者不用扩展名也不影响其执行。shell文件的第一行一般要指定shell种类,#!用来告诉系统,这个文件使用哪个解释器。例如最常用的bash shell这样写:
#!/bin/bash #这是单行注释 echo "hello world" :<<! 这是多行注释 这是多行注释 这是多行注释 ! echo "byebye"
4. shell脚本的执行方式
如果给shell脚本赋予了可执行权限,则直接写文件的路径名即可执行,可以使用绝对路径或相对路径,注意如果shell文件正好在当前目录下,相对路径要以 ./ 开头,而不能直接写文件名。如果并没有给shell脚本赋予可执行权限,则需要在文件路径名前加 sh。一般推荐第一种,即赋予用户对文件的可执行权限。例如,在当前路径(/home/dubhlinn)下有一个hello.sh的脚本,
(1) 当用户对其有可执行权限时:
./hello.sh
/home/dubhlinn/hello.sh
(2) 当用户对其无可执行权限时:
sh ./hello.sh
sh /home/dubhlinn/hello.sh
shell的变量
1. 变量的定义
变量名 = 变量值
#输出环境变量 echo $HOME echo $USER #自定义变量 A=12 B=hello echo A=$A echo B=$B
shell编程中变量分为两类:环境变量、自定义变量。环境变量是linux系统已经预先定义好的变量,可以直接使用;自定义变量必须先定义,再使用。定义变量的的语法很简单,但是有几点需要注意:
- 变量名可以由数字、字母、下划线组成,但是不能以数字开头
- 定义变量时,等号两侧不允许使用空格,这一点跟Java、JavScript等语言有区别
- 变量名习惯用大写字母表示
- 定义变量时不用美元符号($),使用变量时要使用美元符号($)
- 变量被定义后,可以重新赋值,后面的值会覆盖前面
2. 声明环境变量
(1) export 变量名=变量值
(2) source 文件路径名
第一步跟自定义变量相比,只是多了一个export关键字,第二步是为了让shell文件生效。完成这两步之后,可以在其它的shelle文件或中获取刚刚声明的环境变量。而相比之下,自定义变量仅限于在一个shell文件中使用,在其他的shell文件中无法使用。
#设置环境变量
export VILLA=Spain7
export TORRES=Spain9
需要注意的是,在一个shell文件中,自定义变量会覆盖同名的环境变量,例如
#输出环境变量
echo VILLA=$VILLA
#自定义变量
VILLA=Bacelona7
#输出,看是环境变量还是自定义变量
echo VILLA=$VILLA
第一次输出的是环境变量的值:Spain7,第二次输出的是自定义变量的值:Bacelona7。
3. 变量的撤销
unset 变量名
#撤销变量 B=hello unset B echo B=$B
4. 静态变量,不能被撤销
readonly 变量名=变量值
:<<! 静态变量 不能撤销 ! readonly C=5 echo C=$C unset C echo C=$C
执行这个脚本会报错,因为C是静态变量,不能使用unset将其撤销。
5. 将linux命令的执行结果赋给变量
变量名=`命令`
变量名=$(命令)
#将linux命令的执行结果赋给变量,两种方式等价
A=`ls -lh`
B=$(date)
echo A=$A
echo B=$B
以上是关于shell编程基础的主要内容,如果未能解决你的问题,请参考以下文章